СПЛИТ-БАННЕР

НАВИГАЦИЯ-КАРТОЧКИ

МОЕ ФОТО

AVZ-CONFIG-STARTeyJ2ZXJzaW9uIjoxLCJoZXJvIjp7ImV5ZWJyb3ciOiLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsIm5hbWUxIjoi0JDQvdGC0L7QvSIsIm5hbWUyIjoi0JDQstCw0L3Qt9Cw0YLQviIsImxlZGUiOiIyNTAg0YHRitGR0LzQvtC6INGBIDIwMTkg0LPQvtC00LAuINCV0YHQu9C4INCy0Ysg0L3QuNC60L7Qs9C00LAg0L3QtSDQu9GO0LHQuNC70Lgg0YHQstC-0ZEg0YTQvtGC0L4g4oCUINGB0LrQvtGA0LXQtSDQstGB0LXQs9C-LCDQtNC10LvQviDQsdGL0LvQviDQvdC1INCyINCy0LDRgS4iLCJwcmljZUxpbmsiOnsidGV4dCI6ItCk0L7RgtC-0YHQtdGB0YHQuNC4IOKAlCDQvtGCIDE0IDkwMCDigr0gwrcg0YHQvNC-0YLRgNC10YLRjCDRhtC10L3RiyIsImhyZWYiOiJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIn19LCJ0aWxlcyI6W3sidGl0bGUiOiLQn9C-0YDRgtGA0LXRgtC90LDRjyIsImNhcHRpb24iOiLQn9C-0YDRgtGA0LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LIg0JrQsNC30LDQvdC4IiwiaHJlZiI6Imh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIiwiaW1nIjoiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL1dGWTdVdUpld3I3TnVBdzY0M2ZkN3h1ZkJ5cVFpc3pIL1piUnBCeGpIQVJ6MUYtSjA3OXZDZDJpOGdqaTBuT1FQL0tWSkFidGdFT3lLUnFtalE3RmZuRlEuanBnIiwiYWx0Ijoi0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IOKAlCDQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4ifSx7InRpdGxlIjoi0KDQtdC_0L7RgNGC0LDQtiIsImNhcHRpb24iOiLQnNC10YDQvtC_0YDQuNGP0YLQuNGPIiwiaHJlZiI6Imh0dHBzOi8vYXZhbnphdG8ucnUvcmVwb3J0YXpobnl5LWZvdG9ncmFmLXYta2F6YW5pLWFudG9uLWF2YW56YXRvIiwiaW1nIjoiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL2FsM3oySzdjdjFDSkF6UV8tRUlFb2xxSUVKU1NXYXFQL2kzRnFYd3k3a285c1R1TVJhWXFsdFpldXg2SWNyX3ZPLmpwZyIsImFsdCI6ItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAg0LzQtdGA0L7Qv9GA0LjRj9GC0LjQuSDQuCDRgdC-0LHRi9GC0LjQuSDQsiDQmtCw0LfQsNC90LgifSx7InRpdGxlIjoi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyIsImNhcHRpb24iOiLQndC10LTQstC40LbQuNC80L7RgdGC0YwsINC00LjQt9Cw0LnQvSIsImhyZWYiOiJodHRwczovL2F2YW56YXRvLnJ1L2ludGVyaWVybm9lLXBvcnRmb2xpbyIsImltZyI6Imh0dHBzOi8vaS53Zm9saW8ucnUveC96Zk5XZzBSQWN0Q2FZdkNkUDhOUzZoM1FjS3FJT083SS9vVkNtcHNSMkEwX3pDQnVXUWJtN2RKWXdOUTZ5c29xRS9UcGFFYjlRWnZNZWk4MDdUdkdXMmhfdC1OQlhNekRlUC9TZHZKdkVzd3J2UmlUZGRoVWlCUmx2OTF1NHRhejlfSS9yYUNmc0lJLTZGbVp1T05mQXFIYjd3LmpwZyIsImFsdCI6ItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAg0LrQstCw0YDRgtC40YAg0Lgg0LTQuNC30LDQudC9LdC40L3RgtC10YDRjNC10YDQvtCyINCyINCa0LDQt9Cw0L3QuCJ9LHsidGl0bGUiOiLQktC40LTQtdC-IiwiY2FwdGlvbiI6IlJlZWxzLCBTdG9yaWVzIiwiaHJlZiI6Imh0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4iLCJ2aWRlbyI6Imh0dHBzOi8vdnAud2ZvbGlvLnJ1L3ZpZGVvX3Byb3hpZXMvNTlTU2VfZm5fa2Vtd3cxcDlFR0RQSXR1T3luUFNrbHEvUmtKb1VmTWFpdWxTRkxiYlNOV1NGWjNXT3ZmU0lQOHgvVEdmZGd0anJXVnYyNTUxOVRHY1RCMkltdklzMEFScGgvOEZBUU15a0RUZUNjdXFNbm5qdG1xNE02MTRtNHkwQ2IvcWRqM2ktdlBqaGVnVkI5RW0wVnc5Nlp2TUQ3cXA5TnUva1ZhV25yZ0VXTW1YcjBjU1VKVEJFanV1WkkxcFJaZFAvRjIzb2p4RHpOTVRSTVhUZnhJcVBUQS5tcDQiLCJwb3N0ZXIiOiJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvYWwzejJLN2N2MUNKQXpRXy1FSUVvbHFJRUpTU1dhcVAvaTNGcVh3eTdrbzlzVHVNUmFZcWx0WmV1eDZJY3Jfdk8uanBnIiwiaW1nIjoiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL1ZpN0d0M0pGd2NYMWFHWlBtbmdobmJlXzg4WlN0M1FxLzY3cnZ1WjYtYkNUWmF4R29BMlhDTDFVZmU4LU41OWxzL2tqT0Qxa195RGJEZHIybEVVaklCUVEuanBnIiwiYWx0Ijoi0JLQuNC00LXQviDRgdGK0LXQvNC60LAg0LIg0JrQsNC30LDQvdC4In1dLCJhYm91dCI6eyJpbWciOiJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuV19MRTRsWmlUNHYvLUk5MDRPOW1NYmJQelU4Ykp2TmZxdUlBQVF2SzN3WEIvNFI0ZXhTUWZCMVhVMnZaaTRXOWp3QS5qcGciLCJhbHQiOiLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4g4oCUINC_0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3Ri9C5INC_0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4IiwibGFiZWwiOiLQntCx0L4g0LzQvdC1IiwidGl0bGUiOiLQkdC-0LvRjNGI0LUg0YfQtdC8PGJyPtC_0YDQvtGB0YLQviDRhNC-0YLQviIsInAxIjoi0K8g0L3QtSDQv9GA0L7RiNGDIMKr0YHQvNC-0YLRgNC40YLQtSDQsiDQutCw0LzQtdGA0YMg0Lgg0YPQu9GL0LHQsNC50YLQtdGB0YzCuy4g0JzQvdC1INCy0LDQttC90LXQtSDQv9C-0LnQvNCw0YLRjCDQvNC-0LzQtdC90YIsINC60L7Qs9C00LAg0YfQtdC70L7QstC10Log0L3QsCDRgdC10LrRg9C90LTRgyDQt9Cw0LHRi9Cy0LDQtdGCLCDRh9GC0L4g0LXQs9C-INGB0L3QuNC80LDRjtGCLiDQmNC80LXQvdC90L4g0YLQvtCz0LTQsCDQstGL0YXQvtC00LjRgiDQv9C-0YDRgtGA0LXRgiwg0LAg0L3QtSDRhNC-0YLQvtCz0YDQsNGE0LjRjy4iLCJwMiI6ItCX0LAg0YHQtdC80Ywg0LvQtdGCIOKAlCAyNTAg0YHRitGR0LzQvtC6LCDQvdC10YHQutC-0LvRjNC60L4g0LzQtdC20LTRg9C90LDRgNC-0LTQvdGL0YUg0L_RgNC10LzQuNC5INC4INC_0YPQsdC70LjQutCw0YbQuNGPINCyINC-0LTQvdC-0Lkg0LjQtyDQs9C70LDQstC90YvRhSDQutC90LjQsyDQuNC90LTRg9GB0YLRgNC40LguINCf0L7QtNGA0L7QsdC90L7RgdGC0Lgg4oCUINC90LjQttC1LiIsInN0YXRzIjpbeyJ0YXJnZXQiOiIyNTAiLCJzdWZmaXgiOiIrIiwibGFiZWwiOiLQodGK0ZHQvNC-0LoifSx7InRhcmdldCI6IjIwMTkiLCJzdWZmaXgiOiIiLCJsYWJlbCI6ItCT0L7QtCDRgdGC0LDRgNGC0LAifSx7InRhcmdldCI6IjUiLCJzdWZmaXgiOiIiLCJsYWJlbCI6ItCd0LDQs9GA0LDQtCJ9XX0sImF3YXJkcyI6W3sibWFyayI6IjUwMCIsInN1YiI6InB4IEF3YXJkcyIsIm1ldGEiOiLQv9GA0LXQvNC40Y8iLCJocmVmIjpudWxsfSx7Im1hcmsiOiJBR09SQSIsInN1YiI6IkF3YXJkcyIsIm1ldGEiOiLQv9GA0LXQvNC40Y8iLCJocmVmIjpudWxsfSx7Im1hcmsiOiIzNSIsInN1YiI6IkFXQVJEUyIsIm1ldGEiOiLQv9GA0LXQvNC40Y8iLCJocmVmIjpudWxsfSx7Im1hcmsiOiJQb3J0Zm9saW8iLCJzdWIiOiJBd2FyZCDCtyAyMDI0IiwibWV0YSI6ItC_0YDQtdC80LjRjyIsImhyZWYiOiJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3In0seyJtYXJrIjoiVGhlIFBsYWNlIiwic3ViIjoiRWNvbm9teTxzdXA-wq48L3N1cD4gwrcgVm9sLjMiLCJtZXRhIjoi0L_Rg9Cx0LvQuNC60LDRhtC40Y8iLCJocmVmIjoiaHR0cHM6Ly9hdmFuemF0by5ydS9uYWdyYWRhLXRoZS1wbGFjZS1lY29ub215In1dLCJhZHZhbnRhZ2VzIjpbeyJ0aXRsZSI6ItCW0LjQstGL0LUg0Y3QvNC-0YbQuNC4IiwidGV4dCI6ItCd0LUg0L_RgNC-0YjRgyDQt9Cw0LzQtdGA0LXRgtGMLiDQoNCw0LfQs9C-0LLQsNGA0LjQstCw0LXQvCwg0LTQstC40LPQsNC10LzRgdGPLCDQuNGJ0LXQvCDQvNC-0LzQtdC90YIg4oCUINC90LDRgtGP0L3Rg9GC0LDRjyDRg9C70YvQsdC60LAg0LIg0LrQsNC00YAg0L3QtSDQv9C-0L_QsNC00ZHRgi4ifSx7InRpdGxlIjoi0J_QvtC80L7RidGMINCyINC_0L7Qt9C40YDQvtCy0LDQvdC40LgiLCJ0ZXh0Ijoi0JHQvtC70YzRiNC40L3RgdGC0LLQviDQutC70LjQtdC90YLQvtCyINCz0L7QstC-0YDRj9GCIMKr0Y8g0L3QtSDRg9C80LXRjiDRhNC-0YLQvtCz0YDQsNGE0LjRgNC-0LLQsNGC0YzRgdGPwrsuINCd0Lgg0L7QtNC40L0g0LjQtyDQvdC40YUg0L3QtSDQsdGL0Lsg0L_RgNCw0LIg4oCUINC_0YDQvtGB0YLQviDRgNCw0L3RjNGI0LUg0L3QuNC60YLQviDQvdC1INC-0LHRitGP0YHQvdGP0LssINGH0YLQviDQtNC10LvQsNGC0Ywg0YDRg9C60LDQvNC4LiJ9LHsidGl0bGUiOiLQoNC10YLRg9GI0YwgSGlnaC1FbmQiLCJ0ZXh0Ijoi0KPQsdC40YDQsNGOINCy0YDQtdC80LXQvdC90L7QtSDigJQg0YPRgdGC0LDQu9C-0YHRgtGMLCDRgtC10L3QuCwg0YHQu9GD0YfQsNC50L3Ri9C1INC90LXRgdC-0LLQtdGA0YjQtdC90YHRgtCy0LAuINCe0YHRgtCw0LLQu9GP0Y4g0L_QvtGB0YLQvtGP0L3QvdC-0LUg4oCUINCy0LDRgS4ifSx7InRpdGxlIjoi0JvRjtCx0YvQtSDQu9C-0LrQsNGG0LjQuCIsInRleHQiOiLQodGC0YPQtNC40Y8sINGD0LvQuNGG0LAsINCy0LDRiCDQvtGE0LjRgSDQuNC70Lgg0LTRgNGD0LPQvtC5INCz0L7RgNC-0LQuINCh0LLQtdGCINC4INC60LDQtNGAINGA0LDQsdC-0YLQsNGO0YIg0LLQtdC30LTQtSDigJQg0LvQvtC60LDRhtC40Y8g0Y3RgtC-INC40L3RgdGC0YDRg9C80LXQvdGCLCDQvdC1INC-0LPRgNCw0L3QuNGH0LXQvdC40LUuIn1dLCJjdGEiOnsidGl0bGUiOiLQlNCw0LLQsNC50YLQtSDQvdCw0LrQvtC90LXRhjxicj7RgdC00LXQu9Cw0LXQvCDQvdC-0YDQvNCw0LvRjNC90YvQtSDRhNC-0YLQvi4iLCJidXR0b25zIjpbeyJ0ZXh0Ijoi0J7QsdGB0YPQtNC40YLRjCDQv9GA0L7QtdC60YIiLCJocmVmIjoiaHR0cHM6Ly9hdmFuemF0by5ydS9jb250YWN0cyIsIm91dGxpbmUiOmZhbHNlfSx7InRleHQiOiLQn9C-0YHQvNC-0YLRgNC10YLRjCDRhtC10L3RiyIsImhyZWYiOiJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwib3V0bGluZSI6dHJ1ZX1dfSwiZm9vdGVyIjp7ImNvcHkiOiLCqSAyMDI2INCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsInNvY2lhbHMiOlt7ImxhYmVsIjoiSW5zdGFncmFtIiwiaHJlZiI6Imh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIn0seyJsYWJlbCI6IlRlbGVncmFtIiwiaHJlZiI6Imh0dHBzOi8vdC5tZS9hdmFuemF0byJ9LHsibGFiZWwiOiJCZWhhbmNlIiwiaHJlZiI6Imh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIn1dfSwiYmFubmVyIjpbImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9DekxBUHAwWVdWeWpieEFsRDZVUmdKa0o4QWpCcXZOWC95Wlp1S0JFZFYtUVFvdFZuZ2FsS3hKTUhuNkZGZlFFOS9xMFg2NlUzcUd6TERmODVpWFQ5VFNRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC96Zk5XZzBSQWN0Q2FZdkNkUDhOUzZoM1FjS3FJT083SS9vVkNtcHNSMkEwX3pDQnVXUWJtN2RKWXdOUTZ5c29xRS93WUVjZzhtUE1TRnZEbFpEcnZDOEJWV1FuaTNrTzBvUy92d3BiUk40VEdWbVlBQ3BOUWZKYVh5OUZ4b1A5dGVHTS9Rd3JnZDZZNzJIek0xTldHbXlfSzZRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9iUVA2ZWdhY05VX2hIeWhRcDR6aE1nellHeTBTekMxWi9wOEt3cmU1TXBhV1JsLWViWUlTUGhZN0hNVG1lMDJrUy9Ba0JOWVRIZXhKdS1pYTMxZmpQaGJBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS92c25paDRCZlhtcmZUSXI2dVpJNXUydFNNS1ZYZzlNbS84VEMzbzBkMzRveTFhaG1MaGJJU0JkQUxqUFJCRWw1ay9Dc1RiRUEwUWlvekY3ZTkxWXVQVl9nLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9LNWFxYjVrRlhWSGlDQWFjbTFiYnEwTm0yOGJRRmtZTy9lZEZNU2h1bHpsajZiYkowQm1mX3VCMHctRnp5aENCSS90MVJZWmZMbXgtUkNRVGlQVlh2ejhnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9nOHYzd0V4bldtV3RYRVJHSndOSWVEamxDNm5zSUFhZi9ZdGdZSzBDTVZaSXdEUjRwek9ONEJmeUVRQzR2UzFPOC83clpVc0hJNDVZcXY3QUV4S25NVjdRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC92ZGF5b18wRmtMTnNlTzFCVlVjSkltb05ZcFZ2TWpOci92M1NobDA3cW0zdXJRX2RPTzZ4ZU00cGpKM0EwUXNJYi9jWjhUdERoWUJrMXdkMWNNNHdIRmlRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9PTEctbjlNNTFhVmpiSWI5elREMUJodkw1RGw1YTlrWi9SNS1Camk0T3l0R2lnbTJleFFMUGhrbk83WXRtckNUNS9scElha2tsY0kwaTRmb3JVUFFSZkdBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9Qck9odWo0djlKa2N6eHBPdjFxOEpORldOeWMyd0V2eS9QWkVEWkltbVEwOHJwR05kZkhYQ184VXF2Rmwtc0ZvVC9KVWtfSjRHdmx5Zk5HTF9UU1EzQmJ3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9wOWswT0ZZVnQ4ZnQ5UzdENHNwQ24tZTdNai1RXzMyYy9pNnlQaGRZNFY4WXVWZkRoX1N4OVdUbXZpWEQ2eG1TaC9VUDNFSG54VEphNThLZ2JGTU1mbjdRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9GQ2Z3U1FJVTU5NkhhMkFEaFVwclBaTW8zQ09ITkk5ZC9nMU1ENXFWRVB3dHlac215UXZYVVpraTVrWDdlanRrVC9nTVNJaVJIbUxtYXJJUTk4a1FEZkNRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS82Q3F1MGJlVnd1eUkxckx3YmdicmFBc3hZOGRURFNEYi9QM005SUQzbFE2dUgwVnlPYzhEV0JiU2xfZDgzU1FiSi9ZOVAySHF6ZnFrdVM5dEhmOG45NnJ3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9qU1hKRk5EOG56eEtqc3dtajhZZGhrVlp0c0NGT0JkSi9YOFh1ZFkxQVNKVHdhWW5VWmk1VkJuQ21WemZYUWZsNC9qTndObXNOclQtQXJpbFFWbjlLdVRBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS94QnlaQnZGdmE2Q01YNlJoZ0kzODZ4bXM2YVEtc0Y0VC9FVzdxajd6QldNYnBtbEgzcUdERDB3N2FxRlVuN1IyNS96Y3VEaW8wbF9Qdm1haHJ2cXBwcHBnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC91T1IySEF5eVV0V280bEdoRmYwbWxydzNOTlAzVkJvZS90SjJiWkpVXzR4ZzNsZlRpcHpOZkl5RTR6TzdMci05OC9fOWRVU3k3RVkybzZtWkRBdWdCejJBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9TYnZjTUtiUFVxa0wxMGp5MFVqMlNQRm1QUWhFcHhiTC9kRVV6eGY4ZUloX0lnRGFIN2hIMzdVX2lWWWQ5NHJQOS8wVlB3MWoyRGxCSFI5cVVGczJqZjV3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9HMlpFWGVTeTNfbl93NkNSMGRrMDRwM1haME8zYktfSi81c2JXeEFFZHlhUnVCXzdYWWJGeHo0a1AyVXE0WXFucy9wYkVWa1lqNGRWbUZDbDhtQ0lFckp3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS84Y3pXWjktQkVTN0txRXp1dG4yYTdNanZTb3pWR0xWTy9TeVVDWG5kUHdCV0VudUFjNGJfa0VmbVkwcHNyMTRxTS9Dam1vM0cyZ3JmYkFJM2otZDZLcXNBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC93UkFSc1gtYmxuVllURENjMHJVeXhhYmU0QXRNLUhoaS8wZmZWd0lUNFFtNjA1Z3hWWlpHN3l1endweDRIeGloMy9DOXFtOV80NUR2eTJGRjZrWXREQVl3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS81NmpfVWRfa0s4UGpmMnhHNjFfeG5HODFxLXF2X3hsZi9Gb3JDWUJFS0szSnFZdzZnMHlqdUtFNE1DZjZWMFI3WC92Vmt3Qnl3czVENFNpc2lnX0hhVTFnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC96Zk5XZzBSQWN0Q2FZdkNkUDhOUzZoM1FjS3FJT083SS9vVkNtcHNSMkEwX3pDQnVXUWJtN2RKWXdOUTZ5c29xRS9IVVJOWm5LTlVUUTRvempBc3A5SmY4Y1NybmJZbXJWMS93azFod25BR3VFbDItZ3J0MFljR2l3YlJrNlhvT3VLQS84RmhnZGlsUGpkblN5QUtzblpHSHpRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9tMWJkSURUZDhvdGFaSXprdmZJblBuS01KRE8tMFFxdi9DUXRrbU5LOVJBdnh2QkZ6a0dJamhMX2RudHd1eGVVZi9fcGlUeTZyekJjdmFUSFVWT0NPc0RRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9PWDJhc3lPU2pNNjZsLW1yUGtmYzF2TmN3YVRhOXFZSC80NTUyUHV4aFFacGZyb3dia2pVY25ubWRpS3hWcDg2My8xYTB5dG55aUNXSFE3QUhzQzlMcTJ3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9HSjBtODhnUzRDSkJTSVdlZFVLeG9yR1pXLUwwZWxGbS9maEZZSi1RbGxjQzQyTkJ3Y1B3SVFTTmUtWGlma09JZC9RRkxBYUhoNGlNWWUya0tvZE1yY3pnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95b3BsWG16Zk5OMjRjcnZud3ZOblBTT2djZlktRE1PRS9DMVpLY29QR0RZMzNVWnBSMkptSlRUX2RrNENjRzUyaS9wUi1xM0cxaU1ibXZnalpjZFRVRzRRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9YUl9QYWdsdTlwaU5nTDJNdEZZYWRLMkJyYk5BM1lqZS82ZEU3WTdCRzNvOWNXX0hxR055M2s1OW51Y0VSMEtvdi9YTVB0NVp6a0tpeC1SVnl1cG52NGJ3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9DY0JrN29yc3VrV29Kem5kemVDVXJITjRlQ2J2X3FPUC8xQ0NnaGs2Wk9jQzM0TkFGUC1tUTdSZHZicVc1MVUtQS80SVB1QXo5S2tleVBYWFpfU2dySndRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9VU1F4NmotM3Z1OS1DS04wMnlnZjJSMWp6R3ItSHlGei9razd0aktScnNPalh6WmRCUnliWHNiTE94MGRxTXJfZS9Xb25oeTJYaWk5Wk9yaXNGbk9YZVd3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8wT1F5c0d1TVVlUWU2eHZFZnBvc29oNEFpWlREUXlleS91UzlJaDBmRXVleVlmNEwyS2ZldG4tYjlJS1c3QUZjdy8yZVNuOWZNQ28zMTdFMElnRWF0LWhnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9Xd2QweG1EUnRVTUVYcHFreEdobU4tbVUtVTcwZWtBbS9GQlRfTm9SOXlOQWhUWDlreGlZeEFtaFhkS1VueHFOVi92aWJMU096UlNVQWtfSnVhQ0FERDVnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95VUVIYUJRQk5xbTV2ZlBkbnlhVE5YUEkzOW9RSzlPTC9ReW83R25jaURoYmRoektfYTVJQ3B5b0dYdDZ4cThyei8xeXQ1Skd5c0piQjhJeDR4VTVTVnRBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC96Zk5XZzBSQWN0Q2FZdkNkUDhOUzZoM1FjS3FJT083SS9vVkNtcHNSMkEwX3pDQnVXUWJtN2RKWXdOUTZ5c29xRS9vVmd2UjY3RGFhM0pyNVpLRkRVOGFiYWdPLWtOWVZTUy9ycjlLajJXNzVPWUdIWExZbEFFcG1FS1pVWEQ2UFBmYi9pbldRb05NZ0JucnI3eGUyRXBjMXVnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9SSHBZazRVdDhzZ2lGNTVuMjYtQ1Z4M1c0OFBZcUtrZS9lR09rbUU5SGwyRGpJaVNTdzJDejBrT2tud0VqdTQ1Yi84UHg5YUgwZ3hkMWl5QlI0S05uVmlRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8xZV9hZGFwRGdaU0dWODBSdmg5QmlGM1FvaDFrMEhnSy9pQmwwX3RrOF85TzZwdXdwS3JtS0lDZm9SQ2xpZlg0aC83Wk5XY3gyT1RwZG5wVVNJS3FsX1lnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9mamwyaW1aQWptMUtBQzhqTnhoYnM5YmFqTEoxZHFySC9DWDg5czhsSU9fT3p1bkJ5SmNwN1RIVVc3VFd1T3Q3eS9MbWdHWjhEZWFwUGFPYmcwUURRRXRBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS80d0FtN01la01rLVBoWHhaa0w4NkpkcDBNbmwwNTYtcC9rRmtwOGZoWmZkWmU1LXl6S1JwUnc4YTI0RkhPc1FsRS9jcUtYV3RWbHp6clRHVEJic01BNUxRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9GdklRbkN3QWhDSklaOG80RGl6V3ZXcDdfS3dmUGM2VC9xdUxTdVFOeWtyY2tZNkU2Um14dE85Q0E4XzNOd0dYZy9ZMW4xdHZ4RUxpMjJXVkVoQmVZQlp3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9VZWVkdldMdDVuR1RTUkFRcmo0SktQeV9rTjRJNjczMi94MXZPVjhCS01TcE04ZGVJbldibkFwWTZoOXM0YnZuci83c2VYaF9QbWxxUWNabS1Rd2g2S2lBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9jazdIM3dLUTVZcWJXYV9pVjhZckVBdlYyMVNpMUlXSy9jT1FQblhybkRSWE5kbFdjUXkybTY1MGFOYnk4dHI2aS90VXlEamNYek9NMU9RYlduLWxzcURnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9TX24yVmw3UzBwZ1VBSzhFZFFseWdzWmQ3cWJxOHJ4aS82OUFKckhPSWkyX2RUQ2htNXY1SVpCdXBVU1B4TEtNVy9fUjN0T0UydXg3ZzJqT2JpcXEyRGNnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9WaTdHdDNKRndjWDFhR1pQbW5naG5iZV84OFpTdDNRcS82N3J2dVo2LWJDVFpheEdvQTJYQ0wxVWZlOC1ONTlscy9rak9EMWtfeURiRGRyMmxFVWpJQlFRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9EdlUtMFVmV0I5RV9pUTd6d1B4d3BXMjNjd0FOR0lpQi9EeXM3Skw2TVNUd2lZMllheDV0TXl5Rm5CRUVKQ01WZC95eTdGUlVqeDNxa2JhR1lxRHE4dG9RLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS81azBqT0dSNlIwdzZEZHNzZGNGQTRBLS05LVZST2JvOS9EeUVsV0xGVG1uM3ViWnBaSS0yU0NCcks5Tmd6cklQOC9KQlIyWkdZakxaNExPOFhhQVdIbnRnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9vVzRxai1tTFN4T0dKTGZEbWJTRERhYmhwTlc4bmVLOC80bFZuTU04Wm5DekN5RWJnWEluSHpDdkNwclBHcXJKNi9IOXViVDBIOUlGQUNiYk9QeGVuRjdRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS93Q3NoMUZhZzVqLThKNWxvOGR2VnoySmliZXJTY3ljOC9vZGxiZmRfQjlpaU1Ld2o0WVBoaHU1RTRaRV84NlY2Ni95OGdLZldZZTBMUGtORDJ2VEdEeG1nLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9lZVNlTVduTHcxSUdKUkdNbmkzaXppZU01S21IRVNLTC9pWmpYMDNrdnVSQXpvUHpMRFJtUUEwZXk3ZU1FTDI5aC8zLVZwMld3b3JUY3RwNDJaU0hkNmJRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9sWWlnWnlmNnpoYjlZZU5jWS1BdC1WSjNZdWMtYzhSUC9MQnM3YmlVSFB2Z1dhTUtFYjZNeE1HOXJHR2JfdzJJQi9hX0tnN25QRU41Z2pxWldwbWFCRnF3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9DVlZZNmJlUHJ6VTNOelRlU1dFbUFPbWNJNWxKUnJEaS93bGpNNlR6MkpoVjRaX0h0dHlCNW5yTG9CT1otblJLeS8wcGJXLXA0dlJrcks2N2FtR3ozUG9RLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9ob0czUnNlU2ZMd0NzNWJ1Z29MTXRKWjBLTEdwc3Q5Sy8ycm1zY09hajItUzdOR3E0SmZIdnBweXEya3E1RXVYOC9CcHI5V2NGaFVDVk5FNHNqVDlORHhRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS92TGZhYWNzSnozY284LWZVQnZta3M5c2hXSFdBbEdJMS9GR0tSZGNYUVNDbFFXWVFvNzVYb0lfYkwwb24wYWxYUy9LVFNwNDU0b2Z3eHJjNWF3Vmx0VVp3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9DX1VKc1ZmMWRKVmwwSUowXzM1VDRVZTZYTUtUUDh1Ni9EMVkzeGhiQV85WVpaemVfRzF2cnI4Z01zYjFSLVYyWC9OdlRZMWUxNFNndjZicmdZWHJmWEhRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5maXJLQkEwbUhXNS9FNDB4czFfOWlVYkxoRy13UnVDb1JUME8wWDJHMGYxWC9BRjZRQ2lRbURjbWM3YVYzVEwyR2Z3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5SemktMFlLd0ZBeC9WdjJ0Y09VODVZdk94Z0dYUE1EdThKVnpZTEYzaGpURi9taXdRYndndDFoMkg4Y0J1dFg5VUZnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9NeERQQ1BkM1JqQW0yQS13M25ZakdVcDdkV3lobDlOQi92bEU5b0VEVG43bXI1RFdOSmdOSWQzOUhBLVZaT0doRi9HcWZkWDdtYmtiTmJxYnRpNEFBaURnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5kMUZjbzRKVXB4eS9FY3hMdmtBcDFVMzZwNkZVRTZJbXN3U1FQemdGTFY2US96RHpFenpSSnNDVURXSkozQzh0WVhnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5kcF9zcUZudEZyXy9FdnNNaWtXNjFfMGtScHBNTlhVMWMzWmdlSlZ2UmlzNi9DOFB2d3JGdU5SMEttMDdBOWhzWS1BLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5XNURWZks3d0RPcC9pbGlQcmlFQjBpV3ZSMXFXZGxwWXlmMG1ETU9OakY3Vy9CaTVWaDluSmNmMHdLczU4LVowcnBnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5WZjBHOEw0dEEyWi9Vd0k1VzdmcUZJNS1kdkRadHNjcUcxby0ydEZYeFdHRy9IcTZtZFV0RWhkbHE4elFpOUtlY2VBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5ad0RYc214R3JJay8yeTNwSzBWdGRFWjFjcjFkdmw4S0dxVWliQ0MzX190Ri82dC1lMEYyakt2NGtuNllGYk9fY3pRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5aQm9hRGFpaFd6VC9CSzVIcmxZQzg2Und4QUdTUE90RUNyWFhtNGhUM2E4di9zSVR6a1YxTXJ2bW1yaXFXbEhvMGpnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5XZzVlY0todUpfdy9NNnVwb1pUbE14cXZRS1U0M1FPSHZpLWlqa2Jobjg2aC9abUpYbGtHMjlGVGd0VGI0QnpQbGdBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5iSlc4X3dQTmNNWi9KRWpBbXc0SjhieHpUV1pLZno3WU5BSlBJb0UxbWhkWi91V1dwTlJ1aTdHbFpDSVZmWFpweWdBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5Zb3BJYjUwblU4dC9lN0N3dDAzWEk1VTdhWEY4cHY3OERaUExWYjNJUVF6MC8xNDFwc0RCN3BmSlY3UWRvcGFPYjhnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5VbmNsYnQ0LU9PbS84RHhxV19QdkNHaFAzb2xwd1RFLTJRRFNXTlZfTUpuby9yOVhpWWxaalE0NWt0MWliYTBmLVBRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5lZVlxQ0NBTlRLTC80RGN5TG1OSGkwQTZaMkFVdGFNWDgzaVRjaHNOcndGUC9RNUI2czRFb25YV1I0YTg3VEdnd25RLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5Tdnp4SEhKQmMwQy8yajRpem9oNVJUM0ZKZEo1elE5YW5zSXpHSlVXVzN6Ui94SU9ENHQxdld1WlJvM09BcURrNld3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5jZlRHRmpiaURaRi9RbUd4YnI3WDd6ZWlIaVJJZWw5dlFrUV8xOWM4alNWUi92R1ItMWkxMmI1OWgzLW1SRUk3ZG5BLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5jYmhvSjNqQ2lFOS9CSTJlemk4eTh5NVJQcEZqalBVQXRfd25ELUtkOEtDXy8tR21xdGlBTm5pS3FxRl9aRXVnZkxnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5hOFg5SlEzZGxvTi8taFRJZWVLckQtMklrVjJ1ODk1TXRfYmpJcFFkZ3lBaC9DWXVIZm0xVmQ5RjFVREFVci1iTVFRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5TMGZYOGJkdzczdS93TVg2SWtLb2I4Q3YxQjllTEllaE9Ta1hISHloU3BjNi9MSVhyNFgtU2hNTHUxellhWDctMk9nLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5UdnlIZEpMQk5leS9RRnJvbGpsa0JaZjRqZ0xPbS1VV0twUXZQVGd3UmZGMS9sZl9ST3lVS1hSUDR1X3ZQRlc0NEx3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5YbURBRWdEVHJTOC9kd01FdWNfbk9lZTFBQ2xBbjRJMmkzdGM0ZTJfN1VOcS9SaVo1NzFLejBBLUN2ZDJtUGVKbkpBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5UMmhoaHFpRGZ4TS9jcmc1WWM2QnlvZm0xTU1pT1AzQ0FpR0tMRGRYZXFmVC9MOEdNNDkwdnQweHk1OHo5YVBINmZBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5Rdk11SThDdkR0Yi9VWkRVTXhGd3B1eTFPZ2JHUGRJWmdIR1NqTUhVUThXbS9zcGlYWVRkYU1Hb2dMOXVGS0RUUFJnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5aUnp0amxmYkpmUC9aLU1nYk9RYmdDTURYbFJKbUVGbGp4bkJuRVZ1eGdpOS9fdVlydFFpSWNZMllJcnJfN1RQVmlRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5Vc1AtaFVCeUZ6by9OM1NmaFlPaUhYeU1kX25HYVJEdFBjVlBvM0NlcTU4Ri93dkFmaW9fc2UzdmtINUxwZGoyUTRRLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5hTkt1MmN4Rm53ai9IWmszV25oeGNtam8zeUhyT09xSkVnWEtMMEUxQzhTOS9YRzhpM3dPZTZTbk9KQzBIYXFKSXNBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5XcXl5cTI0cTFjXy9yUVNETDcxaHNtYzFpMjZOUHBiZ0hvdTlLR3B4b1ptYy9OamlGRWQ4MXN1SVE1UG9DUU9RSS13LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5UbjRBVVBSV0VsdC9yb3dFaVRzNlRyc09RZGV3R2dCbmY4ZXFvWVltcU1XOC8xRVZYdGJidVREdVNwd2hSYS1oOE13LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5hSktYeXA2ZURuQS83UWh0RzFJZm52ak9ZSGRiTmIyNjF4SG12QXRMUkNJNC85OGZwN09NUjdpbTNRX3dCZGQ1T0d3LmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5VYTFac04tbElEci9oeVFjMzlTWXFpYm9GOW5SV3hVTVJHTWw2ZmFCWk1FVy9mZGxQSjZkMHd5Q3VBc096VHJ6NVlnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9zSGtFOEhsdlVzOWxRU3RSLXJGbWdlVC1rSzB1Nzl5Ry92TGR0SFR6WE1vYUlQQkEyTEhuLVp6b0dRMzBCY1hrZy9lTVJFZVA0LWExR0ZSVklON25ZSDZnLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9qd0xwZUl0aE9IMXo2Vy04dkRkeXE2UUFSR3BOYVNZMS9VOWtqdjRRRnd1WV9mNGtzVG5xVWppSW44cFN1UmJUdC9KeGxHeWZJcWRWODZ1R3B6TmxnSzVnLmpwZWciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvemZOV2cwUkFjdENhWXZDZFA4TlM2aDNRY0txSU9PN0kvb1ZDbXBzUjJBMF96Q0J1V1FibTdkSll3TlE2eXNvcUUvSmlQSlEzLTVPQUMzUHdBT0pPRmt1R0gtSE44emMtcVAvVVNVQjR5T2s2eko3bkk0M3BOX25IT2IwRTd5aG1jTHAvTXlQdVhyYk1RYkQ1cUt4M1FSUlRhQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMHZzT25tR0pRVGlwOTRlODNJYnpUNEtOMVFPT1NTR04vV1FXZjNlNGpVU1FtLWhMOGtOYUhPdkpROVROaEh1SS0vRl9MNGhWLWJSenVYcjUtNDJPYUIxZy5qcGVnIiwiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwLzVwRVY5eXJLal81TExUMjdjOEVIRnowaTZYLUV1OFhHL3RVMl9iajBHWVd4YmNQSlNEbGdnN1VQYVY1Rm9VTXlML1BQcjVLMHN0S2duLThoZV9Tb0Z0T1EuanBnIiwiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL1dVSXhtZUYzS3Y4cEhtY0JubmwwMnVFNUtvWHJZQ3g1L09fU3VzRkRLMnNhSnJUZFNRTGozYmhZQTFSN054YmZUL3hra1dsQ05Vd1QyYXVmbG9HT2JqeHcuanBnIiwiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL0dlemV2UXI4cUJfdGV0WWhrdXRoQ054T05Tejc0alNpL0lvOFBxbFVtOVBEcXQ4U3VlbDROREFEeE1pRkRJV3ltL1RYWU1zajBOZDFCakdac2JYaGQ5MUEuanBnIiwiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL3E0S01lMWpZWmlfWC1LNVVzY25HUzYzZEUtQkZlZFA1L1pLMzJGRGxXczB2VXA4b3RXcmp0WTlLQlhSMmFxOVVMLzN1WVpEXzRyMVFReEZQemxQRkRSREEuanBnIiwiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL054QUNkT2pLZnV4d2IzYzhfLXhDVEZBcUJOLVc3bHpDLzhqVjBxRFBIZTNwaVp5Zm5TbC1jLWR4MG1hU04tSWRIL2xMM3R1M2NjNmxhNXRkZUd6MzNHQ2cuanBnIiwiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL21ybENuVmdwZWZsa0hhUzBJR3VGUVJYUFpaak1zV29sL2pab3lELXl0M3NlVklhOTFLLTlmNC1rYnJHam5kb296L3lzS2paWmJuckxjZnNmRWQ5RzBTOGcuanBnIiwiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL3lvcGxYbXpmTk4yNGNydm53dk5uUFdIT3lCMG5DYlZoL3F5VG4zdndyTExGU2dQbjR2a05XMi1jSlZmQ2l5WnM4L2FvZWpZWW04MVJKUVAzcGpxb1MweXcuanBnIl0sImNvdmVyIjp7ImltZyI6Imh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsImFsdCI6ItCf0L7RgNGC0YDQtdGCINC90LAg0LHQtdGC0L7QvdC90L7QvCDQsdCw0LvQutC-0L3QtSDigJQg0YTQvtGC0L7Qs9GA0LDRhCDQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4ifSwiZ2FsbGVyeSI6WyJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvYlFQNmVnYWNOVV9oSHloUXA0emhNZ3pZR3kwU3pDMVovcDhLd3JlNU1wYVdSbC1lYllJU1BoWTdITVRtZTAya1MvQWtCTllUSGV4SnUtaWEzMWZqUGhiQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuVWExWnNOLWxJRHIvaHlRYzM5U1lxaWJvRjluUld4VU1SR01sNmZhQlpNRVcvZmRsUEo2ZDB3eUN1QXNPelRyejVZZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvcDlrME9GWVZ0OGZ0OVM3RDRzcENuLWU3TWotUV8zMmMvaTZ5UGhkWTRWOFl1VmZEaF9TeDlXVG12aVhENnhtU2gvVVAzRUhueFRKYTU4S2diRk1NZm43US5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvdU9SMkhBeXlVdFdvNGxHaEZmMG1scnczTk5QM1ZCb2UvdEoyYlpKVV80eGczbGZUaXB6TmZJeUU0ek83THItOTgvXzlkVVN5N0VZMm82bVpEQXVnQnoyQS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvVVNReDZqLTN2dTktQ0tOMDJ5Z2YyUjFqekdyLUh5Rnova2s3dGpLUnJzT2pYelpkQlJ5YlhzYkxPeDBkcU1yX2UvV29uaHkyWGlpOVpPcmlzRm5PWGVXdy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMWVfYWRhcERnWlNHVjgwUnZoOUJpRjNRb2gxazBIZ0svaUJsMF90azhfOU82cHV3cEtybUtJQ2ZvUkNsaWZYNGgvN1pOV2N4Mk9UcGRucFVTSUtxbF9ZZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvMl8tMGYzVEJxWGQ5Wjc5Z1dwYXpuZWVZcUNDQU5US0wvNERjeUxtTkhpMEE2WjJBVXRhTVg4M2lUY2hzTnJ3RlAvUTVCNnM0RW9uWFdSNGE4N1RHZ3duUS5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvU19uMlZsN1MwcGdVQUs4RWRRbHlnc1pkN3FicThyeGkvNjlBSnJIT0lpMl9kVENobTV2NUlaQnVwVVNQeExLTVcvX1IzdE9FMnV4N2cyak9iaXFxMkRjZy5qcGciLCJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEvSTNCVk1vSHc3TEJyeEU2MElhR3kzU2l6WVZXSm5ySnMvMThfZklIZjAwQUJ5eVRtdnlmTmlCRnZKVTd1b0NDbjMvRjBIbURqdmVZY2VPY09ERHlhaEtJQS5qcGciXSwicGhvdG9zIjp7ImF3YXJkcyI6Imh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS9DY0JrN29yc3VrV29Kem5kemVDVXJITjRlQ2J2X3FPUC8xQ0NnaGs2Wk9jQzM0TkFGUC1tUTdSZHZicVc1MVUtQS80SVB1QXo5S2tleVBYWFpfU2dySndRLmpwZyIsImFwcHJvYWNoIjpbImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS82emRuWUZDR2I5bko4dDZhT0ZfNTh2WTI1b081bkRqeC9OQ01ZdnlBNHhncWwyWXh0amRWZmJkLUp5U2tLTzRNYS9qOTFzQlQ2b19CSFNURl9NdWFEUUhBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95VUVIYUJRQk5xbTV2ZlBkbnlhVE5YUEkzOW9RSzlPTC9ReW83R25jaURoYmRoektfYTVJQ3B5b0dYdDZ4cThyei8xeXQ1Skd5c0piQjhJeDR4VTVTVnRBLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5TMGZYOGJkdzczdS93TVg2SWtLb2I4Q3YxQjllTEllaE9Ta1hISHloU3BjNi9MSVhyNFgtU2hNTHUxellhWDctMk9nLmpwZyIsImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5ad0RYc214R3JJay8yeTNwSzBWdGRFWjFjcjFkdmw4S0dxVWliQ0MzX190Ri82dC1lMEYyakt2NGtuNllGYk9fY3pRLmpwZyJdLCJmaW5hbCI6Imh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS8yXy0wZjNUQnFYZDlaNzlnV3Bhem5YbURBRWdEVHJTOC9kd01FdWNfbk9lZTFBQ2xBbjRJMmkzdGM0ZTJfN1VOcS9SaVo1NzFLejBBLUN2ZDJtUGVKbkpBLmpwZyJ9fQAVZ-CONFIG-END

AVZ-CODE-STARTLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQntCR0J7Qm9Ce0KfQmtCQINCd0JDQkdCe0KDQkCDQmNCd0KHQotCg0KPQnNCV0J3QotCe0JIKCiAgINCt0YLQviDQvdC1INGB0LDQvNC-0YHRgtC-0Y_RgtC10LvRjNC90YvQuSDRhNCw0LnQuyDigJQg0LXQs9C-INGB0L7QsdC40YDQsNC10YIgcGFjay10b29sa2l0LnB5CiAgINCy0LzQtdGB0YLQtSDRgSDQuNC90YHRgtGA0YPQvNC10L3RgtCw0LzQuCDQsiDQvtC00LjQvSDQsdC70L7QuiDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiyBhdnotZGF0YS4KICAg0JzQsNGA0LrQtdGAINCyINC-0LHRitGP0LLQu9C10L3QuNC4IFRPT0xTINC90LjQttC1INC30LDQvNC10L3Rj9C10YLRgdGPINC90LAg0YHQv9C40YHQvtC6INC40L3RgdGC0YDRg9C80LXQvdGC0L7Qsi4KCiAgINCX0LDQv9GD0YHQutCw0LXRgtGB0Y8g0LfQsNC60LvQsNC00LrQvtC5INC40Lcg0L_QsNC90LXQu9C4INCx0YDQsNGD0LfQtdGA0LA6INC30LDQs9GA0YPQt9GH0LjQuiDRh9C40YLQsNC10YIKICAgYXZ6LWRhdGEsINC00L7RgdGC0LDRkdGCINC-0YLRgdGO0LTQsCDQutC-0LQg0Lgg0LLRi9C_0L7Qu9C90Y_QtdGCINC10LPQvi4KCiAgINCc0LXQvdGOIOKAlCDRgdC10YLQutCwINC60LLQsNC00YDQsNGC0L3Ri9GFINC_0LvQuNGC0L7Qui4g0J_RgNC10LbQvdC40Lkg0LLQsNGA0LjQsNC90YIg0LHRi9C7INGB0L_QuNGB0LrQvtC8CiAgINCyINC_0L7Qu9C90YPRjiDRiNC40YDQuNC90YM6INC-0LTQuNC90L3QsNC00YbQsNGC0Ywg0LjQvdGB0YLRgNGD0LzQtdC90YLQvtCyINC30LDQvdC40LzQsNC70Lgg0LLQtdGB0Ywg0Y3QutGA0LDQvSwKICAg0LAg0L3QsCDRgtC10LvQtdGE0L7QvdC1INC_0YDQuNGF0L7QtNC40LvQvtGB0Ywg0L_RgNC-0LrRgNGD0YfQuNCy0LDRgtGMLiDQn9C70LjRgtC60Lgg0L_QvtC80LXRidCw0Y7RgtGB0Y8KICAg0YbQtdC70LjQutC-0LwsINC4INC_0L7QtNGF0L7QtNGP0YnQuNC1INGC0LXQutGD0YnQtdC5INGB0YLRgNCw0L3QuNGG0LUg0YHRgtC-0Y_RgiDQv9C10YDQstGL0LzQuC4KCiAgINCh0YLQuNC70Lgg0LTQtdGA0LbQuNC8INCyINC-0LTQvdC-0LwgPHN0eWxlPiDRgSDQv9GA0LXRhNC40LrRgdC-0LwgYXZ6bS06INC40L3Qu9Cw0LnQvdC-0LwKICAg0L3QtSDRgdC00LXQu9Cw0YLRjCDQvdC4INC90LDQstC10LTQtdC90LjQtSwg0L3QuCDQv9C-0LLQtdC00LXQvdC40LUg0L3QsCDRg9C30LrQvtC8INGN0LrRgNCw0L3QtS4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgdmFyIFRPT0xTID0gWwp7aWQ6ImhvbWUiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0LPQu9Cw0LLQvdC-0Lkg0YHRgtGA0LDQvdC40YbRiyIsc2hvcnQ6ItCT0LvQsNCy0L3QsNGPIixoaW50OiLRgtC10LrRgdGC0YssINC-0LHQu9C-0LbQutCwLCDQu9C10L3RgtCwINC_0L7RgNGC0YTQvtC70LjQviwg0YTQvtGC0L4g0YDQsNC30LTQtdC70L7QsiIscGFnZXM6WyIvIl0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCj0J_QoNCQ0JLQm9CV0J3QmNCvICB2My4wIOKAlCDQv9C-0LQg0LPQu9Cw0LLQvdGD0Y4t0LbRg9GA0L3QsNC7IHYxNy43CiAgIHYzLjA6INGA0LDQt9C00LXQu9CwIMKr0JrQsNC00YDRiyDQsdCw0L3QvdC10YDQsMK7INC90LXRgiDigJQg0YHQv9C70LjRgi3QsdCw0L3QvdC10YDQsCDQvdCwINCz0LvQsNCy0L3QvtC5INCx0L7Qu9GM0YjQtSDQvdC10YIKICAgKNGB0L_QuNGB0L7QuiBiYW5uZXIg0LIg0LrQvtC90YTQuNCz0LUg0L3QtSDRgtGA0L7Qs9Cw0LXQvCkuINCd0L7QstC-0LU6INC60LDQtNGAINC-0LHQu9C-0LbQutC4LCDQu9C10L3RgtCwCiAgIMKr0J_QvtGA0YLRhNC-0LvQuNC-wrsgKNC00L7QsdCw0LLQuNGC0YwsINGD0LHRgNCw0YLRjCwg0L_QvtC80LXQvdGP0YLRjCDQv9C-0YDRj9C00L7QuiksINGE0L7RgtC-INGA0LDQt9C00LXQu9C-0LIKICAgwqvQndCw0LPRgNCw0LTRi8K7LCDCq9Ca0LDQuiDRjyDRgNCw0LHQvtGC0LDRjsK7INC4INGE0LjQvdCw0LvQsCwg0LzQuNC90LjQsNGC0Y7RgNGLINCy0YHQtdGFINGH0LXRgtGL0YDRkdGFINGA0LDQt9C00LXQu9C-0LIKICAg0L_QvtGA0YLRhNC-0LvQuNC-LiDQp9C10LPQviDQvdC10YIg0LIg0LrQvtC90YTQuNCz0LUg4oCUINCx0LXRgNGR0YLRgdGPINGBINC-0YLQutGA0YvRgtC-0Lkg0LPQu9Cw0LLQvdC-0LkuCiAgICh2Mi4xOiDQsdC10LPRg9GJ0LDRjyDRgdGC0YDQvtC60LAg0YPQsdGA0LDQvdCwINGB0L4g0YHRgtGA0LDQvdC40YbRiyDigJQg0YDQsNC30LTQtdC70LAg0LIg0L_QsNC90LXQu9C4INC90LXRgikKICAg0JfQsNC_0YPRgdC60LDRgtGMINCyINC60L7QvdGB0L7Qu9C4INC90LAgaHR0cHM6Ly9hdmFuemF0by5ydQogICDQndC40YfQtdCz0L4g0L3QtSDQv9GD0LHQu9C40LrRg9C10YIuINCi0L7Qu9GM0LrQviDRh9C40YLQsNC10YIg0YHQsNC50YIg0Lgg0YHQvtCx0LjRgNCw0LXRgiDQutC-0L3RhNC40LMuCiAgINCg0LXQt9GD0LvRjNGC0LDRgiDQstGB0YLQsNCy0LvRj9C10YLRgdGPINCy0YDRg9GH0L3Rg9GOINCyINCx0LvQvtC6INC90LAgYXZ6LWRhdGEuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooYXN5bmMgKCkgPT4gewogICd1c2Ugc3RyaWN0JzsKICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enAtcm9vdCcpKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnpwLXJvb3QnKS5yZW1vdmUoKTsgfQoKICBjb25zdCBEQVRBID0gJ2h0dHBzOi8vYXZhbnphdG8ucnUvYXZ6LWRhdGEnOwogIGNvbnN0IE1BWFcgPSAxMjQwOyAvLyDQv9GA0LXQtNC10Lsg0YjQuNGA0LjQvdGLINC60LDQtNGA0L7QsiDQsdCw0L3QvdC10YDQsCwg0YHQvC4g0LjRgdGC0L7RgNC40Y4g0L_RgNC-0LXQutGC0LAKCiAgLyogLS0tLS0tLS0tLSDQt9Cw0LPRgNGD0LfQutCwINGC0LXQutGD0YnQtdCz0L4g0LrQvtC90YTQuNCz0LAgLS0tLS0tLS0tLSAqLwogIGNvbnN0IGRlY29kZSA9IChyYXcpID0-IHsKICAgIGxldCBiID0gcmF3LnJlcGxhY2UoL1vDl-KcleKcll0vZywgJ3gnKS5yZXBsYWNlKC_igJQvZywgJy0tJykucmVwbGFjZSgvW-KAk-KAkuKIkl0vZywgJy0nKQogICAgICAgICAgICAgIC5yZXBsYWNlKC9bXkEtWmEtejAtOVwtX10vZywgJycpLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7CiAgICB3aGlsZSAoYi5sZW5ndGggJSA0KSBiICs9ICc9JzsKICAgIGNvbnN0IGJpbiA9IGF0b2IoYik7CiAgICBjb25zdCB1ID0gbmV3IFVpbnQ4QXJyYXkoYmluLmxlbmd0aCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbi5sZW5ndGg7IGkrKykgdVtpXSA9IGJpbi5jaGFyQ29kZUF0KGkpOwogICAgcmV0dXJuIEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHUpKTsKICB9OwoKICBjb25zdCBkYXRhSHRtbCA9IGF3YWl0IGZldGNoKERBVEEgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KS50aGVuKHIgPT4gci50ZXh0KCkpOwogIGNvbnN0IG0gPSBkYXRhSHRtbC5tYXRjaCgvQVZaLUNPTkZJRy1TVEFSVChbXHNcU10qPylBVlotQ09ORklHLUVORC8pOwogIGlmICghbSkgeyBhbGVydCgn0JrQvtC90YTQuNCzINC90LAgYXZ6LWRhdGEg0L3QtSDQvdCw0LnQtNC10L0uINCf0YDQvtCy0LXRgNGM0YLQtSDQvNCw0YDQutC10YDRiy4nKTsgcmV0dXJuOyB9CgogIGxldCBjZmc7CiAgdHJ5IHsKICAgIGNvbnN0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgYm94LmlubmVySFRNTCA9IG1bMV07CiAgICBjZmcgPSBkZWNvZGUoYm94LnRleHRDb250ZW50KTsKICB9IGNhdGNoIChlKSB7IGFsZXJ0KCfQmtC-0L3RhNC40LMg0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlKTsgcmV0dXJuOyB9CgogIC8qIC0tLS0tLS0tLS0gdjMuMCDCtyDQvdC-0LLRi9C1INC60LvRjtGH0Lgg0LbRg9GA0L3QsNC70LA6INC_0L4g0YPQvNC-0LvRh9Cw0L3QuNGOIOKAlCDRgSDQvtGC0LrRgNGL0YLQvtC5INCz0LvQsNCy0L3QvtC5IC0tLS0tLS0tLS0gKi8KICBjb25zdCBsaXZlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2F2ei5tYWcnKTsKICBjb25zdCBzcmMgPSAoc2VsKSA9PiB7IGNvbnN0IGkgPSBsaXZlICYmIGxpdmUucXVlcnlTZWxlY3RvcihzZWwpOyByZXR1cm4gaSA_IChpLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpIDogJyc7IH07CiAgY29uc3Qgc3JjcyA9IChzZWwpID0-IGxpdmUgPyBbLi4ubGl2ZS5xdWVyeVNlbGVjdG9yQWxsKHNlbCldLm1hcChpID0-IGkuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiBbXTsKICBpZiAoIWNmZy5jb3ZlcikgY2ZnLmNvdmVyID0geyBpbWc6IHNyYygnLmNvdmVyIC5waCBpbWcnKSwKICAgIGFsdDogKGxpdmUgJiYgbGl2ZS5xdWVyeVNlbGVjdG9yKCcuY292ZXIgLnBoIGltZycpIHx8IHt9KS5hbHQgfHwgJycgfTsKICBpZiAoIUFycmF5LmlzQXJyYXkoY2ZnLmdhbGxlcnkpIHx8ICFjZmcuZ2FsbGVyeS5sZW5ndGgpIGNmZy5nYWxsZXJ5ID0gc3JjcygnLnRyYWNrIC5naSBpbWcnKTsKICBpZiAoIWNmZy5waG90b3MpIGNmZy5waG90b3MgPSB7IGF3YXJkczogc3JjKCcucGctaW1nIGltZycpLCBhcHByb2FjaDogc3JjcygnLmNoLWltZyBpbWcnKSwgZmluYWw6IHNyYygnLmZpbmFsIC5waCBpbWcnKSB9OwogIHdoaWxlIChjZmcucGhvdG9zLmFwcHJvYWNoLmxlbmd0aCA8IDQpIGNmZy5waG90b3MuYXBwcm9hY2gucHVzaCgnJyk7CiAgY29uc3QgdGlsZUltZ3MgPSBzcmNzKCcuYmVudG8gLmNlbGwgaW1nJyk7CiAgY2ZnLnRpbGVzLmZvckVhY2goKHQsIGkpID0-IHsgaWYgKHQuaW1nID09PSB1bmRlZmluZWQpIHQuaW1nID0gdGlsZUltZ3NbaV0gfHwgJyc7IH0pOwogIGlmICghbGl2ZSkgY29uc29sZS53YXJuKCdBVlo6INC_0LDQvdC10LvRjCDQvtGC0LrRgNGL0YLQsCDQvdC1INC90LAg0LPQu9Cw0LLQvdC-0Lkt0LbRg9GA0L3QsNC70LUg4oCUINC90L7QstGL0LUg0L_QvtC70Y8g0L_Rg9GB0YLRi9C1LCDQtdGB0LvQuCDQuNGFINC90LXRgiDQsiDQutC-0L3RhNC40LPQtS4nKTsKCiAgLyogLS0tLS0tLS0tLSDRgdGB0YvQu9C60Lgg0LjQtyDQs9Cw0LvQtdGA0LXQuSBhdnotZGF0YSAtLS0tLS0tLS0tICovCiAgY29uc3QgZGF0YURvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZGF0YUh0bWwsICd0ZXh0L2h0bWwnKTsKICBjb25zdCBwaWNrID0gKGltZykgPT4gewogICAgY29uc3QgcyA9IGltZy5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpIHx8IGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgJyc7CiAgICBpZiAoIXMpIHJldHVybiBpbWcuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJzsKICAgIGNvbnN0IGxpc3QgPSBzLnNwbGl0KCcsJykubWFwKHggPT4gewogICAgICBjb25zdCBwID0geC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICByZXR1cm4geyB1OiBwWzBdLCB3OiBwYXJzZUludChwWzFdKSB8fCAwIH07CiAgICB9KS5zb3J0KChhLCBiKSA9PiBiLncgLSBhLncpOwogICAgY29uc3QgYiA9IGxpc3QuZmlsdGVyKHAgPT4gcC53IDw9IE1BWFcpWzBdIHx8IGxpc3RbbGlzdC5sZW5ndGggLSAxXTsKICAgIHJldHVybiBiLnUuaW5kZXhPZignLy8nKSA9PT0gMCA_ICdodHRwczonICsgYi51IDogYi51OwogIH07CiAgY29uc3QgdGh1bWIgPSAoaW1nKSA9PiB7CiAgICBjb25zdCBzID0gaW1nLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JykgfHwgaW1nLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCAnJzsKICAgIGlmICghcykgcmV0dXJuIHBpY2soaW1nKTsKICAgIGNvbnN0IGxpc3QgPSBzLnNwbGl0KCcsJykubWFwKHggPT4gewogICAgICBjb25zdCBwID0geC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICByZXR1cm4geyB1OiBwWzBdLCB3OiBwYXJzZUludChwWzFdKSB8fCAwIH07CiAgICB9KS5zb3J0KChhLCBiKSA9PiBhLncgLSBiLncpOwogICAgY29uc3QgYiA9IGxpc3QuZmlsdGVyKHAgPT4gcC53ID49IDI4MClbMF0gfHwgbGlzdFswXTsKICAgIHJldHVybiBiLnUuaW5kZXhPZignLy8nKSA9PT0gMCA_ICdodHRwczonICsgYi51IDogYi51OwogIH07CgogIGNvbnN0IGdhbGxlcnlJbWdzID0gWy4uLmRhdGFEb2MucXVlcnlTZWxlY3RvckFsbCgnaW1nJyldLmZpbHRlcihpID0-CiAgICAoaS5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpIHx8IGkuZ2V0QXR0cmlidXRlKCdkYXRhLXNyY3NldCcpIHx8ICcnKS5pbmRleE9mKCdpLndmb2xpby5ydScpID49IDApOwogIGNvbnN0IGdhbGxlcnkgPSBnYWxsZXJ5SW1ncy5tYXAoaSA9PiAoeyBmdWxsOiBwaWNrKGkpLCBzbWFsbDogdGh1bWIoaSkgfSkpOwoKICAvKiAtLS0tLS0tLS0tINCy0ZHRgNGB0YLQutCwIC0tLS0tLS0tLS0gKi8KICBjb25zdCBjc3MgPSBgCiAgLyog0KHRgtC40LvQuCDRgdCw0LnRgtCwINC_0LXRgNC10LHQuNCy0LDRjtGCINC_0LDQvdC10LvRjCDigJQg0LfQsNC00LDRkdC8INCy0YHRkSDRj9Cy0L3QviDQuCDRgSDQv9GA0LjQvtGA0LjRgtC10YLQvtC8LiAqLwogICNhdnpwLXJvb3QsICNhdnpwLXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OwogICAgbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0KICAjYXZ6cC1yb290IGlucHV0LCNhdnpwLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OwogICAgb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0KICAjYXZ6cC1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9CiAgI2F2enAtcm9vdCAuYXZ6cC1iLnB7YmFja2dyb3VuZDojMWQxZDFmICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiNmZmYgIWltcG9ydGFudH0KICAjYXZ6cC1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOwogICAgZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2NvbG9yOiMxZDFkMWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fQogICNhdnpwLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOwogICAgYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufQogICNhdnpwLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfQogICNhdnpwLWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0KICAjYXZ6cC1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0KICAjYXZ6cC1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0KICAuYXZ6cC1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9CiAgLmF2enAtYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0KICAuYXZ6cC1iLnB7YmFja2dyb3VuZDojMWQxZDFmO2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9CiAgLmF2enAtYi5wOmhvdmVye2JhY2tncm91bmQ6IzMzM30KICAuYXZ6cC1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufQogIC5hdnpwLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfQogIC5hdnpwLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0KICAuYXZ6cC1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IuKWuCAiO2NvbG9yOiM4Njg2OGJ9CiAgLmF2enAtc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiLilr4gIn0KICAuYXZ6cC1pbntwYWRkaW5nOjE0cHh9CiAgLmF2enAtZnttYXJnaW4tYm90dG9tOjEycHh9CiAgLmF2enAtZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0KICAuYXZ6cC1mIGlucHV0LC5hdnpwLWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfQogIC5hdnpwLWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0KICAuYXZ6cC1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fQogIC8qINC90LAg0YLQtdC70LXRhNC-0L3QtSDQv9Cw0YDQvdGL0LUg0L_QvtC70Y8g0LLRgdGC0LDRjtGCINC00YDRg9CzINC_0L7QtCDQtNGA0YPQs9CwIOKAlCDQuNC90LDRh9C1INC_0L4gMTgwcHgg0L3QsCDQv9C-0LvQtSAqLwogIEBtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsKICAgIC5hdnpwLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfQogICAgI2F2enAtd2lue2JvcmRlci1yYWRpdXM6MH0KICB9CiAgLmF2enAtY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9CiAgLmF2enAtY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fQogIC5hdnpwLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0KICAuYXZ6cC1pbWcgaW1ne3dpZHRoOjc4cHg7aGVpZ2h0Ojk4cHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiNlY2VjZWM7ZmxleDpub25lfQogIC5hdnpwLWltZyBpbWcuYmFke291dGxpbmU6MnB4IHNvbGlkICNjMDM5MmJ9CiAgLmF2enAtaW1nIC5ne2ZsZXg6MX0KICAuYXZ6cC1ub3Rle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGI7bWFyZ2luOjZweCAwIDB9CiAgLmF2enAtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDg0cHgsMWZyKSk7Z2FwOjhweDttYXgtaGVpZ2h0OjMyMHB4O292ZXJmbG93OmF1dG87CiAgICBib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMHB4fQogIC5hdnpwLWdyaWQgZmlndXJle21hcmdpbjowO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlfQogIC5hdnpwLWdyaWQgaW1ne3dpZHRoOjEwMCU7YXNwZWN0LXJhdGlvOjMvNDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NXB4O2Rpc3BsYXk6YmxvY2t9CiAgLmF2enAtZ3JpZCBmaWd1cmUuc2VsOjphZnRlcntjb250ZW50OiLinJMiO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgYmFja2dyb3VuZDpyZ2JhKDI5LDI5LDMxLC41NSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MjJweDtib3JkZXItcmFkaXVzOjVweH0KICAjYXZ6cC1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9CiAgI2F2enAtbXNne2NvbG9yOiMxZDdhM2U7Zm9udC1zaXplOjEzcHh9CiAgYDsKCiAgY29uc3QgZXNjID0gKHMpID0-IFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwoKICBjb25zdCBmaWVsZCA9IChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSA9PiB7CiAgICBjb25zdCB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyBgPHRleHRhcmVhIGRhdGEtcD0iJHtwYXRofSI-JHtlc2ModmFsKX08L3RleHRhcmVhPmAKICAgICAgOiBgPGlucHV0IGRhdGEtcD0iJHtwYXRofSIgdmFsdWU9IiR7ZXNjKHZhbCl9Ij5gOwogICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJhdnpwLWYiPjxsYWJlbD4ke2xhYmVsfTwvbGFiZWw-JHt0YWd9PC9kaXY-YDsKICB9OwoKICBjb25zdCBpbWdGaWVsZCA9IChsYWJlbCwgcGF0aCwgdmFsKSA9PiBgCiAgICA8ZGl2IGNsYXNzPSJhdnpwLWYiPjxsYWJlbD4ke2xhYmVsfTwvbGFiZWw-CiAgICAgIDxkaXYgY2xhc3M9ImF2enAtaW1nIj4KICAgICAgICA8aW1nIHNyYz0iJHtlc2ModmFsKX0iIGRhdGEtcHJldj0iJHtwYXRofSIgb25lcnJvcj0idGhpcy5jbGFzc0xpc3QuYWRkKCdiYWQnKSI-CiAgICAgICAgPGRpdiBjbGFzcz0iZyI-CiAgICAgICAgICA8aW5wdXQgZGF0YS1wPSIke3BhdGh9IiB2YWx1ZT0iJHtlc2ModmFsKX0iPgogICAgICAgICAgPHAgY2xhc3M9ImF2enAtbm90ZSI-PGJ1dHRvbiBjbGFzcz0iYXZ6cC1iIiBkYXRhLWNob29zZT0iJHtwYXRofSIgc3R5bGU9InBhZGRpbmc6NXB4IDEwcHg7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDo2cHgiPtCS0YvQsdGA0LDRgtGMINC40Lcg0LPQsNC70LXRgNC10Lg8L2J1dHRvbj48L3A-CiAgICAgICAgPC9kaXY-CiAgICAgIDwvZGl2PgogICAgPC9kaXY-YDsKCiAgbGV0IGh0bWwgPSBgPHN0eWxlPiR7Y3NzfTwvc3R5bGU-PGRpdiBpZD0iYXZ6cC13aW4iPgogICAgPGRpdiBpZD0iYXZ6cC1oZWFkIj4KICAgICAgPGgyPtCf0LDQvdC10LvRjCBBdmFuemF0bzwvaDI-CiAgICAgIDxidXR0b24gY2xhc3M9ImF2enAtYiIgaWQ9ImF2enAtY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImF2enAtYm9keSI-YDsKCiAgLyog0J7QkdCb0J7QltCa0JAgKi8KICBodG1sICs9IGA8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiIG9wZW4-PHN1bW1hcnk-0J7QsdC70L7QttC60LA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-CiAgICAke2ltZ0ZpZWxkKCfQmtCw0LTRgCDQvtCx0LvQvtC20LrQuCAo0LPQvtGA0LjQt9C-0L3RgtCw0LvRjNC90YvQuSwg0L7RgiAyNTYwIHB4KScsICdjb3Zlci5pbWcnLCBjZmcuY292ZXIuaW1nKX0KICAgICR7ZmllbGQoJ0FsdC3RgtC10LrRgdGCINC60LDQtNGA0LAnLCAnY292ZXIuYWx0JywgY2ZnLmNvdmVyLmFsdCl9CiAgICAke2ZpZWxkKCfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnaGVyby5leWVicm93JywgY2ZnLmhlcm8uZXllYnJvdyl9CiAgICA8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JHtmaWVsZCgn0JjQvNGPLCDRgdGC0YDQvtC60LAgMScsICdoZXJvLm5hbWUxJywgY2ZnLmhlcm8ubmFtZTEpfSR7ZmllbGQoJ9CY0LzRjywg0YHRgtGA0L7QutCwIDInLCAnaGVyby5uYW1lMicsIGNmZy5oZXJvLm5hbWUyKX08L2Rpdj4KICAgICR7ZmllbGQoJ9Cf0L7QtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmxlZGUnLCBjZmcuaGVyby5sZWRlLCAnYXJlYScpfQogIDwvZGl2PjwvZGV0YWlscz5gOwoKICAvKiDQm9CV0J3QotCQINCf0J7QoNCi0KTQntCb0JjQniAqLwogIGh0bWwgKz0gYDxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0JvQtdC90YLQsCDCq9Cf0L7RgNGC0YTQvtC70LjQvsK7IOKAlCDQutCw0LTRgNGLLCDQutC-0YLQvtGA0YvQtSDQtdC00YPRgiDQstCx0L7Qujwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4KICAgIDxwIGNsYXNzPSJhdnpwLW5vdGUiPtCf0L7RgNGP0LTQvtC6INC60LDQuiDQvdCwINGB0LDQudGC0LUuINCd0L7QvNC10YDQsCDQv9C-0LQg0LrQsNC00YDQsNC80Lgg0YHQsNC50YIg0L_RgNC-0YHRgtCw0LLQuNGCINGB0LDQvC48L3A-CiAgICA8ZGl2IGlkPSJhdnpwLWdhbCI-PC9kaXY-CiAgICA8YnV0dG9uIGNsYXNzPSJhdnpwLWIiIGlkPSJhdnpwLWdhZGQiPisg0JTQvtCx0LDQstC40YLRjCDQutCw0LTRgDwvYnV0dG9uPgogIDwvZGl2PjwvZGV0YWlscz5gOwoKICAvKiDQpNCe0KLQniDQoNCQ0JfQlNCV0JvQntCSICovCiAgaHRtbCArPSBgPGRldGFpbHMgY2xhc3M9ImF2enAtc2VjIj48c3VtbWFyeT7QpNC-0YLQviDRgNCw0LfQtNC10LvQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPgogICAgJHtpbWdGaWVsZCgnwqvQndCw0LPRgNCw0LTRi8K7IOKAlCDQutCw0LTRgCDRgdC70LXQstCwJywgJ3Bob3Rvcy5hd2FyZHMnLCBjZmcucGhvdG9zLmF3YXJkcyl9CiAgICAke2NmZy5waG90b3MuYXBwcm9hY2gubWFwKCh1LCBpKSA9PiBpbWdGaWVsZChgwqvQmtCw0Log0Y8g0YDQsNCx0L7RgtCw0Y7CuyDigJQg0L_Rg9C90LrRgiAke2kgKyAxfWAsIGBwaG90b3MuYXBwcm9hY2guJHtpfWAsIHUpKS5qb2luKCcnKX0KICAgICR7aW1nRmllbGQoJ9Ck0LjQvdCw0LsgwqvQlNCw0LLQsNC50YLQtSDQvdCw0LrQvtC90LXRhuKApsK7IOKAlCDRhNC-0L0nLCAncGhvdG9zLmZpbmFsJywgY2ZnLnBob3Rvcy5maW5hbCl9CiAgPC9kaXY-PC9kZXRhaWxzPmA7CgogIC8qINCf0JvQmNCi0JrQmCAqLwogIGh0bWwgKz0gYDxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0KDQsNC30LTQtdC70Ysg0L_QvtGA0YLRhNC-0LvQuNC-IOKAlCDQvNC40L3QuNCw0YLRjtGA0Ysg0YMg0LfQsNCz0L7Qu9C-0LLQutCwICgke2NmZy50aWxlcy5sZW5ndGh9KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj5gOwogIGNmZy50aWxlcy5mb3JFYWNoKCh0LCBpKSA9PiB7CiAgICBodG1sICs9IGA8ZGl2IGNsYXNzPSJhdnpwLWNhcmQiPjxoND7Qn9C70LjRgtC60LAgJHtpICsgMX08L2g0PgogICAgICA8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JHtmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgYHRpbGVzLiR7aX0udGl0bGVgLCB0LnRpdGxlKX0ke2ZpZWxkKCfQn9C-0LTQv9C40YHRjCcsIGB0aWxlcy4ke2l9LmNhcHRpb25gLCB0LmNhcHRpb24pfTwvZGl2PgogICAgICAke2ZpZWxkKCfQodGB0YvQu9C60LAnLCBgdGlsZXMuJHtpfS5ocmVmYCwgdC5ocmVmKX0KICAgICAgJHtpbWdGaWVsZCgn0JzQuNC90LjQsNGC0Y7RgNCwJywgYHRpbGVzLiR7aX0uaW1nYCwgdC5pbWcpICsgZmllbGQoJ0FsdC3RgtC10LrRgdGCJywgYHRpbGVzLiR7aX0uYWx0YCwgdC5hbHQgfHwgJycpfQogICAgPC9kaXY-YDsKICB9KTsKICBodG1sICs9IGA8L2Rpdj48L2RldGFpbHM-YDsKCiAgLyog0J7QkdCeINCc0J3QlSAqLwogIGh0bWwgKz0gYDxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0J7QsdC-INC80L3QtTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4KICAgICR7aW1nRmllbGQoJ9Ck0L7RgtC-0LPRgNCw0YTQuNGPJywgJ2Fib3V0LmltZycsIGNmZy5hYm91dC5pbWcpfQogICAgJHtmaWVsZCgnQWx0LdGC0LXQutGB0YInLCAnYWJvdXQuYWx0JywgY2ZnLmFib3V0LmFsdCl9CiAgICA8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JHtmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnYWJvdXQubGFiZWwnLCBjZmcuYWJvdXQubGFiZWwpfSR7ZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdhYm91dC50aXRsZScsIGNmZy5hYm91dC50aXRsZSl9PC9kaXY-CiAgICAke2ZpZWxkKCfQkNCx0LfQsNGGIDEnLCAnYWJvdXQucDEnLCBjZmcuYWJvdXQucDEsICdhcmVhJyl9CiAgICAke2ZpZWxkKCfQkNCx0LfQsNGGIDInLCAnYWJvdXQucDInLCBjZmcuYWJvdXQucDIsICdhcmVhJyl9YDsKICBodG1sICs9IGA8cCBjbGFzcz0iYXZ6cC1ub3RlIj7QptC40YTRgNGLINC_0L7QutCw0LfRi9Cy0LDRjtGC0YHRjyDQvdCwINC-0LHQu9C-0LbQutC1INC4INCyIMKr0J3QsNCz0YDQsNC00LDRhcK7LjwvcD5gOwogIGNmZy5hYm91dC5zdGF0cy5mb3JFYWNoKChzLCBpKSA9PiB7CiAgICBodG1sICs9IGA8ZGl2IGNsYXNzPSJhdnpwLWNhcmQiPjxoND7QptC40YTRgNCwICR7aSArIDF9PC9oND48ZGl2IGNsYXNzPSJhdnpwLXJvdyI-CiAgICAgICR7ZmllbGQoJ9CX0L3QsNGH0LXQvdC40LUnLCBgYWJvdXQuc3RhdHMuJHtpfS50YXJnZXRgLCBzLnRhcmdldCl9CiAgICAgICR7ZmllbGQoJ9Ch0YPRhNGE0LjQutGBJywgYGFib3V0LnN0YXRzLiR7aX0uc3VmZml4YCwgcy5zdWZmaXgpfTwvZGl2PgogICAgICAke2ZpZWxkKCfQn9C-0LTQv9C40YHRjCcsIGBhYm91dC5zdGF0cy4ke2l9LmxhYmVsYCwgcy5sYWJlbCl9PC9kaXY-YDsKICB9KTsKICBodG1sICs9IGA8L2Rpdj48L2RldGFpbHM-YDsKCiAgLyog0J3QkNCT0KDQkNCU0KsgKi8KICBodG1sICs9IGA8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCd0LDQs9GA0LDQtNGLICgke2NmZy5hd2FyZHMubGVuZ3RofSk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-YDsKICBjZmcuYXdhcmRzLmZvckVhY2goKGEsIGkpID0-IHsKICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCd0LDQs9GA0LDQtNCwICR7aSArIDF9PC9oND4KICAgICAgPGRpdiBjbGFzcz0iYXZ6cC1yb3ciPiR7ZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCBgYXdhcmRzLiR7aX0ubWFya2AsIGEubWFyayl9JHtmaWVsZCgn0J_QvtGP0YHQvdC10L3QuNC1JywgYGF3YXJkcy4ke2l9LnN1YmAsIGEuc3ViKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYXZ6cC1yb3ciPiR7ZmllbGQoJ9Ci0LjQvycsIGBhd2FyZHMuJHtpfS5tZXRhYCwgYS5tZXRhKX0ke2ZpZWxkKCfQodGB0YvQu9C60LAgKNC_0YPRgdGC0L4g4oCUINCx0LXQtyDRgdGB0YvQu9C60LgpJywgYGF3YXJkcy4ke2l9LmhyZWZgLCBhLmhyZWYgfHwgJycpfTwvZGl2PjwvZGl2PmA7CiAgfSk7CiAgaHRtbCArPSBgPC9kaXY-PC9kZXRhaWxzPmA7CgogIC8qINCf0KDQldCY0JzQo9Cp0JXQodCi0JLQkCAqLwogIGh0bWwgKz0gYDxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0JrQsNC6INGPINGA0LDQsdC-0YLQsNGOIOKAlCDRgtC10LrRgdGC0YsgKCR7Y2ZnLmFkdmFudGFnZXMubGVuZ3RofSk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-YDsKICBjZmcuYWR2YW50YWdlcy5mb3JFYWNoKChhLCBpKSA9PiB7CiAgICBodG1sICs9IGA8ZGl2IGNsYXNzPSJhdnpwLWNhcmQiPjxoND7Qn9GD0L3QutGCICR7aSArIDF9PC9oND4KICAgICAgJHtmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgYGFkdmFudGFnZXMuJHtpfS50aXRsZWAsIGEudGl0bGUpfQogICAgICAke2ZpZWxkKCfQotC10LrRgdGCJywgYGFkdmFudGFnZXMuJHtpfS50ZXh0YCwgYS50ZXh0LCAnYXJlYScpfTwvZGl2PmA7CiAgfSk7CiAgaHRtbCArPSBgPC9kaXY-PC9kZXRhaWxzPmA7CgogIC8qIENUQSArINCk0KPQotCV0KAgKi8KICBodG1sICs9IGA8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCf0YDQuNC30YvQsiDQuCDRhNGD0YLQtdGAPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPgogICAgJHtmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ2N0YS50aXRsZScsIGNmZy5jdGEudGl0bGUpfWA7CiAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goKGIsIGkpID0-IHsKICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCa0L3QvtC_0LrQsCAke2kgKyAxfTwvaDQ-PGRpdiBjbGFzcz0iYXZ6cC1yb3ciPgogICAgICAke2ZpZWxkKCfQotC10LrRgdGCJywgYGN0YS5idXR0b25zLiR7aX0udGV4dGAsIGIudGV4dCl9JHtmaWVsZCgn0JDQtNGA0LXRgScsIGBjdGEuYnV0dG9ucy4ke2l9LmhyZWZgLCBiLmhyZWYpfTwvZGl2PjwvZGl2PmA7CiAgfSk7CiAgaHRtbCArPSBmaWVsZCgn0JrQvtC_0LjRgNCw0LnRgicsICdmb290ZXIuY29weScsIGNmZy5mb290ZXIuY29weSk7CiAgY2ZnLmZvb3Rlci5zb2NpYWxzLmZvckVhY2goKHMsIGkpID0-IHsKICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCh0L7RhtGB0LXRgtGMICR7aSArIDF9PC9oND48ZGl2IGNsYXNzPSJhdnpwLXJvdyI-CiAgICAgICR7ZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCBgZm9vdGVyLnNvY2lhbHMuJHtpfS5sYWJlbGAsIHMubGFiZWwpfSR7ZmllbGQoJ9CQ0LTRgNC10YEnLCBgZm9vdGVyLnNvY2lhbHMuJHtpfS5ocmVmYCwgcy5ocmVmKX08L2Rpdj48L2Rpdj5gOwogIH0pOwogIGh0bWwgKz0gYDwvZGl2PjwvZGV0YWlscz5gOwoKICBodG1sICs9IGA8L2Rpdj4KICAgIDxkaXYgaWQ9ImF2enAtZm9vdCI-CiAgICAgIDxidXR0b24gY2xhc3M9ImF2enAtYiBwIiBpZD0iYXZ6cC1idWlsZCI-0KHQvtCx0YDQsNGC0Ywg0Lgg0YHQutC-0L_QuNGA0L7QstCw0YLRjDwvYnV0dG9uPgogICAgICA8c3BhbiBpZD0iYXZ6cC1tc2ciPjwvc3Bhbj4KICAgIDwvZGl2PgogICAgPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnpwLW91dCIgc3BlbGxjaGVjaz0iZmFsc2UiIHBsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC90YTQuNCzIj48L3RleHRhcmVhPjwvZGl2PgogIDwvZGl2PmA7CgogIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2enAtcm9vdCc7CiAgcm9vdC5pbm5lckhUTUwgPSBodG1sOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKCiAgLyogLS0tLS0tLS0tLSB2My4wIMK3INC70LXQvdGC0LAg0L_QvtGA0YLRhNC-0LvQuNC-IC0tLS0tLS0tLS0gKi8KICBjb25zdCBnYWxCb3ggPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLWdhbCcpOwogIGNvbnN0IHN5bmNHYWwgPSAoKSA9PiB7CiAgICBnYWxCb3gucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbZGF0YS1wXj0iZ2FsbGVyeS4iXScpLmZvckVhY2goKGVsKSA9PiB7CiAgICAgIGNmZy5nYWxsZXJ5WytlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpLnNwbGl0KCcuJylbMV1dID0gZWwudmFsdWUudHJpbSgpOwogICAgfSk7CiAgfTsKICBjb25zdCBkcmF3R2FsID0gKCkgPT4gewogICAgZ2FsQm94LmlubmVySFRNTCA9IGNmZy5nYWxsZXJ5Lm1hcCgodSwgaSkgPT4gYDxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCa0LDQtNGAICR7aSArIDF9CiAgICAgICAgPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0Ij4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImF2enAtYiIgZGF0YS1nbW92ZT0iJHtpfTotMSIgc3R5bGU9InBhZGRpbmc6M3B4IDlweCIgJHtpID8gJycgOiAnZGlzYWJsZWQnfT7ihpE8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImF2enAtYiIgZGF0YS1nbW92ZT0iJHtpfToxIiBzdHlsZT0icGFkZGluZzozcHggOXB4IiAke2kgPCBjZmcuZ2FsbGVyeS5sZW5ndGggLSAxID8gJycgOiAnZGlzYWJsZWQnfT7ihpM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImF2enAtYiIgZGF0YS1nZGVsPSIke2l9IiBzdHlsZT0icGFkZGluZzozcHggOXB4Ij7Qo9Cx0YDQsNGC0Yw8L2J1dHRvbj4KICAgICAgICA8L3NwYW4-PC9oND4ke2ltZ0ZpZWxkKCfQkNC00YDQtdGBINC60LDQtNGA0LAnLCBgZ2FsbGVyeS4ke2l9YCwgdSl9PC9kaXY-YCkuam9pbignJyk7CiAgfTsKICBkcmF3R2FsKCk7CiAgZ2FsQm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0-IHsKICAgIGNvbnN0IG12ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWdtb3ZlJyksIGRlbCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1nZGVsJyk7CiAgICBpZiAobXYgPT09IG51bGwgJiYgZGVsID09PSBudWxsKSByZXR1cm47CiAgICBlLnByZXZlbnREZWZhdWx0KCk7IHN5bmNHYWwoKTsKICAgIGlmIChkZWwgIT09IG51bGwpIGNmZy5nYWxsZXJ5LnNwbGljZSgrZGVsLCAxKTsKICAgIGVsc2UgeyBjb25zdCBbaSwgZF0gPSBtdi5zcGxpdCgnOicpLm1hcChOdW1iZXIpOyBjb25zdCB0ID0gY2ZnLmdhbGxlcnlbaV07IGNmZy5nYWxsZXJ5W2ldID0gY2ZnLmdhbGxlcnlbaSArIGRdOyBjZmcuZ2FsbGVyeVtpICsgZF0gPSB0OyB9CiAgICBkcmF3R2FsKCk7CiAgfSk7CiAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cC1nYWRkJykub25jbGljayA9IChlKSA9PiB7IGUucHJldmVudERlZmF1bHQoKTsgc3luY0dhbCgpOyBjZmcuZ2FsbGVyeS5wdXNoKCcnKTsgZHJhd0dhbCgpOyB9OwoKICAvKiAtLS0tLS0tLS0tINC_0YDQtdCy0YzRjiDQutCw0YDRgtC40L3QvtC6IC0tLS0tLS0tLS0gKi8KICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKGUpID0-IHsKICAgIGNvbnN0IHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgaWYgKCFwKSByZXR1cm47CiAgICBjb25zdCBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKGBpbWdbZGF0YS1wcmV2PSIke3B9Il1gKTsKICAgIGlmIChwcmV2KSB7IHByZXYuY2xhc3NMaXN0LnJlbW92ZSgnYmFkJyk7IHByZXYuc3JjID0gZS50YXJnZXQudmFsdWU7IH0KICB9KTsKCiAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINC60LDRgNGC0LjQvdC60Lgg0LjQtyDQs9Cw0LvQtdGA0LXQuCAtLS0tLS0tLS0tICovCiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICBjb25zdCBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNob29zZScpOwogICAgaWYgKCFwKSByZXR1cm47CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCBwYW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBwYW5lLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6OCU7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OjIxNDc0ODM2NDc7cGFkZGluZzoxNnB4O292ZXJmbG93OmF1dG87Ym94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC40KSc7CiAgICBwYW5lLmlubmVySFRNTCA9ICc8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4Ij7QktGL0LHQtdGA0LjRgtC1INGB0L3QuNC80L7QujwvcD48ZGl2IGNsYXNzPSJhdnpwLWdyaWQiPjwvZGl2Pic7CiAgICBjb25zdCBnID0gcGFuZS5xdWVyeVNlbGVjdG9yKCcuYXZ6cC1ncmlkJyk7CiAgICBnLnN0eWxlLm1heEhlaWdodCA9ICdub25lJzsKICAgIGdhbGxlcnkuZm9yRWFjaCgoaXQpID0-IHsKICAgICAgY29uc3QgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZ3VyZScpOwogICAgICBmLmlubmVySFRNTCA9IGA8aW1nIHNyYz0iJHtpdC5zbWFsbH0iIGxvYWRpbmc9ImxhenkiPmA7CiAgICAgIGYub25jbGljayA9ICgpID0-IHsKICAgICAgICBjb25zdCBpbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W2RhdGEtcD0iJHtwfSJdYCk7CiAgICAgICAgaW5wLnZhbHVlID0gaXQuZnVsbDsKICAgICAgICBjb25zdCBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKGBpbWdbZGF0YS1wcmV2PSIke3B9Il1gKTsKICAgICAgICBpZiAocHJldikgeyBwcmV2LmNsYXNzTGlzdC5yZW1vdmUoJ2JhZCcpOyBwcmV2LnNyYyA9IGl0LmZ1bGw7IH0KICAgICAgICBwYW5lLnJlbW92ZSgpOwogICAgICB9OwogICAgICBnLmFwcGVuZENoaWxkKGYpOwogICAgfSk7CiAgICBjb25zdCBjbG9zZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgY2xvc2UuY2xhc3NOYW1lID0gJ2F2enAtYic7CiAgICBjbG9zZS50ZXh0Q29udGVudCA9ICfQntGC0LzQtdC90LAnOwogICAgY2xvc2Uub25jbGljayA9ICgpID0-IHBhbmUucmVtb3ZlKCk7CiAgICBwYW5lLmFwcGVuZENoaWxkKGNsb3NlKTsKICAgIHJvb3QuYXBwZW5kQ2hpbGQocGFuZSk7CiAgfSk7CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KICBjb25zdCBzZXRQYXRoID0gKG9iaiwgcGF0aCwgdmFsKSA9PiB7CiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTsKICAgIGxldCBvID0gb2JqOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BhcnRzW2ldXTsKICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogIH07CgogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtY2xvc2UnKS5vbmNsaWNrID0gKCkgPT4gcm9vdC5yZW1vdmUoKTsKCiAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cC1idWlsZCcpLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7CiAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXBdJykuZm9yRWFjaCgoZWwpID0-IHsKICAgICAgY29uc3QgcCA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGxldCB2ID0gZWwudmFsdWU7CiAgICAgIGlmICgvXmF3YXJkc1wuXGQrXC5ocmVmJC8udGVzdChwKSAmJiB2LnRyaW0oKSA9PT0gJycpIHYgPSBudWxsOwogICAgICBzZXRQYXRoKGNmZywgcCwgdik7CiAgICB9KTsKICAgIGNmZy5nYWxsZXJ5ID0gY2ZnLmdhbGxlcnkuZmlsdGVyKEJvb2xlYW4pOyAgIC8vINC_0YPRgdGC0YvQtSDQutCw0YDRgtC-0YfQutC4INC70LXQvdGC0Ysg0L3QtSDRg9GF0L7QtNGP0YIg0LIg0LrQvtC90YTQuNCzCiAgICBpZiAoIWNmZy5nYWxsZXJ5Lmxlbmd0aCkgZGVsZXRlIGNmZy5nYWxsZXJ5OyAgLy8g0LvQtdC90YLRgyDQvtGB0YLQsNCy0LjRgtGMINC60LDQuiDQsiDRgNCw0LfQvNC10YLQutC1INGB0YLRgNCw0L3QuNGG0YsKICAgIGRlbGV0ZSBjZmcudGlja2VyOyAvLyDQsdC10LPRg9GJ0LXQuSDRgdGC0YDQvtC60Lgg0L3QsCDRgdGC0YDQsNC90LjRhtC1INCx0L7Qu9GM0YjQtSDQvdC10YIKCiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDRg9C10YXQsNGC0YwKICAgICAgINCyINC60L7QvdGE0LjQsyDQtNCw0LbQtSDQuNC3INC30L3QsNGH0LXQvdC40LksINC_0L7Qv9Cw0LLRiNC40YUg0LIg0L3QtdCz0L4g0LzQuNC80L4g0L_QvtC70LXQuSDQv9Cw0L3QtdC70LguICovCiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoY2ZnKS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoanNvbik7CiAgICBsZXQgYmluID0gJyc7CiAgICBieXRlcy5mb3JFYWNoKGIgPT4geyBiaW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShiKTsgfSk7CiAgICBjb25zdCBiNjQgPSBidG9hKGJpbikucmVwbGFjZSgvXCsvZywgJy0nKS5yZXBsYWNlKC9cLy9nLCAnXycpLnJlcGxhY2UoLz0rJC8sICcnKTsKICAgIGNvbnN0IG91dCA9ICdBVlotQ09ORklHLVNUQVJUJyArIGI2NCArICdBVlotQ09ORklHLUVORCc7CgogICAgY29uc3QgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLW91dCcpOwogICAgdGEudmFsdWUgPSBvdXQ7CiAgICB0YS5zZWxlY3QoKTsKICAgIGxldCBvayA9IGZhbHNlOwogICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgaWYgKCFvaykgeyB0cnkgeyBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChvdXQpOyBvayA9IHRydWU7IH0gY2F0Y2ggKGUpIHt9IH0KICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtbXNnJykudGV4dENvbnRlbnQgPSBvawogICAgICA_ICfQodC60L7Qv9C40YDQvtCy0LDQvdC-LiDQktGB0YLQsNCy0YzRgtC1INC90LAgYXZ6LWRhdGEg0LLQvNC10YHRgtC-INGB0YLQsNGA0L7Qs9C-INC60L7QvdGE0LjQs9CwINC4INGB0L7RhdGA0LDQvdC40YLQtS4nCiAgICAgIDogJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLic7CiAgfTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6InBvcnRyYWl0Iix0aXRsZToi0J_QsNC90LXQu9GMINC_0L7RgNGC0YDQtdGC0L3Ri9GFINGE0L7RgtC-0YHQtdGB0YHQuNC5IixzaG9ydDoi0J_QvtGA0YLRgNC10YLRiyIsaGludDoi0YLQtdC60YHRgtGLLCDQstC-0L_RgNC-0YHRiywg0L_QtdGA0LXRgdCx0L7RgNC60LAg0YHQtdGC0LrQuCwg0YfQuNGB0LvQviDRgdGK0ZHQvNC-0LoiLHBhZ2VzOlsiL3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQodCi0KDQkNCd0JjQptCrINCf0J7QoNCi0KDQldCi0J7QkiAgdjIg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsCAo0YHRgtGA0LDQvdC40YbQsCB2Miwg0LbRg9GA0L3QsNC7KQogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0cmFpdC1waG90b3Nlc3Npb24KCiAgINCX0LDQvNC10L3Rj9C10YIg0YHQvtCx0L7QuSDQv9GA0LXQttC90LjQuSDCq9Ch0LHQvtGA0YnQuNC6INGB0YLQsNGC0LjRh9C10YHQutC-0Lkg0YHQtdGC0LrQuMK7OiDQtNC10LvQsNC10YIKICAg0LLRgdGRINGC0L4g0LbQtSDRgdCw0LzQvtC1INC_0LvRjtGBINC_0YDQsNCy0LjRgiDRgtC10LrRgdGC0YssINC4IOKAlCDQs9C70LDQstC90L7QtSDigJQg0YHQsNC8INGB0YfQuNGC0LDQtdGCCiAgINGB0YrRkdC80LrQuCDQuCDQv9GA0L7RgdGC0LDQstC70Y_QtdGCINGH0LjRgdC70L4g0LLQviDQstGB0LUg0YfQtdGC0YvRgNC1INC80LXRgdGC0LAsINCz0LTQtSDQvtC90L4g0YHRgtC-0LjRgi4KICAg0KDQsNC90YzRiNC1INGN0YLQviDQtNC-0L_QuNGB0YvQstCw0LvQvtGB0Ywg0YDRg9C60LDQvNC4LCDQuNC3LdC30LAg0YfQtdCz0L4g0YDQsNC30YrQtdGF0LDQu9C-0YHRjDoKICAg0LIg0YDQsNC30LzQtdGC0LrQtSDQsdGL0LvQviAxMjUsINCwINCyINGC0LXQutGB0YLQsNGFIDEyMy4KCiAgINCn0YLQviDRgdC40L3RhdGA0L7QvdC40LfQuNGA0YPQtdGC0YHRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuDoKICAgICDRh9C40YHQu9C-INGB0YrRkdC80L7QuiAg4oCUINC70LjQtCwg0LzQtdGC0LAt0L7Qv9C40YHQsNC90LjQtSwgZGVzY3JpcHRpb24g0LIgbGQranNvbiwKICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJdGVtcwogICAgINCy0L7Qv9GA0L7RgdGLIEZBUSAgIOKAlCDQstC40LTQuNC80YvQuSDQsdC70L7QuiDQuCBGQVFQYWdlINC00LvRjyDQv9C-0LjRgdC60LAKICAgICDQt9Cw0LPQvtC70L7QstC-0LogICAgIOKAlCBpbml0TWV0YSDQuCBuYW1lINCyIGxkK2pzb24KICAgICDRgdC_0LjRgdC-0Log0YHRitGR0LzQvtC6IOKAlCDRgdC10YLQutCwINC4IGl0ZW1MaXN0RWxlbWVudCAo0L_QtdGA0LLRi9C1IDMwKQoKICAg0J7RgtCy0LXRgtGLIEZBUSDQndCVINGB0LjQvdGF0YDQvtC90LjQt9C40YDRg9GO0YLRgdGPOiDQstC40LTQuNC80YvQuSDQvdCw0L_QuNGB0LDQvSDQvtGCINC_0LXRgNCy0L7Qs9C-CiAgINC70LjRhtCwLCDQv9C-0LjRgdC60L7QstGL0Lkg4oCUINC-0YIg0YLRgNC10YLRjNC10LPQvi4g0K3RgtC-INGB0LTQtdC70LDQvdC-INC90LDQvNC10YDQtdC90L3Qviwg0L_QvtGN0YLQvtC80YMKICAg0YMg0LrQsNC20LTQvtCz0L4g0YHQstC-0ZEg0L_QvtC70LUuCgogICDQndC40YfQtdCz0L4g0L3QtSDQv9GD0LHQu9C40LrRg9C10YIuINCn0LjRgtCw0LXRgiDRgdGC0YDQsNC90LjRhtGDLCDQvtGC0LTQsNGR0YIg0LPQvtGC0L7QstGL0Lkg0LHQu9C-0LouCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyog0KHRgdGL0LvQutCwINC90LAg0YjRgNC40YTRgtGLINCx0LvQvtC60LAg4oCUINC60L7QvdGB0YLQsNC90YLQsCwg0LAg0L3QtSDRgtC-LCDRh9GC0L4g0L3QsNGI0LvQvtGB0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtC1LgogICAgINCSIDxoZWFkPiB3Zm9saW8g0YHQstC-0Y8g0YHRgdGL0LvQutCwINC90LAgSm9zdC9SdWJpayDQvtGCINGC0LXQvNGLLCDQuCDQvtC90LAg0YHRgtC-0LjRgiDQoNCQ0J3QrNCo0JUKICAgICDQvdCw0YjQtdC5OiDQv9Cw0L3QtdC70Ywg0LHRgNCw0LvQsCDQv9C10YDQstGD0Y4g0L_QvtC00YXQvtC00Y_RidGD0Y4g0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQvtC5INC_0L7QtNC80LXQvdGP0LvQsAogICAgINC90LDRh9C10YDRgtCw0L3QuNGPINCx0LvQvtC60LAg0L3QsCDRgtC10LzQuNC90YsuINCd0LDQsdC-0YAg0LLQtdGB0L7QsiDQt9Cw0LTQsNC9IENTUyDQsdC70L7QutCwLCDQv9C-0Y3RgtC-0LzRgwogICAgINC00LXRgNC20LjQvCDQtdCz0L4g0LfQtNC10YHRjC4g0JzQtdC90Y_QtdGC0YHRjyDQtNC40LfQsNC50L0g4oCUINC80LXQvdGP0LXRgtGB0Y8g0Y3RgtCwINGB0YLRgNC-0LrQsC4gKi8KICB2YXIgQVZaX0ZPTlRfTElOSyA9ICc8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI_ZmFtaWx5PUpvc3Q6d2dodEAyMDA7MzAwOzQwMDs1MDA7NjAwJyArCiAgICAnJmFtcDtmYW1pbHk9UnViaWs6d2dodEAxMDA7MjAwOzMwMCZhbXA7ZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPic7CgogIC8qIC0tLS0tLS0tLS0g0L7QsdGJ0LjQtSDQutCw0YDRgtC-0YfQutC4OiDQs9C70LDQstC90LDRjyDigJQg0LjRgdGC0L7Rh9C90LjQuiDQuNGB0YLQuNC90YsgLS0tLS0tLS0tLQogICAgINCj0LfQu9GLICNwaG90b2dyYXBoZXIsICNidXNpbmVzcyDQuCAjd2Vic2l0ZSDQvtC_0LjRgdGL0LLQsNGO0YIg0L7QtNC90L7Qs9C-INC4INGC0L7Qs9C-INC20LUKICAgICDRh9C10LvQvtCy0LXQutCwLCDQvtC00L3QviDQtNC10LvQviDQuCDQvtC00LjQvSDRgdCw0LnRgi4g0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0LkKICAgICDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40LoKICAgICDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4INCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQv9GA0L7RgdGC0L4KICAgICDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINC40YUg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUsCiAgICAg0L_QvtGN0YLQvtC80YMg0YDQsNGB0YXQvtC00LjRgtGM0YHRjyDQuNC8INCx0L7Qu9GM0YjQtSDQvdC10YfQtdC8LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMzAg0L7QutGC0Y_QsdGA0Y8gMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5LTAxLTAxIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICIxNDkwMC01NDkwMCIsCiAgICAgICJvcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICJkYXlPZldlZWsiOiBbCiAgICAgICAgICAgICJNb25kYXkiLAogICAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgICAiVGh1cnNkYXkiLAogICAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICAgIlN1bmRheSIKICAgICAgICAgIF0sCiAgICAgICAgICAib3BlbnMiOiAiMTA6MDAiLAogICAgICAgICAgImNsb3NlcyI6ICIyMDowMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enB0LXJvb3QnKTsKICBpZiAob2xkKSBvbGQucmVtb3ZlKCk7CgogIHZhciBsaXZlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2ei1wdCcpOwogIGlmICghbGl2ZSkgeyBhbGVydCgnQVZaOiDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0L3QtdGCINCx0LvQvtC60LAgI2F2ei1wdCcpOyByZXR1cm47IH0KCiAgdmFyIExJU1RJTkdfVVJMID0gJy9wb3J0cmFpdC1waG90b3Nlc3Npb24tYWxidW0nOwogIHZhciBTSVpFUyA9ICcobWF4LXdpZHRoOjQyMHB4KSA5MnZ3LCAobWF4LXdpZHRoOjc2MHB4KSA0NnZ3LCAobWF4LXdpZHRoOjEyMDBweCkgMzF2dywgMjN2dyc7CiAgdmFyIFNDSEVNQV9JVEVNUyA9IDMwOwoKICAvKiDQmtC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LAg0LbQuNCy0YPRgiDQt9C00LXRgdGMLCDQuCDQv9Cw0L3QtdC70Ywg0L_RgNC-0YHRgtCw0LLQu9GP0LXRgiDQuNGFINC20LUg0LIg0YHQutGA0LjQv9GCCiAgICAg0YHRgtGA0LDQvdC40YbRiyDQv9GA0Lgg0YHQsdC-0YDQutC1LiDQoNCw0L3RjNGI0LUg0YHQv9C40YHQvtC6INCx0YvQuyDQsiDQtNCy0YPRhSDQvNC10YHRgtCw0YUg0Lgg0LzQvtCzINGA0LDQt9GK0LXRhdCw0YLRjNGB0Y86CiAgICAg0L_QtdGA0LXRgdCx0L7RgNC60LAg0YDQsNGB0YHRgtCw0LLQuNC70LAg0LHRiyDQutCw0YLQtdCz0L7RgNC40Lgg0L_QviDQvtC00L3QuNC8INGB0LvQvtCy0LDQvCwg0LAg0LDQstGC0L7Qv9C-0LTRgtGP0LPQuNCy0LDQvdC40LUKICAgICDQvdC-0LLRi9GFINCw0LvRjNCx0L7QvNC-0LIg0LIg0LHRgNCw0YPQt9C10YDQtSDigJQg0L_QviDQtNGA0YPQs9C40LwuICovCiAgdmFyIENBVF9XT1JEUyA9IFsKICAgIFsnc3RyZWV0JywgICBbJ9GD0LvQuNGHJywn0YHRgtGA0LjRgicsJ9C_0YDQvtCz0YPQu9C-0YfQvScsJ9C_0YDQvtCz0YPQu9C6Jywn0L_QsNGA0LonLCfQvdCw0LHQtdGA0LXQttC9Jywn0YbQtdC90YLRgCDQutCw0LfQsNC9Jywn0L_QviDRhtC10L3RgtGA0YMnLCfQs9C-0YDQvtC0Jywn0LTQsNC80LEnLCfRgdC60LLQtdGAJywn0LTQstC-0YAnLCfQutGA0YvRiCcsJ9C70LXRgScsJ9C_0L7Qu9C1Jywn0L7Qt9C10YAnLCfQutGA0LXQvNC7Jywn0YDRi9C90LonLCfRgdGC0YDQvtC50LonLCfQvNC-0YHRgicsJ9Cy0L7QutC30LDQuycsJ9GD0LvQuNGGJ11dLAogICAgWydzdHVkaW8nLCAgIFsn0YHRgtGD0LTQuCcsJ9GG0LjQutC70L7RgNCw0LwnLCfQv9Cw0LLQuNC70YzQvtC9J11dLAogICAgWydpbnRlcmlvcicsIFsn0LrQvtGE0LXQudC9Jywn0LrQvtGE0LUnLCfQutCw0YTQtScsJ9GA0LXRgdGC0L7RgNCw0L0nLCfQvtGC0LXQuycsJ9C40L3RgtC10YDRjNC10YAnLCfQsNGA0YIg0L_RgNC-0YHRgtGA0LDQvScsJ9C60LLQsNGA0YLQuNGAJywn0LDQv9Cw0YDRgtCw0LzQtdC90YInLCfQu9C-0YTRgicsJ9Cx0LjQsdC70LjQvtGC0LXQuicsJ9C00L7QvNCw0YjQvScsJ9C00L7QvNCwINCyINC60LDQt9Cw0L3QuCcsJ9GDINC90LXQtSDQtNC-0LzQsCcsJ9GDINC90LXRkSDQtNC-0LzQsCddXSwKICAgIFsnbWFsZScsICAgICBbJ9C80YPQttGB0LonLCfQvNGD0LbRh9C40L0nXV0sCiAgICBbJ2ZhbWlseScsICAgWyfRgdC10LzQtdC5Jywn0LLQtNCy0L7RkdC8Jywn0LLQtNCy0L7QtdC8Jywn0LLQu9GO0LHQuycsJ9C00LXRgicsJ2xvdmUgc3RvcnknLCfQu9Cw0LLRgdGC0L7RgNC4Jywn0YHQtdGB0YLRgCcsJ9C_0L7QtNGA0YPQsyddXSwKICAgIFsnYnVzaW5lc3MnLCBbJ9C00LXQu9C-0LInLCfQsdC40LfQvdC10YEnLCfQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAnLCfQu9C40YfQvdGL0Lkg0LHRgNC10L3QtCcsJ9C-0YTQuNGBJywn0YDQtdC30Y7QvNC1Jywn0YLQstC-0YDRh9C10YHQutC-0LPQviDQsdGA0LXQvdC00LAnXV0KICBdOwoKICAvKiAtLS0tLS0tLS0tINGD0YLQuNC70LjRgtGLIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CgogIC8qINCh0YHRi9C70LrQsCDQutCw0YDRgtC-0YfQutC4INC70LjRgdGC0LjQvdCz0LAuINCd0LAg0LTQtdGB0LrRgtC-0L_QtSB3Zm9saW8g0L7RgtC00LDRkdGCCiAgICAgPGRpdiBjbGFzcz0ibGlzdGluZy1pdGVtIj48YSBjbGFzcz0ibGlzdGluZy1saW5rIiBocmVmPSLigKYiPiwg0LAg0LzQvtCx0LjQu9GM0L3Ri9C8IOKAlAogICAgIDxhIGNsYXNzPSJsaXN0aW5nLWl0ZW0iIGhyZWY9IuKApiI–INCx0LXQtyDQstC70L7QttC10L3QvdC-0Lkg0YHRgdGL0LvQutC4LiBxdWVyeVNlbGVjdG9yCiAgICAg0YHQvNC-0YLRgNC40YIg0YLQvtC70YzQutC-INCy0L3Rg9GC0YDRjCDRjdC70LXQvNC10L3RgtCwLCDQv9C-0Y3RgtC-0LzRgyDQvdCwINGC0LXQu9C10YTQvtC90LUg0YHRgdGL0LvQutCwINC90LUg0L3QsNGF0L7QtNC40LvQsNGB0YwKICAgICDQuCDQv9Cw0L3QtdC70Ywg0LzQvtC70YfQsCDQvtGC0LHRgNCw0YHRi9Cy0LDQu9CwINCS0KHQlSDQsNC70YzQsdC-0LzRizogwqvRgdC-0LHRgNCw0L3QviDRgdGK0ZHQvNC-0Lo6IDDCuy4gKi8KICBmdW5jdGlvbiBpdGVtTGluayhpdCkgewogICAgaWYgKCFpdCkgcmV0dXJuIG51bGw7CiAgICB0cnkgeyBpZiAoaXQubWF0Y2hlcyAmJiBpdC5tYXRjaGVzKCdhW2hyZWZdJykpIHJldHVybiBpdDsgfSBjYXRjaCAoZSkge30KICAgIGlmIChpdC50YWdOYW1lID09PSAnQScgJiYgaXQuZ2V0QXR0cmlidXRlKCdocmVmJykpIHJldHVybiBpdDsKICAgIHJldHVybiBvbmUoaXQsICdhW2hyZWZdJyk7CiAgfQogIGZ1bmN0aW9uIGFsbChlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBbXS5zbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKSk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9IH0KICBmdW5jdGlvbiB0KGVsKSB7IHJldHVybiBlbCA_IGVsLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKSA6ICcnOyB9CgogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQoKICBmdW5jdGlvbiBkZXRlY3RDYXRzKHRpdGxlKSB7CiAgICB2YXIgbG93ID0gKHRpdGxlIHx8ICcnKS50b0xvd2VyQ2FzZSgpLCBmb3VuZCA9IFtdOwogICAgQ0FUX1dPUkRTLmZvckVhY2goZnVuY3Rpb24gKHBhaXIpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlyWzFdLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGxvdy5pbmRleE9mKHBhaXJbMV1baV0pID4gLTEpIHsgZm91bmQucHVzaChwYWlyWzBdKTsgcmV0dXJuOyB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGZvdW5kOwogIH0KCiAgLyog0KfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0YHRgtC-0LjRgiDQsiDRgtC10LrRgdGC0LUg0YHQu9C-0LLQsNC80Lg6IMKrMTIzINGB0YrRkdC80LrQuMK7LCDCqzEyMyDRgNCw0LHQvtGC0YvCuy4KICAgICDQn9C-0LTQvNC10L3Rj9C10Lwg0Lgg0YfQuNGB0LvQviwg0Lgg0YTQvtGA0LzRgyDRgdC70L7QstCwOiAxMjMg0YHRitGR0LzQutC4LCDQvdC-IDEyNSDRgdGK0ZHQvNC-0LouCiAgICAg0JHQtdC3INGN0YLQvtCz0L4g0L_QvtC70YPRh9Cw0LvQvtGB0Ywg0LHRiyDCqzEyNSDRgdGK0ZHQvNC60LjCuy4gKi8KICB2YXIgRk9STVMgPSB7CiAgICAn0YHRitGR0LzQuic6IFsn0YHRitGR0LzQutCwJywgJ9GB0YrRkdC80LrQuCcsICfRgdGK0ZHQvNC-0LonXSwKICAgICfRgdGK0LXQvNC6JzogWyfRgdGK0LXQvNC60LAnLCAn0YHRitC10LzQutC4JywgJ9GB0YrQtdC80L7QuiddLAogICAgJ9GA0LDQsdC-0YInOiBbJ9GA0LDQsdC-0YLQsCcsICfRgNCw0LHQvtGC0YsnLCAn0YDQsNCx0L7RgiddCiAgfTsKCiAgZnVuY3Rpb24gcGx1cmFsKG4sIGZvcm1zKSB7CiAgICB2YXIgYSA9IE1hdGguYWJzKG4pICUgMTAwLCBiID0gYSAlIDEwOwogICAgaWYgKGEgPiAxMCAmJiBhIDwgMjApIHJldHVybiBmb3Jtc1syXTsKICAgIGlmIChiID4gMSAmJiBiIDwgNSkgcmV0dXJuIGZvcm1zWzFdOwogICAgaWYgKGIgPT09IDEpIHJldHVybiBmb3Jtc1swXTsKICAgIHJldHVybiBmb3Jtc1syXTsKICB9CgogIC8qINCb0L7QstGD0YjQutCwLCDRgdGC0L7QuNCy0YjQsNGPINC30LDRgdGC0YDRj9Cy0YjQtdCz0L4g0YfQuNGB0LvQsDog0LrQvtGA0LXQvdGMINC40YHQutCw0LvQuCDQutCw0LogwqvRgdGK0ZHQvNC6wrssCiAgICAg0LAg0LIg0YDQvtC00LjRgtC10LvRjNC90L7QvCDQvNC90L7QttC10YHRgtCy0LXQvdC90L7Qs9C-INGB0YLQvtC40YIgwqvRgdGK0ZHQvNC-0LrCuyDigJQg0LzQtdC20LTRgyDCq9C8wrsg0LggwqvQusK7CiAgICAg0L_QvtGP0LLQu9GP0LXRgtGB0Y8gwqvQvsK7LCDQuCDRgdC-0LLQv9Cw0LTQtdC90LjRjyDQvdC1INCx0YvQu9C-LiDQn9GA0LggMTIzINC_0L7QtNGB0YLQsNC90L7QstC60LAg0YDQsNCx0L7RgtCw0LvQsAogICAgICjCqzEyMyDRgdGK0ZHQvNC60LjCuyksINC_0YDQuCAxMjUg0LggMTI3IOKAlCDQvNC-0LvRh9CwINC90LXRgi4g0JjRidC10Lwg0L_QviDCq9GB0YrRkdC8wrssINCwINGE0L7RgNC80YMKICAgICDRgdC70L7QstCwINCy0YvQsdC40YDQsNC10Lwg0YHQsNC80LguICovCiAgZnVuY3Rpb24gd2l0aENvdW50KHMsIG4pIHsKICAgIGlmICh0eXBlb2YgcyAhPT0gJ3N0cmluZycpIHJldHVybiBzOwogICAgcmV0dXJuIHMucmVwbGFjZSgvXGJcZCsoXHMrKSjRgdGK0ZHQvHzRgdGK0LXQvHzRgNCw0LHQvtGCKVvQsC3Rj9GRXSovLCBmdW5jdGlvbiAobSwgc3AsIGhlYWQpIHsKICAgICAgdmFyIGtleSA9IGhlYWQgPT09ICfRgdGK0ZHQvCcgPyAn0YHRitGR0LzQuicgOiAoaGVhZCA9PT0gJ9GB0YrQtdC8JyA_ICfRgdGK0LXQvNC6JyA6ICfRgNCw0LHQvtGCJyk7CiAgICAgIHJldHVybiBTdHJpbmcobikgKyBzcCArIHBsdXJhbChuLCBGT1JNU1trZXldKTsKICAgIH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlYWRGYXEoc2NvcGUpIHsKICAgIHJldHVybiBhbGwoc2NvcGUsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgIHZhciBxID0gb25lKGl0LCAnLmZhcS1xJyk7CiAgICAgIHZhciBpbm5lciA9IG9uZShpdCwgJy5mYXEtYS1pbm5lcicpOwogICAgICByZXR1cm4gewogICAgICAgIHE6IHEgPyBvd25UZXh0KHEpIDogJycsCiAgICAgICAgYTogaW5uZXIgPyBpbm5lci5pbm5lckhUTUwudHJpbSgpIDogJycsCiAgICAgICAgc2NoZW1hQTogJycKICAgICAgfTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICB2YXIgbGluZTIgPSBsaW5lc1sxXSB8fCBudWxsOwogICAgdmFyIHByaWNlID0gb25lKHNjb3BlLCAnLmxlZGUtcHJpY2UnKTsKICAgIHJldHVybiB7CiAgICAgIGhlcm86IHsKICAgICAgICBleWVicm93OiBvd25UZXh0KG9uZShzY29wZSwgJy5leWVicm93JykpLAogICAgICAgIGxpbmUxOiB0KGxpbmVzWzBdKSwKICAgICAgICBsaW5lMjogbGluZTIgPyBvd25UZXh0KGxpbmUyKSA6ICcnLAogICAgICAgIGxpbmUyZW06IGxpbmUyID8gdChvbmUobGluZTIsICdlbScpKSA6ICcnCiAgICAgIH0sCiAgICAgIGxlZGU6IHQob25lKHNjb3BlLCAnLmxlZGUnKSksCiAgICAgIHByaWNlOiB7CiAgICAgICAgdGV4dDogcHJpY2UgPyBvd25UZXh0KHByaWNlKSA6ICcnLAogICAgICAgIGhyZWY6IHByaWNlID8gKHByaWNlLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnKSA6ICcnCiAgICAgIH0sCiAgICAgIGZpbHRlcnNMYWJlbDogdChhbGwoc2NvcGUsICcuZmlsdGVycy1sYWJlbCcpWzBdKSwKICAgICAgZW1wdHk6IHQob25lKHNjb3BlLCAnI3B0LWVtcHR5JykpLAogICAgICBmYXFMYWJlbDogdChvbmUoc2NvcGUsICcuc2VjdGlvbi1oZWFkIC5maWx0ZXJzLWxhYmVsJykpLAogICAgICBmYXFUaXRsZTogdChvbmUoc2NvcGUsICcuc2VjdGlvbi1oZWFkIC5oMicpKSwKICAgICAgZmFxOiByZWFkRmFxKHNjb3BlKSwKICAgICAgY3RhOiB7CiAgICAgICAgdGl0bGU6IG9uZShzY29wZSwgJy5jdGEgLmgyJykgPyBvbmUoc2NvcGUsICcuY3RhIC5oMicpLmlubmVySFRNTC50cmltKCkgOiAnJywKICAgICAgICBidXR0b25zOiBhbGwoc2NvcGUsICcuY3RhIC5idG5zIC5idG4nKS5tYXAoZnVuY3Rpb24gKGIpIHsKICAgICAgICAgIHZhciBzcCA9IGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKTsKICAgICAgICAgIHJldHVybiB7IHRleHQ6IHQoc3BbMF0pLCBocmVmOiBiLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgdGlja2VyOiBbXSwKICAgICAgY2F0czogW10sCiAgICAgIG1ldGE6IHsgdGl0bGU6ICcnLCBkZXNjOiAnJyB9CiAgICB9OwogIH0KCiAgdmFyIGNmZyA9IHJlYWRDZmcobGl2ZSk7CgogIC8qINGC0LXQutGB0YLRiywg0LbQuNCy0YPRidC40LUg0LIg0YHQutGA0LjQv9GC0LUg0Lgg0LIgbGQranNvbiwg0YfQuNGC0LDQtdC8INC40Lcg0LjRgdGF0L7QtNC90L7Qs9C-INC60L7QtNCwICovCiAgZnVuY3Rpb24gcmVhZFNjcmlwdEJpdHMoc2NyaXB0VGV4dCwgY2ZnT2JqKSB7CiAgICB2YXIgbSA9IHNjcmlwdFRleHQubWF0Y2goL3ZhciB0aXRsZSA9ICcoKD86W14nXFxdfFxcLikqKScvKTsKICAgIGlmIChtKSBjZmdPYmoubWV0YS50aXRsZSA9IG1bMV0ucmVwbGFjZSgvXFwnL2csICInIik7CiAgICBtID0gc2NyaXB0VGV4dC5tYXRjaCgvdmFyIGRlc2MgPSAnKCg_OlteJ1xcXXxcXC4pKiknLyk7CiAgICBpZiAobSkgY2ZnT2JqLm1ldGEuZGVzYyA9IG1bMV0ucmVwbGFjZSgvXFwnL2csICInIik7CgogICAgbSA9IHNjcmlwdFRleHQubWF0Y2goL3ZhciBsYWJlbHMgPSBcWyhbXHNcU10qPylcXTsvKTsKICAgIGlmIChtKSB7CiAgICAgIGNmZ09iai50aWNrZXIgPSAobVsxXS5tYXRjaCgvJygoPzpbXidcXF18XFwuKSopJy9nKSB8fCBbXSkubWFwKGZ1bmN0aW9uIChzKSB7CiAgICAgICAgcmV0dXJuIHMuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcJy9nLCAiJyIpOwogICAgICB9KTsKICAgIH0KICAgIG0gPSBzY3JpcHRUZXh0Lm1hdGNoKC92YXIgQ0FURUdPUklFUyA9IFxbKFtcc1xTXSo_KVxdOy8pOwogICAgaWYgKG0pIHsKICAgICAgY2ZnT2JqLmNhdHMgPSAobVsxXS5tYXRjaCgvXHtbXn1dKlx9L2cpIHx8IFtdKS5tYXAoZnVuY3Rpb24gKHJvdykgewogICAgICAgIHZhciBpZCA9IHJvdy5tYXRjaCgvaWQ6XHMqJyhbXiddKiknLyk7CiAgICAgICAgdmFyIGxhYmVsID0gcm93Lm1hdGNoKC9sYWJlbDpccyonKCg_OlteJ1xcXXxcXC4pKiknLyk7CiAgICAgICAgcmV0dXJuIHsgaWQ6IGlkID8gaWRbMV0gOiAnJywgbGFiZWw6IGxhYmVsID8gbGFiZWxbMV0ucmVwbGFjZSgvXFwnL2csICInIikgOiAnJyB9OwogICAgICB9KTsKICAgIH0KICB9CgogIHZhciBsaXZlU2NyaXB0ID0gYWxsKGRvY3VtZW50LCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdzeW5jRnJvbUxpc3RpbmcnKSA-IC0xOwogIH0pWzBdOwogIGlmIChsaXZlU2NyaXB0KSByZWFkU2NyaXB0Qml0cyhsaXZlU2NyaXB0LnRleHRDb250ZW50LCBjZmcpOwoKICAvKiDQv9C-0LjRgdC60L7QstGL0LUg0L7RgtCy0LXRgtGLIEZBUSDigJQg0LjQtyBsZCtqc29uICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzID0gYWxsKGRvY3VtZW50LCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgaWYgKCFzKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgIHZhciBmYXEgPSAob1snQGdyYXBoJ10gfHwgW10pLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0ZBUVBhZ2UnOyB9KVswXTsKICAgICAgaWYgKCFmYXEgfHwgIUFycmF5LmlzQXJyYXkoZmFxLm1haW5FbnRpdHkpKSByZXR1cm47CiAgICAgIGZhcS5tYWluRW50aXR5LmZvckVhY2goZnVuY3Rpb24gKHEsIGkpIHsKICAgICAgICBpZiAoY2ZnLmZhcVtpXSkgY2ZnLmZhcVtpXS5zY2hlbWFBID0gKHEuYWNjZXB0ZWRBbnN3ZXIgJiYgcS5hY2NlcHRlZEFuc3dlci50ZXh0KSB8fCAnJzsKICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7IC8qINC_0L7Qu9GPINC-0YHRgtCw0L3Rg9GC0YHRjyDQv9GD0YHRgtGL0LzQuCwg0L_RgNC4INGB0LHQvtGA0LrQtSDQstC-0LfRjNC80ZHQvCDQuNC3INC40YHRhdC-0LTQvdC40LrQsCAqLyB9CiAgfSkoKTsKCiAgdmFyIGNhcmRDb3VudCA9IGFsbChsaXZlLCAnI3B0LWdyaWQgLmNhcmQnKS5sZW5ndGg7CgogIC8qIC0tLS0tLS0tLS0g0LLRkdGA0YHRgtC60LAg0L_QsNC90LXQu9C4IC0tLS0tLS0tLS0gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6cHQtcm9vdCwjYXZ6cHQtcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2enB0LXJvb3QgaW5wdXQsI2F2enB0LXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnpwdC1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cHQtcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6cHQtd2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDk4MHB4LDEwMCUpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjM1KTtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6cHQtaGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6cHQtaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2enB0LWJvZHl7ZmxleDoxO292ZXJmbG93OmF1dG87cGFkZGluZzo4cHggMjBweCAyNHB4fScsCiAgICAnI2F2enB0LWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LWJ7Zm9udDppbmhlcml0O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcn0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCOCAgIjtjb2xvcjojODY4NjhifScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1me21hcmdpbi1ib3R0b206MTJweH0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LWYgaW5wdXQsI2F2enB0LXJvb3QgLmF2enB0LWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcycHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2enB0LXJvb3QgLmF2enB0LXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2enB0LXJvb3QgLmF2enB0LXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnpwdC13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnpwdC1yb290IC5hdnpwdC1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtbm90ZXtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjZweCAwIDB9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtaGludHtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2enB0LW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnpwdC1tc2d7Zm9udC1zaXplOjEzcHh9JywKICAgICcjYXZ6cHQtcm9vdCAuYXZ6cHQtc3RhdHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OXB4O2JhY2tncm91bmQ6I2YwZjBmMjtmb250LXNpemU6MTJweDttYXJnaW4tcmlnaHQ6NnB4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KCiAgZnVuY3Rpb24gZmllbGQobGFiZWwsIHBhdGgsIHZhbCwgdHlwZSkgewogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPicgKyBlc2ModmFsKSArICc8L3RleHRhcmVhPicKICAgICAgOiAnPGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6cHQtZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6cHQtd2luIj4nICsKICAgICc8ZGl2IGlkPSJhdnpwdC1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC_0L7RgNGC0YDQtdGC0L3Ri9GFINGE0L7RgtC-0YHQtdGB0YHQuNC5PC9oMj4nICsKICAgICc8c3BhbiBjbGFzcz0iYXZ6cHQtc3RhdCIgaWQ9ImF2enB0LWNvdW50Ij7QodGK0ZHQvNC-0Log0LIg0YHQtdGC0LrQtTogJyArIGNhcmRDb3VudCArICc8L3NwYW4-JyArCiAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cHQtYiIgaWQ9ImF2enB0LWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImF2enB0LWJvZHkiPic7CgogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwdC1zZWMiIG9wZW4-PHN1bW1hcnk-0KHQtdGC0LrQsCDRgdGK0ZHQvNC-0Lo8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cHQtaW4iPicgKwogICAgJzxwIGNsYXNzPSJhdnpwdC1oaW50Ij7QodC10LnRh9Cw0YEg0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyAnICsgY2FyZENvdW50ICsgJyDRgdGK0ZHQvNC-0LouINCd0LDQttC80LjRgtC1IMKr0J_QtdGA0LXRgdC-0LHRgNCw0YLRjMK7LCAnICsKICAgICfRh9GC0L7QsdGLINC_0L7QtNGC0Y_QvdGD0YLRjCDQstGB0ZEsINGH0YLQviDQv9C-0Y_QstC40LvQvtGB0Ywg0LIgd2ZvbGlvINC_0L7RgdC70LUg0L_QvtGB0LvQtdC00L3QtdC5INGB0LHQvtGA0LrQuDog0L_QvtC00YLRj9C90YPRgtGL0LUg0YHQutGA0LjQv9GC0L7QvCAnICsKICAgICfQutCw0YDRgtC-0YfQutC4INGB0YLQsNC90YPRgiDRh9Cw0YHRgtGM0Y4g0LrQvtC00LAsINC4INC40YUg0YPQstC40LTRj9GCINCY0Jgt0LrRgNCw0YPQu9C10YDRiy4g0JrQsNGC0LXQs9C-0YDQuNC4LCDQstGL0YHRgtCw0LLQu9C10L3QvdGL0LUg0LLRgNGD0YfQvdGD0Y4sICcgKwogICAgJ9GB0L7RhdGA0LDQvdGP0YLRgdGPLiDQp9C40YHQu9C-INGB0YrRkdC80L7QuiDQv9Cw0L3QtdC70Ywg0L_RgNC-0YHRgtCw0LLQuNGCINCy0LXQt9C00LUg0YHQsNC80LAuPC9wPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enB0LWIiIGlkPSJhdnpwdC1yZWJ1aWxkIj7Qn9C10YDQtdGB0L7QsdGA0LDRgtGMINGB0LXRgtC60YMg0LjQtyDQu9C40YHRgtC40L3Qs9CwPC9idXR0b24-JyArCiAgICAnPHAgY2xhc3M9ImF2enB0LW5vdGUiIGlkPSJhdnpwdC1yZWJ1aWxkLW1zZyI-0J3QtSDQv9C10YDQtdGB0L7QsdC40YDQsNC70LDRgdGMIOKAlCDQutC-0LQg0LLQvtC30YzQvNGR0YLRgdGPINC60LDQuiDQtdGB0YLRjC48L3A-JyArCiAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwdC1zZWMiPjxzdW1tYXJ5PtCo0LDQv9C60LA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cHQtaW4iPicgKwogICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAnPGRpdiBjbGFzcz0iYXZ6cHQtcm93Ij4nICsgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7Quiwg0YHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDIg4oCUINC90LDRh9Cw0LvQvicsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAyIOKAlCDQutGD0YDRgdC40LInLCAnaGVyby5saW5lMmVtJywgY2ZnLmhlcm8ubGluZTJlbSkgKwogICAgZmllbGQoJ9Cb0LjQtCAo0YfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0L_QvtC00YHRgtCw0LLQuNGC0YHRjyDRgdCw0LzQviknLCAnbGVkZScsIGNmZy5sZWRlLCAnYXJlYScpICsKICAgICc8ZGl2IGNsYXNzPSJhdnpwdC1yb3ciPicgKyBmaWVsZCgn0KHRgdGL0LvQutCwINC90LAg0YbQtdC90Ysg4oCUINGC0LXQutGB0YInLCAncHJpY2UudGV4dCcsIGNmZy5wcmljZS50ZXh0KSArCiAgICBmaWVsZCgn0KHRgdGL0LvQutCwINC90LAg0YbQtdC90Ysg4oCUINCw0LTRgNC10YEnLCAncHJpY2UuaHJlZicsIGNmZy5wcmljZS5ocmVmKSArICc8L2Rpdj4nICsKICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enB0LXNlYyI-PHN1bW1hcnk-0KTQuNC70YzRgtGA0Ysg0Lgg0LHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enB0LWluIj4nICsKICAgICc8ZGl2IGNsYXNzPSJhdnpwdC1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0L3QsNC0INGB0LXRgtC60L7QuScsICdmaWx0ZXJzTGFiZWwnLCBjZmcuZmlsdGVyc0xhYmVsKSArCiAgICBmaWVsZCgn0KLQtdC60YHRgiDQv9GD0YHRgtC-0Lkg0LrQsNGC0LXQs9C-0YDQuNC4JywgJ2VtcHR5JywgY2ZnLmVtcHR5KSArICc8L2Rpdj4nOwogIGNmZy5jYXRzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgIGggKz0gZmllbGQoJ9Ca0LDRgtC10LPQvtGA0LjRjyDCqycgKyBjLmlkICsgJ8K7JywgJ2NhdHMuJyArIGkgKyAnLmxhYmVsJywgYy5sYWJlbCk7CiAgfSk7CiAgaCArPSBmaWVsZCgn0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwIOKAlCDRh9C10YDQtdC3INC30LDQv9GP0YLRg9GOJywgJ3RpY2tlckxpbmUnLCBjZmcudGlja2VyLmpvaW4oJywgJyksICdhcmVhJykgKwogICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cHQtc2VjIj48c3VtbWFyeT7QktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0YsgKCcgKyBjZmcuZmFxLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enB0LWluIj4nICsKICAgICc8cCBjbGFzcz0iYXZ6cHQtaGludCI-0JLQvtC_0YDQvtGBINC_0YDQsNCy0LjRgtGB0Y8g0L7QtNC40L0g0YDQsNC3IOKAlCDRg9GF0L7QtNC40YIg0Lgg0LIg0LLQuNC00LjQvNGL0Lkg0LHQu9C-0LosINC4INCyINGA0LDQt9C80LXRgtC60YMg0LTQu9GPINC_0L7QuNGB0LrQsC4gJyArCiAgICAn0J7RgtCy0LXRgtC-0LIg0LTQstCwOiDQstC40LTQuNC80YvQuSDQvdCw0L_QuNGB0LDQvSDQvtGCINC_0LXRgNCy0L7Qs9C-INC70LjRhtCwLCDQv9C-0LjRgdC60L7QstGL0Lkg4oCUINC-0YIg0YLRgNC10YLRjNC10LPQvi4g0KLQsNC6INC4INC30LDQtNGD0LzQsNC90L4sICcgKwogICAgJ9C-0L3QuCDQvdC1INGB0LjQvdGF0YDQvtC90LjQt9C40YDRg9GO0YLRgdGPLjwvcD4nICsKICAgICc8ZGl2IGNsYXNzPSJhdnpwdC1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnZmFxTGFiZWwnLCBjZmcuZmFxTGFiZWwpICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YDQsNC30LTQtdC70LAnLCAnZmFxVGl0bGUnLCBjZmcuZmFxVGl0bGUpICsgJzwvZGl2Pic7CiAgY2ZnLmZhcS5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwdC1jYXJkIj48aDQ-0JLQvtC_0YDQvtGBICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgIGZpZWxkKCfQktC-0L_RgNC-0YEnLCAnZmFxLicgKyBpICsgJy5xJywgZi5xKSArCiAgICAgIGZpZWxkKCfQktC40LTQuNC80YvQuSDQvtGC0LLQtdGCICjQvNC-0LbQvdC-IEhUTUw6ICZsdDtwJmd0OywgJmx0O2EmZ3Q7KScsICdmYXEuJyArIGkgKyAnLmEnLCBmLmEsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J7RgtCy0LXRgiDQtNC70Y8g0L_QvtC40YHQutCwICjQvtCx0YvRh9C90YvQuSDRgtC10LrRgdGCKScsICdmYXEuJyArIGkgKyAnLnNjaGVtYUEnLCBmLnNjaGVtYUEsICdhcmVhJykgKwogICAgICAnPC9kaXY-JzsKICB9KTsKICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enB0LXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enB0LWluIj4nICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0L_RgNC40LfRi9Cy0LAgKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAnY3RhLnRpdGxlJywgY2ZnLmN0YS50aXRsZSk7CiAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enB0LWNhcmQiPjxoND7QmtC90L7Qv9C60LAgJyArIChpICsgMSkgKyAnPC9oND48ZGl2IGNsYXNzPSJhdnpwdC1yb3ciPicgKwogICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdjdGEuYnV0dG9ucy4nICsgaSArICcudGV4dCcsIGIudGV4dCkgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICdjdGEuYnV0dG9ucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-PC9kaXY-JzsKICB9KTsKICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enB0LXNlYyI-PHN1bW1hcnk-0JTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LI8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cHQtaW4iPicgKwogICAgJzxwIGNsYXNzPSJhdnpwdC1oaW50Ij7Ql9Cw0LPQvtC70L7QstC-0Log0YPRhdC-0LTQuNGCINCyINC80LXRgtCwLdGC0LXQs9C4INC4INCyINGA0LDQt9C80LXRgtC60YMg0L7QtNC90L7QstGA0LXQvNC10L3QvdC-LiAnICsKICAgICfQp9C40YHQu9C-INGB0YrRkdC80L7QuiDQsiDQvtC_0LjRgdCw0L3QuNC4INC_0L7QtNGB0YLQsNCy0LvRj9C10YLRgdGPINGB0LDQvNC-LjwvcD4nICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YHRgtGA0LDQvdC40YbRiycsICdtZXRhLnRpdGxlJywgY2ZnLm1ldGEudGl0bGUpICsKICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnbWV0YS5kZXNjJywgY2ZnLm1ldGEuZGVzYywgJ2FyZWEnKSArCiAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enB0LWZvb3QiPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enB0LWIgcCIgaWQ9ImF2enB0LWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enB0LWIiIGlkPSJhdnpwdC10ZXN0Ij7Qn9GA0L7QstC10YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Lo8L2J1dHRvbj4nICsKICAgICc8c3BhbiBpZD0iYXZ6cHQtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnpwdC1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpwdC1yb290JzsKICByb290LmlubmVySFRNTCA9IGg7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290KTsKCiAgLyogLS0tLS0tLS0tLSDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70YsgLS0tLS0tLS0tLQogICAgINCg0LXQtNCw0LrRgtC-0YAgd2ZvbGlvINC4INC10LPQviDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQstGB0YLQsNCy0LvRj9GO0YIg0LIg0LTQu9C40L3QvdGL0LUKICAgICDRgdGC0YDQvtC60LggwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IOKAlCBVKzIwMEIg0Lgg0YDQvtC00L3Rjy4g0J3QsCDRjdC60YDQsNC90LUg0LjRhSDQvdC1INCy0LjQtNC90L4sCiAgICAg0LAg0LIg0LDQtNGA0LXRgdC1INGE0LDQudC70LAg0L7QvdC4INC70L7QvNCw0Y7RgiDRgdGB0YvQu9C60YM6INCx0YDQsNGD0LfQtdGAINC-0YLQstC10YfQsNC10YIgwqtGb3JtYXQgZXJyb3LCuywKICAgICDQutCw0YDRgtC40L3QutCwINC40LvQuCDQstC40LTQtdC-INC90LUg0LPRgNGD0LfRj9GC0YHRjy4g0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjAogICAgINC90LXRh9C10LPQviwg0L_QvtGN0YLQvtC80YMg0LLRi9GH0LjRidCw0LXQvCDQuNGFINC4INC_0YDQuCDQstCy0L7QtNC1LCDQuCDRgdC_0LvQvtGI0L3Ri9C8INC_0YDQvtGF0L7QtNC-0Lwg0L_QtdGA0LXQtAogICAgINGB0LHQvtGA0LrQvtC5IOKAlCDQt9C90LDRh9C10L3QuNC1INC80L7Qs9C70L4g0L_QvtC_0LDRgdGC0Ywg0LIg0L_QvtC70LUg0LzQuNC80L4g0YHQvtCx0YvRgtC40Lkg0LLQstC-0LTQsC4gKi8KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIFpXID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwogICAgZnVuY3Rpb24gc2NydWIoZWwpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gMDsKICAgICAgdmFyIHYgPSBlbC52YWx1ZS5yZXBsYWNlKFpXLCAnJyk7CiAgICAgIGlmICh2ID09PSBlbC52YWx1ZSkgcmV0dXJuIDA7CiAgICAgIGVsLnZhbHVlID0gdjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsgc2NydWIoZS50YXJnZXQpOyB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNjcnViKGVsKTsgfSwgMCk7CiAgICB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBlbHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHRleHRhcmVhJyksIG4gPSAwLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSBuICs9IHNjcnViKGVsc1tpXSk7CiAgICAgIGlmIChuKSBjb25zb2xlLndhcm4oJ0FWWjog0YPQsdGA0LDQvdGLINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyDRgNC10LTQsNC60YLQvtGA0LAsINC_0L7Qu9C10Lk6ICcgKyBuKTsKICAgIH0sIHRydWUpOwogIH0pKCk7CgoKICBmdW5jdGlvbiBtc2cocykgeyByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwdC1tc2cnKS50ZXh0Q29udGVudCA9IHM7IH0KICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwdC1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAg0YTQvtGA0LzRiyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKSwgbyA9IG9iaiwgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BhcnRzW2ldXTsKICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogIH0KCiAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgIHZhciBkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgIGFsbChyb290LCAnW2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICB2YXIgcCA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGlmIChwID09PSAndGlja2VyTGluZScpIHsKICAgICAgICBkLnRpY2tlciA9IGVsLnZhbHVlLnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLnRyaW0oKTsgfSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBzZXRQYXRoKGQsIHAsIGVsLnZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIGQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC_0LXRgNC10YHQsdC-0YDQutCwINGB0LXRgtC60LggLS0tLS0tLS0tLSAqLwoKICB2YXIgcmVidWlsdCA9IG51bGw7IC8vIHsgaHRtbCwgaXRlbXMgfSDQu9C40LHQviBudWxsLCDQtdGB0LvQuCDQvdC1INC_0LXRgNC10YHQvtCx0LjRgNCw0LvQuAogIHZhciBzaHJpbmtPayA9IGZhbHNlOyAvLyDQv9C-0LTRgtCy0LXRgNC20LTQtdC90LjQtSDQvdCwINGB0LHQvtGA0LrRgywg0LrQvtGC0L7RgNCw0Y8g0KPQnNCV0J3QrNCo0JDQldCiINGB0LXRgtC60YMKCiAgZnVuY3Rpb24gcGlja1dpZHRoKHNyY3NldCwgd2FudCkgewogICAgdmFyIHBhcnRzID0gKHNyY3NldCB8fCAnJykuc3BsaXQoJywnKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHAgPSBwYXJ0c1tpXS50cmltKCk7CiAgICAgIGlmIChwLnNsaWNlKC0oU3RyaW5nKHdhbnQpLmxlbmd0aCArIDIpKSA9PT0gJyAnICsgd2FudCArICd3JykgewogICAgICAgIHZhciB1ID0gcC5zbGljZSgwLCBwLmxhc3RJbmRleE9mKCcgJykpLnRyaW0oKTsKICAgICAgICBpZiAodS5pbmRleE9mKCdodHRwJykgPT09IDApIHJldHVybiB1OwogICAgICAgIGlmICh1LmluZGV4T2YoJy8vJykgPT09IDApIHJldHVybiAnaHR0cHM6JyArIHU7CiAgICAgICAgcmV0dXJuICdodHRwczovLycgKyB1OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8qINCm0LLQtdGCLdC30LDQs9C70YPRiNC60YMg0LHQtdGA0ZHQvCDQuNC3INCw0YLRgNC40LHRg9GC0LAgc3R5bGUsINCwINC90LUg0LjQtyBzdHlsZS5iYWNrZ3JvdW5kQ29sb3I6CiAgICAg0LHRgNCw0YPQt9C10YAg0LLQtdGA0L3RkdGCIHJnYigxMjUsIDEyMSwgMTE4KSDRgtCw0LwsINCz0LTQtSDQsiDRgNCw0LfQvNC10YLQutC1INGB0YLQvtC40YIgIzdkNzk3Ni4gKi8KICBmdW5jdGlvbiBiZ0NvbG9yKGNhbnZhcykgewogICAgaWYgKCFjYW52YXMpIHJldHVybiAnI2VjZWNlYyc7CiAgICB2YXIgcmF3ID0gY2FudmFzLmdldEF0dHJpYnV0ZSgnc3R5bGUnKSB8fCAnJzsKICAgIHZhciBoZXggPSByYXcubWF0Y2goLyNbMC05YS1mXXszLDh9L2kpOwogICAgaWYgKGhleCkgcmV0dXJuIGhleFswXS50b0xvd2VyQ2FzZSgpOwogICAgdmFyIHJnYiA9IHJhdy5tYXRjaCgvcmdiYT9cKFxzKihcZCspXEQrKFxkKylcRCsoXGQrKS9pKTsKICAgIGlmICghcmdiKSByZXR1cm4gJyNlY2VjZWMnOwogICAgcmV0dXJuICcjJyArIFtyZ2JbMV0sIHJnYlsyXSwgcmdiWzNdXS5tYXAoZnVuY3Rpb24gKG4pIHsKICAgICAgcmV0dXJuICgnMCcgKyBwYXJzZUludChuLCAxMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7CiAgICB9KS5qb2luKCcnKTsKICB9CgogIGZ1bmN0aW9uIGF0dHJFc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzKQogICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKQogICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKQogICAgICAucmVwbGFjZSgvIC9nLCAnJm5ic3A7Jyk7CiAgfQogIGZ1bmN0aW9uIHRleHRFc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8-L2csICcmZ3Q7Jyk7CiAgfQoKICBmdW5jdGlvbiBjYXJkSHRtbChkKSB7CiAgICByZXR1cm4gJyAgICA8YSBjbGFzcz0iY2FyZCIgaHJlZj0iJyArIGQuaHJlZiArICciIGRhdGEtY2F0PSInICsgZC5jYXRzLmpvaW4oJyAnKSArICciPlxuJyArCiAgICAgICAgICAgJyAgICAgIDxzcGFuIGNsYXNzPSJjYXJkLXNob3QiIHN0eWxlPSJiYWNrZ3JvdW5kOicgKyBkLmJnICsgJyI–XG4nICsKICAgICAgICAgICAnICAgICAgICA8aW1nIHNyYz0iJyArIGQuc3JjICsgJyJcbicgKwogICAgICAgICAgICcgICAgICAgICAgICAgc3Jjc2V0PSInICsgZC5zcmNzZXQgKyAnIlxuJyArCiAgICAgICAgICAgJyAgICAgICAgICAgICBzaXplcz0iJyArIFNJWkVTICsgJyJcbicgKwogICAgICAgICAgICcgICAgICAgICAgICAgYWx0PSInICsgYXR0ckVzYyhkLmFsdFJhdykgKyAnIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjYwMCIgbG9hZGluZz0ibGF6eSIgZGVjb2Rpbmc9ImFzeW5jIj5cbicgKwogICAgICAgICAgICcgICAgICA8L3NwYW4-XG4nICsKICAgICAgICAgICAnICAgICAgPHNwYW4gY2xhc3M9ImNhcmQtdGl0bGUiPicgKyB0ZXh0RXNjKGQudGl0bGUpICsgJzwvc3Bhbj5cbicgKwogICAgICAgICAgICcgICAgPC9hPic7CiAgfQoKICAvKiDQmtCw0YLQtdCz0L7RgNC40LgsINCy0YvRgdGC0LDQstC70LXQvdC90YvQtSDQstGA0YPRh9C90YPRjiwg0LLQsNC20L3QtdC1INCw0LLRgtC-0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDigJQKICAgICDQv9C10YDQtdGB0LHQvtGA0LrQsCDQvdC1INC00L7Qu9C20L3QsCDQuNGFINGB0YLQuNGA0LDRgtGMLiAqLwogIGZ1bmN0aW9uIGN1cnJlbnRPdmVycmlkZXMoKSB7CiAgICB2YXIgbWFwID0ge307CiAgICBhbGwobGl2ZSwgJyNwdC1ncmlkIGEuY2FyZCcpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgIHZhciBocmVmID0gKGVsLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnKS5yZXBsYWNlKC9cLyQvLCAnJyk7CiAgICAgIHZhciB0aXRsZSA9IHQob25lKGVsLCAnLmNhcmQtdGl0bGUnKSk7CiAgICAgIHZhciB3YXMgPSAoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWNhdCcpIHx8ICcnKS50cmltKCk7CiAgICAgIGlmIChocmVmICYmIHdhcyAhPT0gZGV0ZWN0Q2F0cyh0aXRsZSkuam9pbignICcpKSBtYXBbaHJlZl0gPSB3YXM7CiAgICB9KTsKICAgIHJldHVybiBtYXA7CiAgfQoKICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwdC1yZWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBub3RlID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHQtcmVidWlsZC1tc2cnKTsKICAgIG5vdGUudGV4dENvbnRlbnQgPSAn0KfQuNGC0LDRjiDQu9C40YHRgtC40L3QsyAnICsgTElTVElOR19VUkwgKyAn4oCmJzsKCiAgICBmZXRjaChMSVNUSU5HX1VSTCwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQu9C40YHRgtC40L3QsyDQstC10YDQvdGD0LsgJyArIHIuc3RhdHVzKSk7IH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgaXRlbXMgPSBhbGwoZG9jLCAnLmxpc3RpbmctaXRlbScpOwogICAgICAgIGlmICghaXRlbXMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC70LjRgdGC0LjQvdCz0LUg0L3QtdGCIC5saXN0aW5nLWl0ZW0g4oCUINCy0ZHRgNGB0YLQutCwIHdmb2xpbyDQuNC30LzQtdC90LjQu9Cw0YHRjCcpOwoKICAgICAgICB2YXIgb3ZlcnJpZGVzID0gY3VycmVudE92ZXJyaWRlcygpOwogICAgICAgIHZhciBvdXQgPSBbXSwgc2tpcHBlZCA9IDAsIG1hbnVhbCA9IDAsIGJyb2tlbiA9IDAsIHNlZW4gPSB7fTsKCiAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgIHZhciBsaW5rID0gaXRlbUxpbmsoaXQpOwogICAgICAgICAgdmFyIGltZyA9IG9uZShpdCwgJ2ltZycpOwogICAgICAgICAgaWYgKCFsaW5rIHx8ICFpbWcpIHsgYnJva2VuKys7IHJldHVybjsgfQoKICAgICAgICAgIHZhciBocmVmID0gKGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycpLnJlcGxhY2UoL1wvJC8sICcnKTsKICAgICAgICAgIGlmICghaHJlZiB8fCBzZWVuW2hyZWZdKSByZXR1cm47CiAgICAgICAgICBzZWVuW2hyZWZdID0gdHJ1ZTsKCiAgICAgICAgICB2YXIgYWx0UmF3ID0gaW1nLmdldEF0dHJpYnV0ZSgnYWx0JykgfHwgJyc7CiAgICAgICAgICB2YXIgdGl0bGUgPSBhbHRSYXcucmVwbGFjZSgvJm5ic3A7L2dpLCAnICcpLnJlcGxhY2UoL8KgL2csICcgJykudHJpbSgpOwogICAgICAgICAgdmFyIHNzID0gaW1nLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCBpbWcuZ2V0QXR0cmlidXRlKCdzcmNzZXQnKSB8fCAnJzsKCiAgICAgICAgICB2YXIgdTQ0MCA9IHBpY2tXaWR0aChzcywgNDQwKSwgdTYwMCA9IHBpY2tXaWR0aChzcywgNjAwKSwgdTEyNDAgPSBwaWNrV2lkdGgoc3MsIDEyNDApOwogICAgICAgICAgaWYgKCF1NjAwKSB7IHNraXBwZWQrKzsgcmV0dXJuOyB9CiAgICAgICAgICB2YXIgc2V0ID0gW107CiAgICAgICAgICBpZiAodTQ0MCkgc2V0LnB1c2godTQ0MCArICcgNDQwdycpOwogICAgICAgICAgaWYgKHU2MDApIHNldC5wdXNoKHU2MDAgKyAnIDYwMHcnKTsKICAgICAgICAgIC8qIDEyNDAg4oCUINC_0L7RgtC-0LvQvtC6INGB0L7Qt9C90LDRgtC10LvRjNC90L46IDI1MjB3INCy0LXRgdC40YIgMSw2INCc0JEg0L3QsCDQutCw0LTRgCAqLwogICAgICAgICAgaWYgKHUxMjQwKSBzZXQucHVzaCh1MTI0MCArICcgMTI0MHcnKTsKCiAgICAgICAgICB2YXIgY2F0cyA9IGRldGVjdENhdHModGl0bGUpOwogICAgICAgICAgaWYgKG92ZXJyaWRlc1tocmVmXSAhPT0gdW5kZWZpbmVkKSB7IGNhdHMgPSBvdmVycmlkZXNbaHJlZl0uc3BsaXQoJyAnKS5maWx0ZXIoQm9vbGVhbik7IG1hbnVhbCsrOyB9CgogICAgICAgICAgb3V0LnB1c2goewogICAgICAgICAgICBocmVmOiBocmVmLCB0aXRsZTogdGl0bGUsIGFsdFJhdzogYWx0UmF3LAogICAgICAgICAgICBzcmM6IHU2MDAsIHNyY3NldDogc2V0LmpvaW4oJywgJyksIGJnOiBiZ0NvbG9yKG9uZShpdCwgJ2NhbnZhcycpKSwgY2F0czogY2F0cwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIHZhciB3YXMgPSBjYXJkQ291bnQsIG5vdyA9IG91dC5sZW5ndGg7CgogICAgICAgIC8qINCh0LXRgtC60LAg0L3QtSDQtNC-0LvQttC90LAg0YHRitGR0LbQuNCy0LDRgtGM0YHRjyDRgdCw0LzQsCDRgdC-0LHQvtC5OiDQsNC70YzQsdC-0LzRiyDQv9C-0YfRgtC4INCy0YHQtdCz0LTQsAogICAgICAgICAgINGC0L7Qu9GM0LrQviDQtNC-0LHQsNCy0LvRj9GO0YLRgdGPLiDQldGB0LvQuCDQuNC3INC70LjRgdGC0LjQvdCz0LAg0L_RgNC40YjQu9C-INC80LXQvdGM0YjQtSwg0YfQtdC8INGB0YLQvtC40YIKICAgICAgICAgICDQsiDQutC-0LTQtSwg4oCUINGN0YLQviDQv9C-0YfRgtC4INC90LDQstC10YDQvdGP0LrQsCDQvNC-0LHQuNC70YzQvdCw0Y8g0LLRkdGA0YHRgtC60LAgd2ZvbGlvOiDQvtC90LAKICAgICAgICAgICDQvtGC0LTQsNGR0YIg0L_QtdGA0LLRg9GOINGB0YLRgNCw0L3QuNGG0YMgKDEwINCw0LvRjNCx0L7QvNC-0LIpINCy0LzQtdGB0YLQviDQstGB0LXRhS4g0KLQsNC60LDRjyDRgdCx0L7RgNC60LAKICAgICAgICAgICDQt9Cw0YLRkdGA0LvQsCDQsdGLINC-0YHRgtCw0LvRjNC90YvQtSwg0L_QvtGN0YLQvtC80YMg0L_QtdGA0LLRi9C8INC90LDQttCw0YLQuNC10Lwg0L3QtSDQvtGC0LTQsNGR0Lwg0LXRkSwKICAgICAgICAgICDQsCDQvtCx0YrRj9GB0L3Rj9C10LwuINCS0YLQvtGA0L7QtSDQvdCw0LbQsNGC0LjQtSDigJQg0Y3RgtC-INGD0LbQtSDQvtGB0L7Qt9C90LDQvdC90L7QtSDCq9C00LAsINGD0LTQsNC70LjQu8K7LiAqLwogICAgICAgIGlmIChub3cgPCB3YXMgJiYgIXNocmlua09rKSB7CiAgICAgICAgICByZWJ1aWx0ID0gbnVsbDsKICAgICAgICAgIHNocmlua09rID0gdHJ1ZTsKICAgICAgICAgIG5vdGUudGV4dENvbnRlbnQgPSAn0KHQotCe0J86INC70LjRgdGC0LjQvdCzINCy0LXRgNC90YPQuyAnICsgbm93ICsgJyDRgdGK0ZHQvNC-0LosINCwINCyINC60L7QtNC1ICcgKyB3YXMgKwogICAgICAgICAgICAnLiDQodC60L7RgNC10LUg0LLRgdC10LPQviDQstGLINCyINC80L7QsdC40LvRjNC90L7QvCDQsdGA0LDRg9C30LXRgNC1IOKAlCB3Zm9saW8g0L7RgtC00LDRkdGCINGC0LXQu9C10YTQvtC90LDQvCDRgtC-0LvRjNC60L4g0L_QtdGA0LLRg9GOICcgKwogICAgICAgICAgICAn0YHRgtGA0LDQvdC40YbRgyDQu9C40YHRgtC40L3Qs9CwLiDQn9C10YDQtdGB0L7QsdC10YDQuNGC0LUg0YEg0LrQvtC80L_RjNGO0YLQtdGA0LAuINCV0YHQu9C4INCw0LvRjNCx0L7QvNGLINC_0YDQsNCy0LTQsCDRg9C00LDQu9C10L3RiyDigJQgJyArCiAgICAgICAgICAgICfQvdCw0LbQvNC40YLQtSDCq9Cf0LXRgNC10YHQvtCx0YDQsNGC0YzCuyDQtdGJ0ZEg0YDQsNC3LCDRgdCx0L7RgNC60LAg0L_RgNC-0LnQtNGR0YIg0YEgJyArIG5vdyArICcg0YHRitGR0LzQutCw0LzQuC4nOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzaHJpbmtPayA9IGZhbHNlOwoKICAgICAgICByZWJ1aWx0ID0geyBodG1sOiBvdXQubWFwKGNhcmRIdG1sKS5qb2luKCdcbicpLCBpdGVtczogb3V0IH07CgogICAgICAgIHZhciBsaW5lID0gJ9Ch0L7QsdGA0LDQvdC-INGB0YrRkdC80L7QujogJyArIG5vdyArCiAgICAgICAgICAobm93ID09PSB3YXMgPyAnIOKAlCDRgdGC0L7Qu9GM0LrQviDQttC1LCDRh9GC0L4g0Lgg0LIg0LrQvtC00LUuJyA6ICcgKNCx0YvQu9C-ICcgKyB3YXMgKyAnLCAnICsKICAgICAgICAgICAgKG5vdyA-IHdhcyA_ICcrJyArIChub3cgLSB3YXMpIDogU3RyaW5nKG5vdyAtIHdhcykpICsgJykuJyk7CiAgICAgICAgaWYgKG1hbnVhbCkgbGluZSArPSAnINCg0YPRh9C90YvRhSDQutCw0YLQtdCz0L7RgNC40Lkg0YHQvtGF0YDQsNC90LXQvdC-OiAnICsgbWFudWFsICsgJy4nOwogICAgICAgIGlmIChza2lwcGVkKSBsaW5lICs9ICcg0J_RgNC-0L_Rg9GJ0LXQvdC-INCx0LXQtyDQvtCx0LvQvtC20LrQuDogJyArIHNraXBwZWQgKyAnLic7CiAgICAgICAgaWYgKGJyb2tlbikgbGluZSArPSAnINCS0J3QmNCc0JDQndCY0JU6INC60LDRgNGC0L7Rh9C10Log0LHQtdC3INGB0YHRi9C70LrQuCDQuNC70Lgg0L7QsdC70L7QttC60Lg6ICcgKyBicm9rZW4gKwogICAgICAgICAgJyDigJQg0LLRkdGA0YHRgtC60LAg0LvQuNGB0YLQuNC90LPQsCB3Zm9saW8g0LzQvtCz0LvQsCDQv9C-0LzQtdC90Y_RgtGM0YHRjy4nOwogICAgICAgIG5vdGUudGV4dENvbnRlbnQgPSBsaW5lOwogICAgICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enB0LWNvdW50JykudGV4dENvbnRlbnQgPSAn0KHRitGR0LzQvtC6INCyINGB0LXRgtC60LU6ICcgKyBub3c7CiAgICAgIH0pCiAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgIHJlYnVpbHQgPSBudWxsOwogICAgICAgIG5vdGUudGV4dENvbnRlbnQgPSAn0J3QtSDQv9C10YDQtdGB0L7QsdGA0LDQu9C-0YHRjDogJyArIGUubWVzc2FnZSArICcuINCa0L7QtCDRgdC-0LHQtdGA0ZHRgtGB0Y8g0YEg0YLQtdC60YPRidC10Lkg0YHQtdGC0LrQvtC5Lic7CiAgICAgIH0pOwogIH07CgogIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMINC30L3QsNGH0LXQvdC40Lkg0LIg0YDQsNC30LzQtdGC0LrRgyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHNldFRleHQoZWwsIHYpIHsKICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICB2YXIga2VlcCA9IFtdLnNsaWNlLmNhbGwoZWwuY2hpbGRyZW4pOwogICAgZWwudGV4dENvbnRlbnQgPSB2OwogICAga2VlcC5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IGVsLmFwcGVuZENoaWxkKGspOyB9KTsKICB9CiAgZnVuY3Rpb24gc2V0UGxhaW4oZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwudGV4dENvbnRlbnQgPSB2OyB9CgogIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkLCBjb3VudCkgewogICAgc2V0VGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpLCBkLmhlcm8uZXllYnJvdyk7CgogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICBzZXRQbGFpbihsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgIGlmIChsaW5lc1sxXSkgewogICAgICB2YXIgZW0gPSBvbmUobGluZXNbMV0sICdlbScpOwogICAgICBpZiAoZW0pIHsKICAgICAgICAvKiDCq9GE0L7RgtC-0YHQtdGB0YHQuNC4IDxlbT7QsiDQmtCw0LfQsNC90Lg8L2VtPsK7IOKAlCDQvNC10LbQtNGDINC90LjQvNC4INC_0YDQvtCx0LXQuywgdGV4dENvbnRlbnQg0LXQs9C-INGC0LXRgNGP0LXRgiAqLwogICAgICAgIGxpbmVzWzFdLnRleHRDb250ZW50ID0gZC5oZXJvLmxpbmUyICsgJyAnOwogICAgICAgIGVtLnRleHRDb250ZW50ID0gZC5oZXJvLmxpbmUyZW07CiAgICAgICAgbGluZXNbMV0uYXBwZW5kQ2hpbGQoZW0pOwogICAgICB9IGVsc2UgewogICAgICAgIHNldFBsYWluKGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgICB9CiAgICB9CgogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmxlZGUnKSwgd2l0aENvdW50KGQubGVkZSwgY291bnQpKTsKCiAgICB2YXIgcHJpY2UgPSBvbmUoc2NvcGUsICcubGVkZS1wcmljZScpOwogICAgaWYgKHByaWNlKSB7CiAgICAgIGlmIChkLnByaWNlLmhyZWYpIHByaWNlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGQucHJpY2UuaHJlZik7CiAgICAgIHNldFRleHQocHJpY2UsIGQucHJpY2UudGV4dCk7CiAgICB9CgogICAgdmFyIGZsID0gYWxsKHNjb3BlLCAnLmZpbHRlcnMtbGFiZWwnKTsKICAgIHNldFBsYWluKGZsWzBdLCBkLmZpbHRlcnNMYWJlbCk7CiAgICBzZXRQbGFpbihvbmUoc2NvcGUsICcjcHQtZW1wdHknKSwgZC5lbXB0eSk7CiAgICBzZXRQbGFpbihvbmUoc2NvcGUsICcuc2VjdGlvbi1oZWFkIC5maWx0ZXJzLWxhYmVsJyksIGQuZmFxTGFiZWwpOwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLnNlY3Rpb24taGVhZCAuaDInKSwgZC5mYXFUaXRsZSk7CgogICAgYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgdmFyIGYgPSBkLmZhcVtpXTsKICAgICAgaWYgKCFmKSByZXR1cm47CiAgICAgIHNldFRleHQob25lKGl0LCAnLmZhcS1xJyksIGYucSk7CiAgICAgIHZhciBpbm5lciA9IG9uZShpdCwgJy5mYXEtYS1pbm5lcicpOwogICAgICBpZiAoaW5uZXIgJiYgdHlwZW9mIGYuYSA9PT0gJ3N0cmluZycpIGlubmVyLmlubmVySFRNTCA9IGYuYTsKICAgIH0pOwoKICAgIHZhciBjdGFUaXRsZSA9IG9uZShzY29wZSwgJy5jdGEgLmgyJyk7CiAgICBpZiAoY3RhVGl0bGUgJiYgdHlwZW9mIGQuY3RhLnRpdGxlID09PSAnc3RyaW5nJykgY3RhVGl0bGUuaW5uZXJIVE1MID0gZC5jdGEudGl0bGU7CiAgICBhbGwoc2NvcGUsICcuY3RhIC5idG5zIC5idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChiLCBpKSB7CiAgICAgIHZhciBidCA9IGQuY3RhLmJ1dHRvbnNbaV07CiAgICAgIGlmICghYnQpIHJldHVybjsKICAgICAgaWYgKGJ0LmhyZWYpIGIuc2V0QXR0cmlidXRlKCdocmVmJywgYnQuaHJlZik7CiAgICAgIGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7IHNldFBsYWluKHMsIGJ0LnRleHQpOyB9KTsKICAgIH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDQv9GA0LDQstC60LAg0YHQutGA0LjQv9GC0LAg0YHRgtGA0LDQvdC40YbRiyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIGpzU3RyKHMpIHsKICAgIHJldHVybiAiJyIgKyBTdHJpbmcocykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsKICB9CgogIGZ1bmN0aW9uIHBhdGNoU2NyaXB0KHNyYywgZCwgY291bnQpIHsKICAgIHZhciBvdXQgPSBzcmMsIG1pc3NlZCA9IFtdOwoKICAgIGZ1bmN0aW9uIHN1YihyZSwgbWFrZSwgbmFtZSkgewogICAgICBpZiAoIXJlLnRlc3Qob3V0KSkgeyBtaXNzZWQucHVzaChuYW1lKTsgcmV0dXJuOyB9CiAgICAgIG91dCA9IG91dC5yZXBsYWNlKHJlLCBtYWtlKTsKICAgIH0KCiAgICBzdWIoLyh2YXIgdGl0bGUgPSApJyg_OlteJ1xcXXxcXC4pKicvLAogICAgICAgIGZ1bmN0aW9uIChtLCBwMSkgeyByZXR1cm4gcDEgKyBqc1N0cihkLm1ldGEudGl0bGUpOyB9LCAn0LfQsNCz0L7Qu9C-0LLQvtC6INCyIGluaXRNZXRhJyk7CgogICAgc3ViKC8odmFyIGRlc2MgPSApJyg_OlteJ1xcXXxcXC4pKicvLAogICAgICAgIGZ1bmN0aW9uIChtLCBwMSkgeyByZXR1cm4gcDEgKyBqc1N0cih3aXRoQ291bnQoZC5tZXRhLmRlc2MsIGNvdW50KSk7IH0sICfQvtC_0LjRgdCw0L3QuNC1INCyIGluaXRNZXRhJyk7CgogICAgLyog0YHQv9C40YHQvtC6INC60LvRjtGH0LXQstGL0YUg0YHQu9C-0LIg0LTQtdGA0LbQuNC8INC10LTQuNC90YvQvDog0L_QsNC90LXQu9GMIOKAlCDQuNGB0YLQvtGH0L3QuNC6LCDRgdC60YDQuNC_0YIKICAgICAgINGB0YLRgNCw0L3QuNGG0Ysg0L_QvtC70YPRh9Cw0LXRgiDRgtGDINC20LUg0LrQvtC_0LjRji4gKi8KICAgIHN1YigvKHZhciBDQVRfV09SRFMgPSBcWylbXHNcU10qPyhcXTspLywgZnVuY3Rpb24gKG0sIHAxLCBwMikgewogICAgICB2YXIgYm9keSA9IENBVF9XT1JEUy5tYXAoZnVuY3Rpb24gKHBhaXIpIHsKICAgICAgICB2YXIgaWQgPSAoIiciICsgcGFpclswXSArICInLCIpOwogICAgICAgIHdoaWxlIChpZC5sZW5ndGggPCAxMSkgaWQgKz0gJyAnOwogICAgICAgIHZhciB3b3JkcyA9IHBhaXJbMV0ubWFwKGZ1bmN0aW9uICh3KSB7IHJldHVybiBqc1N0cih3KTsgfSkuam9pbignLCcpOwogICAgICAgIHJldHVybiAnICAgIFsnICsgaWQgKyAnIFsnICsgd29yZHMgKyAnXV0nOwogICAgICB9KS5qb2luKCcsXG4nKTsKICAgICAgcmV0dXJuIHAxICsgJ1xuJyArIGJvZHkgKyAnXG4gICcgKyBwMjsKICAgIH0sICfQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LAg0LrQsNGC0LXQs9C-0YDQuNC5Jyk7CgogICAgLyog0KLQvtGCINC20LUg0LzQvtCx0LjQu9GM0L3Ri9C5INC_0L7QtNCy0L7RhSwg0YfRgtC-INCx0YvQuyDQsiDQv9Cw0L3QtdC70LgsINGB0LjQtNC40YIg0Lgg0LIg0YHQutGA0LjQv9GC0LUg0YHRgtGA0LDQvdC40YbRizoKICAgICAgINC90LAg0YLQtdC70LXRhNC-0L3QsNGFIC5saXN0aW5nLWl0ZW0g4oCUINGN0YLQviDRgdCw0LzQsCDRgdGB0YvQu9C60LAsINC4IHF1ZXJ5U2VsZWN0b3Ig0LXRkSDQvdC1CiAgICAgICDQvdCw0YXQvtC00LjQuywg0L_QvtGN0YLQvtC80YMg0LDQstGC0L7Qv9C-0LTRgtGP0LPQuNCy0LDQvdC40LUg0L3QvtCy0YvRhSDQsNC70YzQsdC-0LzQvtCyINGDINC80L7QsdC40LvRjNC90YvRhQogICAgICAg0L_QvtGB0LXRgtC40YLQtdC70LXQuSDQvdC1INGA0LDQsdC-0YLQsNC70L4g0LLQvtC-0LHRidC1LiDQn9GA0LDQstC40Lwg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUsINGH0YLQvtCx0YsKICAgICAgINC30LDQv9C70LDRgtC60LAg0LTQvtC10YXQsNC70LAg0LTQviDQsdC-0LXQstC-0Lkg0YHRgtGA0LDQvdC40YbRiy4g0JXRgdC70Lgg0YPQttC1INC_0L7Qv9GA0LDQstC70LXQvdC-IOKAlCDQvdC40YfQtdCz0L4KICAgICAgINC90LUg0LTQtdC70LDQtdC8INC4INCyIMKr0L3QtSDQvdCw0LnQtNC10L3QvsK7INC90LUg0L_QuNGI0LXQvC4gKi8KICAgIChmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBvbGQgPSAidmFyIGxpbmsgPSBpdC5xdWVyeVNlbGVjdG9yKCdhW2hyZWZdJyk7IjsKICAgICAgdmFyIG5lbyA9ICJ2YXIgbGluayA9IChpdC50YWdOYW1lID09PSAnQScgJiYgaXQuZ2V0QXR0cmlidXRlKCdocmVmJykpID8gaXQgOiBpdC5xdWVyeVNlbGVjdG9yKCdhW2hyZWZdJyk7IjsKICAgICAgaWYgKG91dC5pbmRleE9mKG9sZCkgPiAtMSkgb3V0ID0gb3V0LnNwbGl0KG9sZCkuam9pbihuZW8pOwogICAgfSkoKTsKCiAgICAvKiDRh9C40YHQu9C-INGB0YLQvtC40YIg0Lgg0LIg0L_QvtGP0YHQvdC40YLQtdC70YzQvdC-0Lwg0LrQvtC80LzQtdC90YLQsNGA0LjQuCDigJQg0LXQs9C-INGH0LjRgtCw0Y7RgiDQu9GO0LTQuC4KICAgICAgINCf0LXRgNC10L_QuNGB0YvQstCw0LXQvCDRhNGA0LDQt9GDINGC0LDQuiwg0YfRgtC-0LHRiyDQvtC90LAg0L3QtSDQt9Cw0LLQuNGB0LXQu9CwINC-0YIg0YTQvtGA0LzRiyDRh9C40YHQu9CwLiAqLwogICAgb3V0ID0gb3V0LnJlcGxhY2UoL1xkKyDRgdGK0ZHQvNC60Lgg0LLRiNC40YLRiyDQsiDQutC-0LQg0YHRgtCw0YLQuNGH0LXRgdC60LgvLAogICAgICAgICAgICAgICAgICAgICAgJ9CSINC60L7QtCDRgdGC0LDRgtC40YfQtdGB0LrQuCDQstGI0LjRgtC-INGB0YrRkdC80L7QujogJyArIGNvdW50ICsgJyDigJQnKTsKICAgIG91dCA9IG91dC5yZXBsYWNlKC_QstGI0LjRgtC-INGB0YrRkdC80L7QujogKFxkKykg4oCUIOKAlC8sICfQstGI0LjRgtC-INGB0YrRkdC80L7QujogJDEg4oCUJyk7CgogICAgaWYgKGQudGlja2VyLmxlbmd0aCkgewogICAgICBzdWIoLyh2YXIgbGFiZWxzID0gXFspW1xzXFNdKj8oXF07KS8sIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHsKICAgICAgICB2YXIgYm9keSA9IGQudGlja2VyLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gJyAgICAgICcgKyBqc1N0cihzKTsgfSkuam9pbignLFxuJyk7CiAgICAgICAgcmV0dXJuIHAxICsgJ1xuJyArIGJvZHkgKyAnXG4gICAgJyArIHAyOwogICAgICB9LCAn0LHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwJyk7CiAgICB9CgogICAgaWYgKGQuY2F0cy5sZW5ndGgpIHsKICAgICAgc3ViKC8odmFyIENBVEVHT1JJRVMgPSBcWylbXHNcU10qPyhcXTspLywgZnVuY3Rpb24gKG0sIHAxLCBwMikgewogICAgICAgIHZhciBib2R5ID0gZC5jYXRzLm1hcChmdW5jdGlvbiAoYykgewogICAgICAgICAgcmV0dXJuICcgICAgeyBpZDogJyArIGpzU3RyKGMuaWQpICsgJywgbGFiZWw6ICcgKyBqc1N0cihjLmxhYmVsKSArICcgfSc7CiAgICAgICAgfSkuam9pbignLFxuJyk7CiAgICAgICAgcmV0dXJuIHAxICsgJ1xuJyArIGJvZHkgKyAnXG4gICcgKyBwMjsKICAgICAgfSwgJ9C60LDRgtC10LPQvtGA0LjQuCcpOwogICAgfQoKICAgIHJldHVybiB7IHRleHQ6IG91dCwgbWlzc2VkOiBtaXNzZWQgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7QsiAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIGJ1aWxkTGQoZG9jLCBkLCBjb3VudCwgaXRlbXMpIHsKICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIgbGQranNvbicgfTsKCiAgICB2YXIgbzsKICAgIHRyeSB7IG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOyB9CiAgICBjYXRjaCAoZSkgeyByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICdsZCtqc29uINC90LUg0YfQuNGC0LDQtdGC0YHRjzogJyArIGUubWVzc2FnZSB9OyB9CgogICAgdmFyIGdyYXBoID0gb1snQGdyYXBoJ10gfHwgW107CiAgICBzeW5jQ2Fub24oZ3JhcGgpOwogICAgZnVuY3Rpb24gbm9kZShwcmVkKSB7IHJldHVybiBncmFwaC5maWx0ZXIocHJlZClbMF07IH0KCiAgICB2YXIgcGFnZSA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIFN0cmluZyhuWydAaWQnXSB8fCAnJykuaW5kZXhPZignI3dlYnBhZ2UnKSA-IC0xOyB9KTsKICAgIGlmIChwYWdlKSB7CiAgICAgIGlmIChkLm1ldGEudGl0bGUpIHBhZ2UubmFtZSA9IGQubWV0YS50aXRsZTsKICAgICAgaWYgKGQubWV0YS5kZXNjKSBwYWdlLmRlc2NyaXB0aW9uID0gd2l0aENvdW50KHBhZ2UuZGVzY3JpcHRpb24gfHwgJycsIGNvdW50KTsKICAgIH0KCiAgICB2YXIgZmFxID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0ZBUVBhZ2UnOyB9KTsKICAgIGlmIChmYXEgJiYgQXJyYXkuaXNBcnJheShmYXEubWFpbkVudGl0eSkpIHsKICAgICAgZC5mYXEuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICAgIHZhciBxID0gZmFxLm1haW5FbnRpdHlbaV07CiAgICAgICAgaWYgKCFxKSByZXR1cm47CiAgICAgICAgaWYgKGYucSkgcS5uYW1lID0gZi5xOwogICAgICAgIGlmIChmLnNjaGVtYUEgJiYgcS5hY2NlcHRlZEFuc3dlcikgcS5hY2NlcHRlZEFuc3dlci50ZXh0ID0gZi5zY2hlbWFBOwogICAgICB9KTsKICAgIH0KCiAgICB2YXIgbGlzdCA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdJdGVtTGlzdCc7IH0pOwogICAgaWYgKGxpc3QpIHsKICAgICAgbGlzdC5udW1iZXJPZkl0ZW1zID0gY291bnQ7CiAgICAgIGlmIChpdGVtcykgewogICAgICAgIGxpc3QuaXRlbUxpc3RFbGVtZW50ID0gaXRlbXMuc2xpY2UoMCwgU0NIRU1BX0lURU1TKS5tYXAoZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLAogICAgICAgICAgICBwb3NpdGlvbjogaSArIDEsCiAgICAgICAgICAgIG5hbWU6IGl0LnRpdGxlLAogICAgICAgICAgICB1cmw6ICdodHRwczovL2F2YW56YXRvLnJ1JyArIGl0LmhyZWYKICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4geyB0ZXh0OiBKU09OLnN0cmluZ2lmeShvLCBudWxsLCAyKSwgZXJyOiBudWxsIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgLyog0JrQvtC80LzQtdC90YLQsNGA0LjQuCDQsiDQvdCw0YfQsNC70LUg0LHQu9C-0LrQsCDQvtCx0YrRj9GB0L3Rj9GO0YIsINGH0YLQviDRjdGC0L4g0LfQsCDQutC-0LQuINCd0LUg0YLQtdGA0Y_QtdC8LiAqLwogIGZ1bmN0aW9uIGNvbW1lbnRzKGRvYykgewogICAgdmFyIG91dCA9IFtdOwogICAgdmFyIHcgPSBkb2MuY3JlYXRlVHJlZVdhbGtlcihkb2MuYm9keSwgMTI4IC8qIFNIT1dfQ09NTUVOVCAqLywgbnVsbCwgZmFsc2UpOwogICAgdmFyIG47CiAgICB3aGlsZSAoKG4gPSB3Lm5leHROb2RlKCkpKSB7CiAgICAgIHZhciB2ID0gbi5ub2RlVmFsdWUgfHwgJyc7CiAgICAgIGlmICh2LmluZGV4T2YoJ0FWQU5aQVRPLlJVJykgPiAtMSkgeyBvdXQucHVzaCgnPCEtLScgKyB2ICsgJy0tPicpOyBvdXQucHVzaCgnJyk7IGJyZWFrOyB9CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgcmV0dXJuIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChodG1sKSB7CiAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTsKCiAgICAgIHZhciBzY29wZSA9IGRvYy5nZXRFbGVtZW50QnlJZCgnYXZ6LXB0Jyk7CiAgICAgIHZhciBzdHlsZSA9IGFsbChkb2MsICdzdHlsZScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJy5hdnotc2NvcGUgLmNhcmQtc2hvdCcpID4gLTE7CiAgICAgIH0pWzBdOwogICAgICB2YXIgc2NyaXB0ID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3N5bmNGcm9tTGlzdGluZycpID4gLTE7CiAgICAgIH0pWzBdOwogICAgICB2YXIgZm9udExpbmsgPSBkb2MucXVlcnlTZWxlY3RvcignbGlua1tocmVmKj0iY3NzMj9mYW1pbHk9Il0nKTsKCiAgICAgIHZhciBtaXNzaW5nID0gW107CiAgICAgIGlmICghc2NvcGUpIG1pc3NpbmcucHVzaCgn0LHQu9C-0LogI2F2ei1wdCcpOwogICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICBpZiAoIXNjcmlwdCkgbWlzc2luZy5wdXNoKCc8c2NyaXB0PiDRgdC10YLQutC4Jyk7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICB2YXIgZ3JpZCA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3IoJyNwdC1ncmlkJyk7CiAgICAgIGlmICghZ3JpZCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiDRgdC10YLQutC4ICNwdC1ncmlkJyk7CgogICAgICBpZiAocmVidWlsdCkgZ3JpZC5pbm5lckhUTUwgPSAnXG4nICsgcmVidWlsdC5odG1sICsgJ1xuICAnOwogICAgICB2YXIgY291bnQgPSBncmlkLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jYXJkJykubGVuZ3RoOwoKICAgICAgd3JpdGVBbGwoc2NvcGUsIGQsIGNvdW50KTsKCiAgICAgIHZhciBzYyA9IHBhdGNoU2NyaXB0KHNjcmlwdC50ZXh0Q29udGVudCwgZCwgY291bnQpOwogICAgICB2YXIgbGQgPSBidWlsZExkKGRvYywgZCwgY291bnQsIHJlYnVpbHQgPyByZWJ1aWx0Lml0ZW1zIDogbnVsbCk7CiAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICB2YXIgdGV4dCA9IGNvbW1lbnRzKGRvYykuY29uY2F0KFsKICAgICAgICAvKiB2MiDCtyDRiNGA0LjRhNGC0Ysg0LLRiNC40YLRiyDQsiA8c3R5bGU-INCx0LvQvtC60LAgKEFWWiBKb3N0IC8gQVZaIFJ1YmlrKSDigJQgR29vZ2xlINC90LUg0L_QvtC00LrQu9GO0YfQsNC10LwgKi8KICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2kud2ZvbGlvLnJ1IiBjcm9zc29yaWdpbj4nLAogICAgICAgICcnLAogICAgICAgIHN0eWxlLm91dGVySFRNTCwKICAgICAgICAnJywKICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgJzxzY3JpcHQ-JywKICAgICAgICBzYy50ZXh0LAogICAgICAgICc8JyArICcvc2NyaXB0PicsCiAgICAgICAgJycsCiAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICBsZC50ZXh0LAogICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgXSkuam9pbignXG4nKTsKCiAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGNvdW50OiBjb3VudCwgbWlzc2VkOiBzYy5taXNzZWQgfTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwdC1vdXQnKTsKICAgIHRhLnZhbHVlID0gdGV4dDsKICAgIHRhLnNlbGVjdCgpOwogICAgdmFyIG9rID0gZmFsc2U7CiAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICB9CgogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enB0LWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICBhc3NlbWJsZShjb2xsZWN0KCkpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAvKiDQn9GA0L7QstC10YDRj9C10Lwg0KTQkNCa0KIsINCwINC90LUg0YHQvtCy0L_QsNC00LXQvdC40LUg0YEg0YHQvtCx0L7QuTog0YfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0L7QsdGP0LfQsNC90L4KICAgICAgICAg0YHRgtC-0Y_RgtGMINCyINC70LjQtNC1LCDQsiDQvtC_0LjRgdCw0L3QuNC4INCy0L3Rg9GC0YDQuCDRgdC60YDQuNC_0YLQsCDQuCDQsiDRgNCw0LfQvNC10YLQutC1LiDQoNCw0L3RjNGI0LUKICAgICAgICAg0L_QvtC00YHRgtCw0L3QvtCy0LrQsCDQvNC-0LPQu9CwINC80L7Qu9GH0LAg0L3QtSDRgdGA0LDQsdC-0YLQsNGC0YwgKNGE0L7RgNC80LAgwqvRgdGK0ZHQvNC-0LrCuyDQvdC1INGB0L7QstC_0LDQtNCw0LvQsAogICAgICAgICDRgSDQuNGB0LrQvtC80YvQvCDQutC-0YDQvdC10LwpLCDQuCDRh9C40YHQu9C-INC30LDRgdGC0YDQtdCy0LDQu9C-INC90LAg0YHRgtCw0YDQvtC8LiDQotC10L_QtdGA0Ywg0L_QsNC90LXQu9GMCiAgICAgICAgINGB0LzQvtGC0YDQuNGCINC90LAg0YDQtdC30YPQu9GM0YLQsNGCINC4INCz0L7QstC-0YDQuNGCLCDQtdGB0LvQuCDQutGD0LTQsC3RgtC-INC90LUg0LTQvtC70LXRgtC10LvQvi4gKi8KICAgICAgdmFyIGRvYzIgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgIHZhciBudW0gPSBTdHJpbmcocmVzLmNvdW50KTsKICAgICAgdmFyIGxlZGUyID0gZG9jMi5xdWVyeVNlbGVjdG9yKCcubGVkZScpOwogICAgICB2YXIgcGxhY2VzTG9zdCA9IFtdOwogICAgICBpZiAoIWxlZGUyIHx8IGxlZGUyLnRleHRDb250ZW50LmluZGV4T2YobnVtKSA8IDApIHBsYWNlc0xvc3QucHVzaCgn0LvQuNC0Jyk7CiAgICAgIGlmIChyZXMudGV4dC5pbmRleE9mKCJ2YXIgZGVzYyA9ICciKSA-IC0xKSB7CiAgICAgICAgdmFyIGRlc2NMaW5lID0gcmVzLnRleHQuc2xpY2UocmVzLnRleHQuaW5kZXhPZigidmFyIGRlc2MgPSAnIiksIHJlcy50ZXh0LmluZGV4T2YoInZhciBkZXNjID0gJyIpICsgNDAwKTsKICAgICAgICBpZiAoZGVzY0xpbmUuaW5kZXhPZihudW0pIDwgMCkgcGxhY2VzTG9zdC5wdXNoKCfQvtC_0LjRgdCw0L3QuNC1INCyINGB0LrRgNC40L_RgtC1Jyk7CiAgICAgIH0KICAgICAgdmFyIGxkTm9kZSA9IGRvYzIucXVlcnlTZWxlY3Rvcignc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpOwogICAgICBpZiAoIWxkTm9kZSB8fCBsZE5vZGUudGV4dENvbnRlbnQuaW5kZXhPZignIm51bWJlck9mSXRlbXMiOiAnICsgbnVtKSA8IDApIHBsYWNlc0xvc3QucHVzaCgn0YDQsNC30LzQtdGC0LrQsCcpOwoKICAgICAgdmFyIG5vdGUgPSAn0KHQutC-0L_QuNGA0L7QstCw0L0g0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YbQtdC70LjQutC-0LwgKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiAvcG9ydHJhaXQtcGhvdG9zZXNzaW9uINC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLiAnICsKICAgICAgICAn0KHRitGR0LzQvtC6OiAnICsgcmVzLmNvdW50ICsKICAgICAgICAocGxhY2VzTG9zdC5sZW5ndGggPyAnJyA6ICcg4oCUINGH0LjRgdC70L4g0L_RgNC-0YHRgtCw0LLQu9C10L3QviDQsiDQu9C40LQsINC80LXRgtCwLdC-0L_QuNGB0LDQvdC40LUg0Lgg0YDQsNC30LzQtdGC0LrRgy4nKTsKICAgICAgaWYgKHJlcy5taXNzZWQubGVuZ3RoKSBub3RlICs9ICcg0JLQndCY0JzQkNCd0JjQlSwg0L3QtSDQvdCw0LnQtNC10L3QviDQsiDRgdC60YDQuNC_0YLQtTogJyArIHJlcy5taXNzZWQuam9pbignLCAnKSArICcuJzsKICAgICAgaWYgKHBsYWNlc0xvc3QubGVuZ3RoKSB7CiAgICAgICAgbm90ZSArPSAnINCS0J3QmNCc0JDQndCY0JU6INGH0LjRgdC70L4gJyArIG51bSArICcg0J3QlSDQv9C-0L_QsNC70L4g0YHRjtC00LAg4oCUICcgKyBwbGFjZXNMb3N0LmpvaW4oJywgJykgKwogICAgICAgICAgJy4g0J_RgNC-0LLQtdGA0YzRgtC1INGC0LXQutGB0YIg0LIg0Y3RgtC40YUg0L_QvtC70Y_RhTog0YHQutC-0YDQtdC1INCy0YHQtdCz0L4g0YLQsNC8INGB0YLQvtC40YIg0LTRgNGD0LPQvtC1INGH0LjRgdC70L4uJzsKICAgICAgfQogICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRgdC-0LHRgNCw0L3QvjogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enB0LXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgbXNnKCfQn9GA0L7QstC10YDRj9GO4oCmJyk7CiAgICB2YXIga2VlcCA9IHJlYnVpbHQ7CiAgICByZWJ1aWx0ID0gbnVsbDsgLyog0L_RgNC-0LLQtdGA0Y_QtdC8INGC0L7Qu9GM0LrQviDRgtC10LrRgdGC0YssINGB0LXRgtC60YMg0L3QtSDRgtGA0L7Qs9Cw0LXQvCAqLwogICAgYXNzZW1ibGUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgIHJlYnVpbHQgPSBrZWVwOwogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5nZXRFbGVtZW50QnlJZCgnYXZ6LXB0JykpOwogICAgICB2YXIgc2MgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignc3luY0Zyb21MaXN0aW5nJykgPiAtMTsKICAgICAgfSlbMF07CiAgICAgIGlmIChzYykgcmVhZFNjcmlwdEJpdHMoc2MudGV4dENvbnRlbnQsIGFnYWluKTsKICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJylbMF07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgICAgIHZhciBmID0gKG9bJ0BncmFwaCddIHx8IFtdKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJzsgfSlbMF07CiAgICAgICAgICBmLm1haW5FbnRpdHkuZm9yRWFjaChmdW5jdGlvbiAocSwgaSkgewogICAgICAgICAgICBpZiAoYWdhaW4uZmFxW2ldKSBhZ2Fpbi5mYXFbaV0uc2NoZW1hQSA9IHEuYWNjZXB0ZWRBbnN3ZXIudGV4dDsKICAgICAgICAgIH0pOwogICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgIH0pKCk7CgogICAgICAvKiDRh9C40YHQu9C-INGB0YrRkdC80L7QuiDQv9Cw0L3QtdC70Ywg0YfQuNC90LjRgiDQvdCw0LzQtdGA0LXQvdC90L4g4oCUINGB0LLQtdGA0Y_QtdC8INGBINGD0LbQtSDQuNGB0L_RgNCw0LLQu9C10L3QvdGL0LwgKi8KICAgICAgdmFyIGV4cGVjdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGV4cGVjdC5sZWRlID0gd2l0aENvdW50KGV4cGVjdC5sZWRlLCByZXMuY291bnQpOwogICAgICBleHBlY3QubWV0YS5kZXNjID0gd2l0aENvdW50KGV4cGVjdC5tZXRhLmRlc2MsIHJlcy5jb3VudCk7CgogICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgIGlmIChhID09PSBiKSB7CiAgICAgICAgbXNnKCfQodGF0L7QtNC40YLRgdGPOiDRgdCx0L7RgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QuiDQtNCw0ZHRgiDRgtC1INC20LUg0LfQvdCw0YfQtdC90LjRjyAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7Qsiwg0YHRitGR0LzQvtC6ICcgKyByZXMuY291bnQgKyAnKS4nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INC-0LbQuNC00LDQu9C-0YHRjCcsIEpTT04ucGFyc2UoYSkpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQv9C-0LvRg9GH0LjQu9C-0YHRjCcsIEpTT04ucGFyc2UoYikpOwogICAgICB9CiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyByZWJ1aWx0ID0ga2VlcDsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgfTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0L_QvtGA0YLRgNC10YLQvtCyINC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJwcmljZSIsdGl0bGU6ItCf0LDQvdC10LvRjCDRgdGC0YDQsNC90LjRhtGLINGG0LXQvSIsc2hvcnQ6ItCm0LXQvdGLIixoaW50OiLRhtC10L3Riywg0L_QsNC60LXRgtGLLCDRgtC10LrRgdGC0Ysg0LrQsNGA0YLQvtGH0LXQuiwg0LrQvdC-0L_QutC4IixwYWdlczpbIi9wcmljZSJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQodCi0KDQkNCd0JjQptCrINCm0JXQnSAgdjMg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsAogICB2MyAoMjAyNi0xMC0yMyk6INC_0L7QtCDQv9GA0LDQudGBIHYzIMKr0LbRg9GA0L3QsNC7wrsuINCo0YDQuNGE0YLRiyDQuCDQt9C90LDRh9C60Lgg0LLRiNC40YLRiyDQsiDRgdCw0LwKICAg0LHQu9C-0LogKEBmb250LWZhY2Ug0LIgPHN0eWxlPiwgU1ZHLdC30L3QsNGH0LrQuCDQsiDRgdC60YDQuNC_0YLQtSDQstC60LvQsNC00L7QuiksINC_0L7RjdGC0L7QvNGDCiAgINC_0LDQvdC10LvRjCDQsdC-0LvRjNGI0LUg0J3QlSDQtNC-0LHQsNCy0LvRj9C10YIg0YHRgdGL0LvQutC4INC90LAgR29vZ2xlIEZvbnRzINC4IE1hdGVyaWFsIFN5bWJvbHMg4oCUCiAgINGB0YLRgNCw0L3QuNGG0LAg0LTQvtC70LbQvdCwINC-0YLQutGA0YvQstCw0YLRjNGB0Y8g0LIg0KDQvtGB0YHQuNC4INCx0LXQtyDQvdC40YUuINCh0YLQsNGA0YvQuSB2MiDigJQg0LIgX2FyY2hpdmUuCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCBodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlCgogICDQndC40YfQtdCz0L4g0L3QtSDQv9GD0LHQu9C40LrRg9C10YIg0Lgg0L3QtSDQvNC10L3Rj9C10YIg0LbQuNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDLiDQp9C40YLQsNC10YIg0LjRgdGF0L7QtNC90YvQuQogICBIVE1MINGB0YLRgNCw0L3QuNGG0YssINC_0L7QtNGB0YLQsNCy0LvRj9C10YIg0LfQvdCw0YfQtdC90LjRjyDQuNC3INGE0L7RgNC80Ysg0Lgg0LLRi9C00LDRkdGCINC00LLQsCDQutGD0YHQutCwCiAgINC00LvRjyDQstGB0YLQsNCy0LrQuCDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRizoKCiAgICAgMS4g0LHQu9C-0LogPGRpdiBjbGFzcz0iYXYtcHJpY2VzIj4g4oCmIDwvZGl2PiDigJQg0YLQviwg0YfRgtC-INCy0LjQtNC40YIg0YfQtdC70L7QstC10LoKICAgICAyLiDRgdC-0LTQtdGA0LbQuNC80L7QtSA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPiDigJQg0YLQviwg0YfRgtC-INCy0LjQtNGP0YIKICAgICAgICDQv9C-0LjRgdC60L7QstC40LrQuCDQuCDQutGA0LDRg9C70LXRgNGLINCY0JgKCiAgINCf0L7Rh9C10LzRgyDRgdGC0LDRgtC40LrQvtC5LCDQsCDQvdC1INC60L7QvdGE0LjQs9C-0Lw6INGG0LXQvdGLINC80LXQvdGP0Y7RgtGB0Y8g0YDQsNC3INCyINCz0L7QtCwg0L3QviDQuNGFCiAgINC00L7Qu9C20L3RiyDQstC40LTQtdGC0Ywg0LLRgdC1LCDQstC60LvRjtGH0LDRjyDQutGA0LDRg9C70LXRgNGLINCY0JgsINC60L7RgtC-0YDRi9C1INC90LUg0LLRi9C_0L7Qu9C90Y_RjtGCIEpTLgogICDQmtC-0L3RhNC40LMg0YEg0LTQstC40LbQutC-0Lwg0L7RgdGC0LDQstC70Y_QuyDQsdGLINCyINC40YHRhdC-0LTQvdC-0Lwg0LrQvtC00LUg0YHRgtCw0YDRi9C1INGH0LjRgdC70LAuCgogICDQoNCw0LfQvNC10YLQutGDINCx0LXRgNGR0Lwg0L3QtSDQuNC3INC20LjQstC-0LPQviBET00sINCwINC40Lcg0YHQstC10LbQtdC30LDQs9GA0YPQttC10L3QvdC-0LPQviDQuNGB0YXQvtC00L3QuNC60LAKICAg0YHRgtGA0LDQvdC40YbRiyDigJQg0YLQsNC6INC90LAg0YDQtdC30YPQu9GM0YLQsNGCINC90LUg0LLQu9C40Y_QtdGCINC90LjRh9C10LPQviwg0YfRgtC-INGD0LbQtSDQvtGC0YDQsNCx0L7RgtCw0LvQvgogICDQsiDQsdGA0LDRg9C30LXRgNC1LgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qINCh0YHRi9C70LrQuCDQvdCwINGI0YDQuNGE0YLRiyDQsdC70L7QutCwIOKAlCDQutC-0L3RgdGC0LDQvdGC0YssINCwINC90LUg0YLQviwg0YfRgtC-INC90LDRiNC70L7RgdGMINC90LAg0YHRgtGA0LDQvdC40YbQtS4KICAgICDQoyDRgtC10LzRiyB3Zm9saW8g0YHQstC-0Y8g0YHRgdGL0LvQutCwINC90LAgSm9zdC9SdWJpaywg0Lgg0LIg0LTQvtC60YPQvNC10L3RgtC1INC-0L3QsCDQuNC00ZHRgiDQoNCQ0J3QrNCo0JUKICAgICDQvdCw0YjQtdC5OiDQv9Cw0L3QtdC70Ywg0LHRgNCw0LvQsCDQv9C10YDQstGD0Y4g0Lgg0L_QvtC00LzQtdC90Y_Qu9CwINC90LDRh9C10YDRgtCw0L3QuNGPINCx0LvQvtC60LAg0L3QsCDRgtC10LzQuNC90YsuCiAgICAg0JfQtNC10YHRjCDRjdGC0L4g0YPQttC1INC_0YDQvtC40LfQvtGI0LvQviDigJQg0LIg0LHQu9C-0LrQtSAvcHJpY2Ug0YHRgtC-0Y_Qu9C4INGC0LXQvNC40L3RiyDQstC10YHQsCAzMDAuLjYwMCwKICAgICDRhdC-0YLRjyBDU1Mg0L_RgNC-0YHQuNGCIDEwMC4uNTAwINC4INC60YPRgNGB0LjQsiBSdWJpay4g0JTQtdGA0LbQuNC8INC90LDQsdC-0YAg0LfQtNC10YHRjC4gKi8KICB2YXIgQVZaX0ZPTlRfTElOS1MgPSBbCiAgICAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMTAwOzIwMDszMDA7NDAwOzUwMDs2MDAnICsKICAgICAgJyZhbXA7ZmFtaWx5PVJ1YmlrOml0YWwsd2dodEAwLDEwMDswLDIwMDswLDMwMDswLDQwMDsxLDEwMDsxLDIwMCcgKwogICAgICAnJmFtcDtkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI-JywKICAgIC8qINGI0YDQuNGE0YIg0LfQvdCw0YfQutC-0LI6INC-0YHRjCBGSUxMINC90YPQttC90LAg0LrQu9Cw0YHRgdGDIC5pY29uLWZpbGxlZCwgZGlzcGxheT1ibG9jayDQs9Cw0YHQuNGCINC80LjQs9Cw0L3QuNC1ICovCiAgICAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT0nICsKICAgICAgJ01hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREAyMC4uNDgsMTAwLi43MDAsMC4uMSwtNTAuLjIwMCcgKwogICAgICAnJmFtcDtkaXNwbGF5PWJsb2NrIiByZWw9InN0eWxlc2hlZXQiPicKICBdOwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuSDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUCiAgICAg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQuiDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4CiAgICAg0LLQtdGA0LjRgtGMLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDRjdGC0Lgg0YPQt9C70Ysg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAzMCDQvtC60YLRj9Cx0YDRjyAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTktMDEtMDEiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogIjE0OTAwLTU0OTAwIiwKICAgICAgIm9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iLAogICAgICAgICAgImRheU9mV2VlayI6IFsKICAgICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAgICJUdWVzZGF5IiwKICAgICAgICAgICAgIldlZG5lc2RheSIsCiAgICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAgICJGcmlkYXkiLAogICAgICAgICAgICAiU2F0dXJkYXkiLAogICAgICAgICAgICAiU3VuZGF5IgogICAgICAgICAgXSwKICAgICAgICAgICJvcGVucyI6ICIxMDowMCIsCiAgICAgICAgICAiY2xvc2VzIjogIjIwOjAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIGZ1bmN0aW9uIHN5bmNDYW5vbihncmFwaCkgewogICAgaWYgKCFncmFwaCB8fCAhZ3JhcGgubGVuZ3RoKSByZXR1cm4gW107CiAgICB2YXIgZG9uZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaWQgPSBncmFwaFtpXSAmJiBncmFwaFtpXVsnQGlkJ107CiAgICAgIGlmIChpZCAmJiBBVlpfQ0FOT05baWRdKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdyYXBoW2ldKSAhPT0gSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpIHsKICAgICAgICAgIGRvbmUucHVzaChTdHJpbmcoaWQpLnNwbGl0KCcjJylbMV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFtpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZhciBvbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6cHItcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXYtcHJpY2VzJyk7CiAgaWYgKCFyb290KSB7IGFsZXJ0KCdBVlo6INC90LAg0Y3RgtC-0Lkg0YHRgtGA0LDQvdC40YbQtSDQvdC10YIg0LHQu9C-0LrQsCDRhtC10L0gKC5hdi1wcmljZXMpJyk7IHJldHVybjsgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSDRgNCw0LfQvNC10YLQutC4IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KCiAgLyog0YLQtdC60YHRgiDQsdC10Lcg0LLQu9C-0LbQtdC90L3Ri9GFINGN0LvQtdC80LXQvdGC0L7QsiDigJQg0YLQvtC70YzQutC-INGB0L7QsdGB0YLQstC10L3QvdGL0LUg0YLQtdC60YHRgtC-0LLRi9C1INGD0LfQu9GLLgogICAgINC90YPQttC10L0g0YLQsNC8LCDQs9C00LUg0YDRj9C00L7QvCDQu9C10LbQuNGCINC40LrQvtC90LrQsCDQuNC70Lgg0LfQvdCw0YfQvtC6INCy0LDQu9GO0YLRiyAqLwogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQoKICBmdW5jdGlvbiByZWFkQ2FyZChlbCkgewogICAgdmFyIGl0ZW1zID0gYWxsKGVsLCAnLnBjLWxpc3QgbGknKS5tYXAoZnVuY3Rpb24gKGxpKSB7CiAgICAgIHZhciBzcGFucyA9IGFsbChsaSwgJ3NwYW4nKS5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMuY2xhc3NOYW1lLmluZGV4T2YoJ2ljb24nKSA9PT0gLTE7IH0pOwogICAgICByZXR1cm4gdChzcGFuc1tzcGFucy5sZW5ndGggLSAxXSk7CiAgICB9KTsKICAgIHZhciBub3RlID0gYWxsKGVsLCAnLnBjLW5vdGUgc3BhbicpOwogICAgdmFyIGJ0biA9IG9uZShlbCwgJy5idG4tY2FyZCcpOwogICAgdmFyIGJ0blNwYW5zID0gYnRuID8gYWxsKGJ0biwgJ3NwYW4nKS5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMuY2xhc3NOYW1lLmluZGV4T2YoJ2ljb24nKSA9PT0gLTE7IH0pIDogW107CgogICAgcmV0dXJuIHsKICAgICAgbmFtZTogdChvbmUoZWwsICcucGMtbmFtZScpKSwKICAgICAgdGFnOiB0KG9uZShlbCwgJy5wYy10YWcgLm51bScpKSwKICAgICAgcHJpY2U6IG93blRleHQob25lKGVsLCAnLnBjLXByaWNlJykpLAogICAgICBzdWI6IHQob25lKGVsLCAnLnBjLXByaWNlLXN1YicpKSwKICAgICAgcG9wOiB0KG9uZShlbCwgJy5wYy1wb3AnKSksCiAgICAgIGJhZGdlOiBvd25UZXh0KG9uZShlbCwgJy5sb2dpc3RpY3MtYmFkZ2UnKSksCiAgICAgIGl0ZW1zOiBpdGVtcywKICAgICAgbm90ZTogbm90ZS5sZW5ndGggPyB7IGxhYmVsOiB0KG5vdGVbMF0pLCB2YWx1ZTogdChub3RlWzFdKSB9IDogbnVsbCwKICAgICAgYnRuOiBidG4gPyB7IHRleHQ6IHQoYnRuU3BhbnNbMF0pLCBocmVmOiBidG4uZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycgfSA6IG51bGwKICAgIH07CiAgfQoKICBmdW5jdGlvbiByZWFkUGFuZWwoaWQpIHsKICAgIHZhciBwID0gb25lKHJvb3QsICcjYXYtcGFuZWwtJyArIGlkKTsKICAgIGlmICghcCkgcmV0dXJuIG51bGw7CiAgICB2YXIgbGIgPSBvbmUocCwgJy5sb2dpc3RpY3MtYmFubmVyJyk7CiAgICByZXR1cm4gewogICAgICBzZWN0aW9uczogYWxsKHAsICcuc2VjdGlvbi1sYWJlbCcpLm1hcChmdW5jdGlvbiAocykgewogICAgICAgIHJldHVybiB7IHRpdGxlOiB0KG9uZShzLCAnaDInKSksIGFzaWRlOiBvd25UZXh0KG9uZShzLCAnLnNsLWFzaWRlJykpIH07CiAgICAgIH0pLAogICAgICBjYXJkczogYWxsKHAsICcucHJpY2UtY2FyZCcpLm1hcChyZWFkQ2FyZCksCiAgICAgIGxvZ2lzdGljczogbGIgPyB7CiAgICAgICAgdGl0bGU6IHQob25lKGxiLCAnaDQnKSksCiAgICAgICAgdGV4dDogdChvbmUobGIsICdwJykpLAogICAgICAgIHN0YXROdW06IHQob25lKGxiLCAnLmxiLXN0YXQtbnVtJykpLAogICAgICAgIHN0YXRMYWJlbDogdChvbmUobGIsICcubGItc3RhdC1sYmwnKSkKICAgICAgfSA6IG51bGwKICAgIH07CiAgfQoKICB2YXIgY2ZnID0gewogICAgdmVyc2lvbjogMSwKICAgIGhlcm86IHsKICAgICAgZXllYnJvdzogdChvbmUocm9vdCwgJy5oZXJvLWV5ZWJyb3cnKSksCiAgICAgIGxpbmVzOiBhbGwocm9vdCwgJy5oZXJvLXRpdGxlLWlubmVyJykubWFwKGZ1bmN0aW9uIChlbCkgewogICAgICAgIHZhciBlbSA9IG9uZShlbCwgJ2VtJyk7CiAgICAgICAgcmV0dXJuIHQoZW0gfHwgZWwpOwogICAgICB9KQogICAgfSwKICAgIHRhYnNIZWFkOiB7CiAgICAgIGxhYmVsOiB0KG9uZShyb290LCAnLnRhYnMtaGVhZCAuaC1sYWJlbCcpKSwKICAgICAgaGludDogb3duVGV4dChvbmUocm9vdCwgJy50YWJzLWhlYWQgLmgtaGludCcpKQogICAgfSwKICAgIHRhYnM6IGFsbChyb290LCAnLnRhYnMtdWkgLmNoaXAnKS5tYXAoZnVuY3Rpb24gKGNoKSB7CiAgICAgIHZhciBtZXRhID0gYWxsKGNoLCAnLmNoaXAtbWV0YSA-IHNwYW4nKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBudW06IHQob25lKGNoLCAnLmNoaXAtbnVtJykpLAogICAgICAgIG5hbWU6IHQob25lKGNoLCAnLmNoaXAtbmFtZScpKSwKICAgICAgICBwaW46IG93blRleHQobWV0YVswXSksCiAgICAgICAgbWV0YTogdChtZXRhWzFdKQogICAgICB9OwogICAgfSksCiAgICBrem46IHJlYWRQYW5lbCgna3puJyksCiAgICBtc2s6IHJlYWRQYW5lbCgnbXNrJykKICB9OwoKICAvKiDQuNGB0YXQvtC00L3Ri9C1INC30L3QsNGH0LXQvdC40Y8g4oCUINC90YPQttC90YssINGH0YLQvtCx0Ysg0L_QvtC90Y_RgtGMLCDQutCw0LrQuNC1INGG0LXQvdGLINC40LfQvNC10L3QuNC70LjRgdGMLAogICAgINC4INC_0L7QtNGB0YLQsNCy0LjRgtGMINC40YUg0LIg0YDQsNC30LzQtdGC0LrRgyDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7QsiAqLwogIHZhciBPUklHID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKCiAgLyogLS0tLS0tLS0tLSDRhNC-0YDQvNCwIC0tLS0tLS0tLS0gKi8KCiAgdmFyIGNzcyA9IFsKICAgIC8qINCi0LXQvNCwIHdmb2xpbyDQutGA0LDRgdC40YIg0L_QvtC70Y8g0Lgg0YLQtdC60YHRgiDQv9C-0LQg0YHQtdCx0Y8g4oCUINC_0LDQvdC10LvRjCDQv9GA0LjRhdC-0LTQuNGC0YHRjwogICAgICAg0LfQsNGJ0LjRidCw0YLRjCDQsiDQu9C-0LEuINCR0LXQtyDRjdGC0L7Qs9C-INC_0L7Qu9GPINCx0LXQu9GL0LUg0L3QsCDQsdC10LvQvtC8OiDQt9C90LDRh9C10L3QuNGPINC10YHRgtGMLAogICAgICAg0L3QviDQuNGFINC90LUg0LLQuNC00L3Qvi4gKi8KICAgICcjYXZ6cHItcm9vdCwjYXZ6cHItcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2enByLXJvb3QgaW5wdXQsI2F2enByLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnpwci1yb290IGJ1dHRvbntmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2enByLXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmfScsCiAgICAnI2F2enByLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbigxMDQwcHgsMTAwJSk7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCk7JywKICAgICdkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjQpfScsCiAgICAnI2F2enByLWhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU3fScsCiAgICAnI2F2enByLWhlYWQgYntmb250LXdlaWdodDo1MDB9JywKICAgICcjYXZ6cHItYm9keXtvdmVyZmxvdzphdXRvO3BhZGRpbmc6MTZweCAyMHB4O2ZsZXg6MX0nLAogICAgJyNhdnpwci1mb290e2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTc7cGFkZGluZzoxNHB4IDIwcHg7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJy5hdnpwci1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU3O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tYm90dG9tOjEycHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnLmF2enByLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2JhY2tncm91bmQ6I2Y3ZjZmMztjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo1MDA7bGlzdC1zdHlsZTpub25lfScsCiAgICAnLmF2enByLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJy5hdnpwci1pbntwYWRkaW5nOjE0cHh9JywKICAgICcuYXZ6cHItZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6cHItcm9vdCAuYXZ6cHItZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJy5hdnpwci1mIGlucHV0LC5hdnpwci1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJy5hdnpwci1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnLmF2enByLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU3O2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEwcHh9JywKICAgICcjYXZ6cHItcm9vdCAuYXZ6cHItY2FyZD5oNHtmb250LXNpemU6MTJweDtsZXR0ZXItc3BhY2luZzouMTRlbSAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSAhaW1wb3J0YW50O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC13ZWlnaHQ6NTAwfScsCiAgICAnI2F2enByLW91dHt3aWR0aDoxMDAlO2hlaWdodDo5NnB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbi10b3A6MTBweH0nLAogICAgJyNhdnpwci1yb290ICNhdnpwci1tc2d7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2enByLXJvb3QgLmF2enByLWJ0bntwYWRkaW5nOjEwcHggMTZweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnQ7Zm9udDppbmhlcml0O2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enByLXJvb3QgLmF2enByLWJ0bi5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgI2QyZDJkN30nLAogICAgJy5hdnpwci13YXJue2JhY2tncm91bmQ6I2ZmZjRlNTtib3JkZXI6MXB4IHNvbGlkICNmZmQ4YTg7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDEycHg7Zm9udC1zaXplOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpey5hdnpwci1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6cHItd2lue2JvcmRlci1yYWRpdXM6MDttYXgtaGVpZ2h0OjEwMHZofX0nCiAgXS5qb2luKCcnKTsKCiAgdmFyIGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGJveC5pZCA9ICdhdnpwci1yb290JzsKICBib3guaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-JyArCiAgICAnPGRpdiBpZD0iYXZ6cHItd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enByLWhlYWQiPjxiPtCf0LDQvdC10LvRjCDRgdGC0YDQsNC90LjRhtGLINGG0LXQvTwvYj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enByLWJ0biBnaG9zdCIgaWQ9ImF2enByLWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6cHItYm9keSI-PGRpdiBjbGFzcz0iYXZ6cHItd2FybiI-0JrQvdC-0L_QutCwINCy0L3QuNC30YMg0YHQvtCx0LjRgNCw0LXRgiA8Yj7QstC10YHRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYj4gJyArCiAgICAgICfRgSDQvdC-0LLRi9C80Lgg0LfQvdCw0YfQtdC90LjRj9C80Lgg4oCUINCy0LzQtdGB0YLQtSDRgdC-INGB0YLQuNC70Y_QvNC4LCDRgdC60YDQuNC_0YLQvtC8INCy0LrQu9Cw0LTQvtC6INC4INGA0LDQt9C80LXRgtC60L7QuSDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi4gJyArCiAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDRgdC-0LTQtdGA0LbQuNC80L7QtSBIVE1MLdCx0LvQvtC60LAgL3ByaWNlINGG0LXQu9C40LrQvtC8INC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLjwvZGl2PjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6cHItZm9vdCI-JyArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2enByLWJ0biIgaWQ9ImF2enByLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgICAgICc8c3BhbiBpZD0iYXZ6cHItbXNnIj48L3NwYW4-JyArCiAgICAgICAgJzx0ZXh0YXJlYSBpZD0iYXZ6cHItb3V0IiBwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDQtNC70Y8g0LLRgdGC0LDQstC60LgiPjwvdGV4dGFyZWE-JyArCiAgICAgICc8L2Rpdj4nICsKICAgICc8L2Rpdj4nOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYm94KTsKCiAgLyogLS0tLS0tLS0tLSDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70YsgLS0tLS0tLS0tLQogICAgINCg0LXQtNCw0LrRgtC-0YAgd2ZvbGlvINC4INC10LPQviDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQstGB0YLQsNCy0LvRj9GO0YIg0LIg0LTQu9C40L3QvdGL0LUKICAgICDRgdGC0YDQvtC60LggwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IOKAlCBVKzIwMEIg0Lgg0YDQvtC00L3Rjy4g0J3QsCDRjdC60YDQsNC90LUg0LjRhSDQvdC1INCy0LjQtNC90L4sCiAgICAg0LAg0LIg0LDQtNGA0LXRgdC1INGE0LDQudC70LAg0L7QvdC4INC70L7QvNCw0Y7RgiDRgdGB0YvQu9C60YM6INCx0YDQsNGD0LfQtdGAINC-0YLQstC10YfQsNC10YIgwqtGb3JtYXQgZXJyb3LCuywKICAgICDQutCw0YDRgtC40L3QutCwINC40LvQuCDQstC40LTQtdC-INC90LUg0LPRgNGD0LfRj9GC0YHRjy4g0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjAogICAgINC90LXRh9C10LPQviwg0L_QvtGN0YLQvtC80YMg0LLRi9GH0LjRidCw0LXQvCDQuNGFINC4INC_0YDQuCDQstCy0L7QtNC1LCDQuCDRgdC_0LvQvtGI0L3Ri9C8INC_0YDQvtGF0L7QtNC-0Lwg0L_QtdGA0LXQtAogICAgINGB0LHQvtGA0LrQvtC5IOKAlCDQt9C90LDRh9C10L3QuNC1INC80L7Qs9C70L4g0L_QvtC_0LDRgdGC0Ywg0LIg0L_QvtC70LUg0LzQuNC80L4g0YHQvtCx0YvRgtC40Lkg0LLQstC-0LTQsC4gKi8KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIFpXID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwogICAgZnVuY3Rpb24gc2NydWIoZWwpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gMDsKICAgICAgdmFyIHYgPSBlbC52YWx1ZS5yZXBsYWNlKFpXLCAnJyk7CiAgICAgIGlmICh2ID09PSBlbC52YWx1ZSkgcmV0dXJuIDA7CiAgICAgIGVsLnZhbHVlID0gdjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBib3guYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgYm94LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICBib3guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBlbHMgPSBib3gucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCgogIHZhciBib2R5ID0gYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwci1ib2R5Jyk7CiAgdmFyIGZpZWxkcyA9IFtdOyAgIC8qIHtwYXRoLCBpbnB1dH0gKi8KCiAgZnVuY3Rpb24gZ2V0KHBhdGgpIHsKICAgIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobywgaykgeyByZXR1cm4gKG8gPT0gbnVsbCkgPyBvIDogb1trXTsgfSwgY2ZnKTsKICB9CiAgZnVuY3Rpb24gc2V0KHBhdGgsIHYpIHsKICAgIHZhciBvID0gY2ZnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGF0aFtpXV07CiAgICBvW3BhdGhbcGF0aC5sZW5ndGggLSAxXV0gPSB2OwogIH0KCiAgZnVuY3Rpb24gZmllbGQocGFyZW50LCBsYWJlbCwgcGF0aCwgbXVsdGlsaW5lKSB7CiAgICB2YXIgdiA9IGdldChwYXRoKTsKICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgIHZhciB3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB3LmNsYXNzTmFtZSA9ICdhdnpwci1mJzsKICAgIHZhciBpZCA9ICdmJyArIGZpZWxkcy5sZW5ndGg7CiAgICB3LmlubmVySFRNTCA9ICc8bGFiZWwgZm9yPSInICsgaWQgKyAnIj4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsKICAgICAgKG11bHRpbGluZSA_ICc8dGV4dGFyZWEgaWQ9IicgKyBpZCArICciIHJvd3M9IjIiPjwvdGV4dGFyZWE-JwogICAgICAgICAgICAgICAgIDogJzxpbnB1dCBpZD0iJyArIGlkICsgJyIgdHlwZT0idGV4dCI-Jyk7CiAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodyk7CiAgICB2YXIgaW5wdXQgPSB3LnF1ZXJ5U2VsZWN0b3IoJyMnICsgaWQpOwogICAgaW5wdXQudmFsdWUgPSB2OwogICAgZmllbGRzLnB1c2goeyBwYXRoOiBwYXRoLCBpbnB1dDogaW5wdXQgfSk7CiAgfQoKICBmdW5jdGlvbiBzZWN0aW9uKHRpdGxlLCBvcGVuKSB7CiAgICB2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RldGFpbHMnKTsKICAgIGQuY2xhc3NOYW1lID0gJ2F2enByLXNlYyc7CiAgICBpZiAob3BlbikgZC5vcGVuID0gdHJ1ZTsKICAgIGQuaW5uZXJIVE1MID0gJzxzdW1tYXJ5PicgKyB0aXRsZSArICc8L3N1bW1hcnk-JzsKICAgIHZhciBpbm5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgaW5uZXIuY2xhc3NOYW1lID0gJ2F2enByLWluJzsKICAgIGQuYXBwZW5kQ2hpbGQoaW5uZXIpOwogICAgYm9keS5hcHBlbmRDaGlsZChkKTsKICAgIHJldHVybiBpbm5lcjsKICB9CgogIGZ1bmN0aW9uIHJvdyhwYXJlbnQpIHsKICAgIHZhciByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICByLmNsYXNzTmFtZSA9ICdhdnpwci1yb3cnOwogICAgcGFyZW50LmFwcGVuZENoaWxkKHIpOwogICAgcmV0dXJuIHI7CiAgfQoKICAvKiAtLS0tLS0tLS0tINGI0LDQv9C60LAg0Lgg0LLQutC70LDQtNC60LggLS0tLS0tLS0tLSAqLwogIHZhciBzID0gc2VjdGlvbign0KjQsNC_0LrQsCDQuCDQstC60LvQsNC00LrQuCcsIHRydWUpOwogIGZpZWxkKHMsICfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCBbJ2hlcm8nLCAnZXllYnJvdyddKTsKICBjZmcuaGVyby5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChfLCBpKSB7CiAgICBmaWVsZChzLCAn0JfQsNCz0L7Qu9C-0LLQvtC6LCDRgdGC0YDQvtC60LAgJyArIChpICsgMSksIFsnaGVybycsICdsaW5lcycsIGldKTsKICB9KTsKICB2YXIgcjAgPSByb3cocyk7CiAgZmllbGQocjAsICfQn9C-0LTQv9C40YHRjCDQvdCw0LQg0LLQutC70LDQtNC60LDQvNC4JywgWyd0YWJzSGVhZCcsICdsYWJlbCddKTsKICBmaWVsZChyMCwgJ9Cf0L7QtNGB0LrQsNC30LrQsCDRgdC_0YDQsNCy0LAnLCBbJ3RhYnNIZWFkJywgJ2hpbnQnXSk7CiAgY2ZnLnRhYnMuZm9yRWFjaChmdW5jdGlvbiAodGFiLCBpKSB7CiAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgYy5jbGFzc05hbWUgPSAnYXZ6cHItY2FyZCc7CiAgICBjLmlubmVySFRNTCA9ICc8aDQ-0JLQutC70LDQtNC60LAgJyArIChpICsgMSkgKyAnPC9oND4nOwogICAgcy5hcHBlbmRDaGlsZChjKTsKICAgIHZhciByID0gcm93KGMpOwogICAgZmllbGQociwgJ9Cd0L7QvNC10YAnLCBbJ3RhYnMnLCBpLCAnbnVtJ10pOwogICAgZmllbGQociwgJ9CT0L7RgNC-0LQnLCBbJ3RhYnMnLCBpLCAnbmFtZSddKTsKICAgIHZhciByMiA9IHJvdyhjKTsKICAgIGZpZWxkKHIyLCAn0JrQvtC0INCz0L7RgNC-0LTQsCcsIFsndGFicycsIGksICdwaW4nXSk7CiAgICBmaWVsZChyMiwgJ9Cf0L7QtNC_0LjRgdGMJywgWyd0YWJzJywgaSwgJ21ldGEnXSk7CiAgfSk7CgogIC8qIC0tLS0tLS0tLS0g0L_QsNC90LXQu9C4INCz0L7RgNC-0LTQvtCyIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiBwYW5lbFVJKGtleSwgdGl0bGUpIHsKICAgIHZhciBkYXRhID0gY2ZnW2tleV07CiAgICBpZiAoIWRhdGEpIHJldHVybjsKICAgIHZhciBzZWMgPSBzZWN0aW9uKHRpdGxlICsgJyDigJQg0LrQsNGA0YLQvtGH0LXQujogJyArIGRhdGEuY2FyZHMubGVuZ3RoKTsKCiAgICBpZiAoZGF0YS5sb2dpc3RpY3MpIHsKICAgICAgdmFyIGxjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGxjLmNsYXNzTmFtZSA9ICdhdnpwci1jYXJkJzsKICAgICAgbGMuaW5uZXJIVE1MID0gJzxoND7QkdCw0L3QvdC10YAg0LvQvtCz0LjRgdGC0LjQutC4PC9oND4nOwogICAgICBzZWMuYXBwZW5kQ2hpbGQobGMpOwogICAgICBmaWVsZChsYywgJ9CX0LDQs9C-0LvQvtCy0L7QuicsIFtrZXksICdsb2dpc3RpY3MnLCAndGl0bGUnXSk7CiAgICAgIGZpZWxkKGxjLCAn0KLQtdC60YHRgicsIFtrZXksICdsb2dpc3RpY3MnLCAndGV4dCddLCB0cnVlKTsKICAgICAgdmFyIGxyID0gcm93KGxjKTsKICAgICAgZmllbGQobHIsICfQmtGA0YPQv9C90LDRjyDQvdCw0LTQv9C40YHRjCcsIFtrZXksICdsb2dpc3RpY3MnLCAnc3RhdE51bSddKTsKICAgICAgZmllbGQobHIsICfQn9C-0LTQv9C40YHRjCDQv9C-0LQg0L3QtdC5JywgW2tleSwgJ2xvZ2lzdGljcycsICdzdGF0TGFiZWwnXSk7CiAgICB9CgogICAgZGF0YS5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzYywgaSkgewogICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBjLmNsYXNzTmFtZSA9ICdhdnpwci1jYXJkJzsKICAgICAgYy5pbm5lckhUTUwgPSAnPGg0PtCX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCAnICsgKGkgKyAxKSArICc8L2g0Pic7CiAgICAgIHNlYy5hcHBlbmRDaGlsZChjKTsKICAgICAgdmFyIHIgPSByb3coYyk7CiAgICAgIGZpZWxkKHIsICfQotC10LrRgdGCJywgW2tleSwgJ3NlY3Rpb25zJywgaSwgJ3RpdGxlJ10pOwogICAgICBmaWVsZChyLCAn0JzQtdGC0LrQsCDRgdC_0YDQsNCy0LAnLCBba2V5LCAnc2VjdGlvbnMnLCBpLCAnYXNpZGUnXSk7CiAgICB9KTsKCiAgICBkYXRhLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKGNkLCBpKSB7CiAgICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGMuY2xhc3NOYW1lID0gJ2F2enByLWNhcmQnOwogICAgICBjLmlubmVySFRNTCA9ICc8aDQ-0JrQsNGA0YLQvtGH0LrQsCAnICsgKGkgKyAxKSArICcgwrcgJyArIChjZC5uYW1lIHx8ICfigJQnKSArICc8L2g0Pic7CiAgICAgIHNlYy5hcHBlbmRDaGlsZChjKTsKCiAgICAgIHZhciByMSA9IHJvdyhjKTsKICAgICAgZmllbGQocjEsICfQndCw0LfQstCw0L3QuNC1JywgW2tleSwgJ2NhcmRzJywgaSwgJ25hbWUnXSk7CiAgICAgIGZpZWxkKHIxLCAn0J3QvtC80LXRgCDQsiDQutGA0YPQttC60LUnLCBba2V5LCAnY2FyZHMnLCBpLCAndGFnJ10pOwoKICAgICAgdmFyIHIyID0gcm93KGMpOwogICAgICBmaWVsZChyMiwgJ9Cm0LXQvdCwICjQsdC10Lcg0LfQvdCw0LrQsCDigr0pJywgW2tleSwgJ2NhcmRzJywgaSwgJ3ByaWNlJ10pOwogICAgICBmaWVsZChyMiwgJ9Cf0LvQsNGI0LrQsCDCq9Cf0L7Qv9GD0LvRj9GA0L3QvtC1wrsnLCBba2V5LCAnY2FyZHMnLCBpLCAncG9wJ10pOwoKICAgICAgZmllbGQoYywgJ9Cf0L7QtNC_0LjRgdGMINC_0L7QtCDRhtC10L3QvtC5JywgW2tleSwgJ2NhcmRzJywgaSwgJ3N1YiddLCB0cnVlKTsKICAgICAgZmllbGQoYywgJ9CR0LXQudC00LYgwqvQktGB0ZEg0LLQutC70Y7Rh9C10L3QvsK7JywgW2tleSwgJ2NhcmRzJywgaSwgJ2JhZGdlJ10pOwoKICAgICAgY2QuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoXywgaykgewogICAgICAgIGZpZWxkKGMsICfQn9GD0L3QutGCICcgKyAoayArIDEpLCBba2V5LCAnY2FyZHMnLCBpLCAnaXRlbXMnLCBrXSk7CiAgICAgIH0pOwoKICAgICAgaWYgKGNkLm5vdGUpIHsKICAgICAgICB2YXIgcjMgPSByb3coYyk7CiAgICAgICAgZmllbGQocjMsICfQodC90L7RgdC60LAg4oCUINGC0LXQutGB0YInLCBba2V5LCAnY2FyZHMnLCBpLCAnbm90ZScsICdsYWJlbCddKTsKICAgICAgICBmaWVsZChyMywgJ9Ch0L3QvtGB0LrQsCDigJQg0LfQvdCw0YfQtdC90LjQtScsIFtrZXksICdjYXJkcycsIGksICdub3RlJywgJ3ZhbHVlJ10pOwogICAgICB9CiAgICAgIGlmIChjZC5idG4pIHsKICAgICAgICB2YXIgcjQgPSByb3coYyk7CiAgICAgICAgZmllbGQocjQsICfQmtC90L7Qv9C60LAg4oCUINGC0LXQutGB0YInLCBba2V5LCAnY2FyZHMnLCBpLCAnYnRuJywgJ3RleHQnXSk7CiAgICAgICAgZmllbGQocjQsICfQmtC90L7Qv9C60LAg4oCUINCw0LTRgNC10YEnLCBba2V5LCAnY2FyZHMnLCBpLCAnYnRuJywgJ2hyZWYnXSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgcGFuZWxVSSgna3puJywgJ9Ca0LDQt9Cw0L3RjCcpOwogIHBhbmVsVUkoJ21zaycsICfQnNC-0YHQutCy0LAnKTsKCiAgLyogLS0tLS0tLS0tLSDQt9Cw0L_QuNGB0Ywg0LfQvdCw0YfQtdC90LjQuSDQsiDRgNCw0LfQvNC10YLQutGDIC0tLS0tLS0tLS0KICAgICDQn9C-0LvQvdC-0YHRgtGM0Y4g0L_QvtCy0YLQvtGA0Y_QtdGCINC70L7Qs9C40LrRgywg0L_QviDQutC-0YLQvtGA0L7QuSDQv9Cw0L3QtdC70Ywg0YfQuNGC0LDQu9CwINGB0YLRgNCw0L3QuNGG0YMuCiAgICAg0KDQsNCx0L7RgtCw0LXRgiDQvdCwINC-0YLQtNC10LvRjNC90L7QuSDQutC-0L_QuNC4INC00L7QutGD0LzQtdC90YLQsCwg0LbQuNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDINC90LUg0YLRgNC-0LPQsNC10YIuICovCgogIGZ1bmN0aW9uIHR4dChlbCwgdikgewogICAgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2ICE9PSAnJykgZWwudGV4dENvbnRlbnQgPSB2OwogIH0KICBmdW5jdGlvbiBzZXRBdHRyKGVsLCBuYW1lLCB2KSB7CiAgICBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYgIT09ICcnKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdik7CiAgfQoKICAvKiDQn9GA0LDQstC40YIg0YLQtdC60YHRgiwg0L3QtSDRgtGA0L7Qs9Cw0Y8g0LLQu9C-0LbQtdC90L3Rg9GOINC40LrQvtC90LrRgyDQuNC70Lgg0LfQvdCw0YfQvtC6INCy0LDQu9GO0YLRiy4KICAgICDQldGB0LvQuCDQv9C10YDQtdC0INGC0LXQutGB0YLQvtC8INGB0YLQvtC40YIg0Y3Qu9C10LzQtdC90YIg4oCUINGN0YLQviDQuNC60L7QvdC60LAsINC4INC10ZEg0L7RgiDQv9C-0LTQv9C40YHQuAogICAgINC-0YLQtNC10LvRj9C10YIg0L_RgNC-0LHQtdC7OyDQv9Cw0L3QtdC70Ywg0L7RgtC00LDRkdGCINGC0LXQutGB0YIg0L7QsdGA0LXQt9Cw0L3QvdGL0LwsINC_0L7RjdGC0L7QvNGDINC_0YDQvtCx0LXQuwogICAgINCy0L7Qt9Cy0YDQsNGJ0LDQtdC8INC30LTQtdGB0YwsINC40L3QsNGH0LUg0LjQutC-0L3QutCwINGB0LvQuNC_0L3QtdGC0YHRjyDRgSDQvdCw0LTQv9C40YHRjNGOLiAqLwogIGZ1bmN0aW9uIHR4dEtlZXAoZWwsIHYpIHsKICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnIHx8IHYgPT09ICcnKSByZXR1cm47CiAgICB2YXIgZG9uZSA9IGZhbHNlLCBzZWVuRWwgPSBmYWxzZSwgaSwgbjsKICAgIGZvciAoaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIG4gPSBlbC5jaGlsZE5vZGVzW2ldOwogICAgICBpZiAobi5ub2RlVHlwZSA9PT0gMSkgeyBzZWVuRWwgPSB0cnVlOyBjb250aW51ZTsgfQogICAgICBpZiAobi5ub2RlVHlwZSA9PT0gMykgewogICAgICAgIGlmICghZG9uZSAmJiBuLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG4ubm9kZVZhbHVlID0gKHNlZW5FbCA_ICcgJyA6ICcnKSArIHY7IGRvbmUgPSB0cnVlOyB9CiAgICAgICAgZWxzZSBpZiAoZG9uZSkgeyBuLm5vZGVWYWx1ZSA9ICcnOyB9CiAgICAgIH0KICAgIH0KICAgIGlmICghZG9uZSkgZWwuaW5zZXJ0QmVmb3JlKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodiksIGVsLmZpcnN0Q2hpbGQpOwogIH0KCiAgZnVuY3Rpb24gd3JpdGVDYXJkKGVsLCBjKSB7CiAgICBpZiAoIWVsIHx8ICFjKSByZXR1cm47CiAgICB0eHQob25lKGVsLCAnLnBjLW5hbWUnKSwgYy5uYW1lKTsKICAgIHR4dChvbmUoZWwsICcucGMtdGFnIC5udW0nKSwgYy50YWcpOwogICAgdHh0S2VlcChvbmUoZWwsICcucGMtcHJpY2UnKSwgYy5wcmljZSk7CiAgICB0eHQob25lKGVsLCAnLnBjLXByaWNlLXN1YicpLCBjLnN1Yik7CiAgICB0eHQob25lKGVsLCAnLnBjLXBvcCcpLCBjLnBvcCk7CiAgICB0eHRLZWVwKG9uZShlbCwgJy5sb2dpc3RpY3MtYmFkZ2UnKSwgYy5iYWRnZSk7CgogICAgaWYgKEFycmF5LmlzQXJyYXkoYy5pdGVtcykpIHsKICAgICAgdmFyIGxpcyA9IGFsbChlbCwgJy5wYy1saXN0IGxpJyk7CiAgICAgIGMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodHgsIGkpIHsKICAgICAgICB2YXIgbGkgPSBsaXNbaV07CiAgICAgICAgaWYgKCFsaSkgcmV0dXJuOwogICAgICAgIHZhciBzcGFucyA9IGFsbChsaSwgJ3NwYW4nKTsKICAgICAgICB2YXIgdGFyZ2V0ID0gc3BhbnMubGVuZ3RoID4gMSA_IHNwYW5zW3NwYW5zLmxlbmd0aCAtIDFdIDogbnVsbDsKICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZignaWNvbicpID09PSAtMSkgdHh0KHRhcmdldCwgdHgpOwogICAgICB9KTsKICAgIH0KICAgIGlmIChjLm5vdGUpIHsKICAgICAgdmFyIG5vdGUgPSBhbGwoZWwsICcucGMtbm90ZSBzcGFuJyk7CiAgICAgIHR4dChub3RlWzBdLCBjLm5vdGUubGFiZWwpOwogICAgICB0eHQobm90ZVsxXSwgYy5ub3RlLnZhbHVlKTsKICAgIH0KICAgIGlmIChjLmJ0bikgewogICAgICB2YXIgYnRuID0gb25lKGVsLCAnLmJ0bi1jYXJkJyk7CiAgICAgIGlmIChidG4pIHsKICAgICAgICBzZXRBdHRyKGJ0biwgJ2hyZWYnLCBjLmJ0bi5ocmVmKTsKICAgICAgICB2YXIgYnMgPSBhbGwoYnRuLCAnc3BhbicpOwogICAgICAgIGlmIChic1swXSAmJiBic1swXS5jbGFzc05hbWUuaW5kZXhPZignaWNvbicpID09PSAtMSkgdHh0KGJzWzBdLCBjLmJ0bi50ZXh0KTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gd3JpdGVQYW5lbChzY29wZSwgaWQsIGRhdGEpIHsKICAgIGlmICghZGF0YSkgcmV0dXJuOwogICAgdmFyIHAgPSBvbmUoc2NvcGUsICcjYXYtcGFuZWwtJyArIGlkKTsKICAgIGlmICghcCkgcmV0dXJuOwoKICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuc2VjdGlvbnMpKSB7CiAgICAgIHZhciBoZWFkcyA9IGFsbChwLCAnLnNlY3Rpb24tbGFiZWwnKTsKICAgICAgZGF0YS5zZWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzYywgaSkgewogICAgICAgIHZhciBoZCA9IGhlYWRzW2ldOwogICAgICAgIGlmICghaGQpIHJldHVybjsKICAgICAgICB0eHQob25lKGhkLCAnaDInKSwgc2MudGl0bGUpOwogICAgICAgIHR4dEtlZXAob25lKGhkLCAnLnNsLWFzaWRlJyksIHNjLmFzaWRlKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLmNhcmRzKSkgewogICAgICB2YXIgY2FyZHMgPSBhbGwocCwgJy5wcmljZS1jYXJkJyk7CiAgICAgIGRhdGEuY2FyZHMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgeyB3cml0ZUNhcmQoY2FyZHNbaV0sIGMpOyB9KTsKICAgIH0KICAgIGlmIChkYXRhLmxvZ2lzdGljcykgewogICAgICB2YXIgbGIgPSBvbmUocCwgJy5sb2dpc3RpY3MtYmFubmVyJyk7CiAgICAgIGlmIChsYikgewogICAgICAgIHR4dChvbmUobGIsICdoNCcpLCBkYXRhLmxvZ2lzdGljcy50aXRsZSk7CiAgICAgICAgdHh0KG9uZShsYiwgJ3AnKSwgZGF0YS5sb2dpc3RpY3MudGV4dCk7CiAgICAgICAgdHh0KG9uZShsYiwgJy5sYi1zdGF0LW51bScpLCBkYXRhLmxvZ2lzdGljcy5zdGF0TnVtKTsKICAgICAgICB0eHQob25lKGxiLCAnLmxiLXN0YXQtbGJsJyksIGRhdGEubG9naXN0aWNzLnN0YXRMYWJlbCk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkYXRhKSB7CiAgICB0eHQob25lKHNjb3BlLCAnLmhlcm8tZXllYnJvdycpLCBkYXRhLmhlcm8uZXllYnJvdyk7CiAgICB2YXIgaW5uZXJzID0gYWxsKHNjb3BlLCAnLmhlcm8tdGl0bGUtaW5uZXInKTsKICAgIGRhdGEuaGVyby5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lLCBpKSB7CiAgICAgIHZhciBlbCA9IGlubmVyc1tpXTsKICAgICAgaWYgKCFlbCkgcmV0dXJuOwogICAgICB0eHQob25lKGVsLCAnZW0nKSB8fCBlbCwgbGluZSk7CiAgICB9KTsKICAgIHR4dChvbmUoc2NvcGUsICcudGFicy1oZWFkIC5oLWxhYmVsJyksIGRhdGEudGFic0hlYWQubGFiZWwpOwogICAgdHh0S2VlcChvbmUoc2NvcGUsICcudGFicy1oZWFkIC5oLWhpbnQnKSwgZGF0YS50YWJzSGVhZC5oaW50KTsKCiAgICB2YXIgY2hpcHMgPSBhbGwoc2NvcGUsICcudGFicy11aSAuY2hpcCcpOwogICAgZGF0YS50YWJzLmZvckVhY2goZnVuY3Rpb24gKHRiLCBpKSB7CiAgICAgIHZhciBjaCA9IGNoaXBzW2ldOwogICAgICBpZiAoIWNoKSByZXR1cm47CiAgICAgIHR4dChvbmUoY2gsICcuY2hpcC1udW0nKSwgdGIubnVtKTsKICAgICAgdHh0KG9uZShjaCwgJy5jaGlwLW5hbWUnKSwgdGIubmFtZSk7CiAgICAgIHZhciBtZXRhID0gYWxsKGNoLCAnLmNoaXAtbWV0YSA-IHNwYW4nKTsKICAgICAgdHh0S2VlcChtZXRhWzBdLCB0Yi5waW4pOwogICAgICB0eHQobWV0YVsxXSwgdGIubWV0YSk7CiAgICB9KTsKCiAgICB3cml0ZVBhbmVsKHNjb3BlLCAna3puJywgZGF0YS5rem4pOwogICAgd3JpdGVQYW5lbChzY29wZSwgJ21zaycsIGRhdGEubXNrKTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7IHNldChmLnBhdGgsIGYuaW5wdXQudmFsdWUpOyB9KTsKICAgIHJldHVybiBjZmc7CiAgfQoKICBmdW5jdGlvbiBkaWdpdHMoczIpIHsgcmV0dXJuIChzMiB8fCAnJykucmVwbGFjZSgvW15cZF0vZywgJycpOyB9CiAgZnVuY3Rpb24gbXNnKHMyKSB7IGJveC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHItbXNnJykudGV4dENvbnRlbnQgPSBzMjsgfQoKICB2YXIgc3JjQ2FjaGUgPSBudWxsOwogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICBpZiAoc3JjQ2FjaGUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3JjQ2FjaGUpOwogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz9hdno9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIudGV4dCgpOyB9KQogICAgICAudGhlbihmdW5jdGlvbiAoaCkgeyBzcmNDYWNoZSA9IGg7IHJldHVybiBoOyB9KTsKICB9CgogIGZ1bmN0aW9uIGNvcHkoc3RyLCBub3RlKSB7CiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICBzdHIgPSBTdHJpbmcoc3RyKS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgdmFyIHRhID0gYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwci1vdXQnKTsKICAgIHRhLnZhbHVlID0gc3RyOwogICAgdGEuc2VsZWN0KCk7CiAgICB2YXIgb2sgPSBmYWxzZTsKICAgIHRyeSB7IG9rID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaCAoZSkge30KICAgIGlmICghb2sgJiYgbmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICByZXR1cm4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc3RyKS50aGVuKAogICAgICAgIGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUpOyB9LAogICAgICAgIC8qINC_0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L3QtdC70YzQt9GPINGC0LXRgNGP0YLRjCDQstC80LXRgdGC0LUg0YEg0YHQvtC-0LHRidC10L3QuNC10Lwg0L7QsSDRg9GB0L_QtdGF0LUgKi8KICAgICAgICBmdW5jdGlvbiAoKSB7IG1zZygn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOLiAnICsgbm90ZSk7IH0pOwogICAgfQogICAgbXNnKG9rID8gbm90ZSA6ICfQktGL0LTQtdC70LjRgtC1INGC0LXQutGB0YIg0L3QuNC20LUg0Lgg0YHQutC-0L_QuNGA0YPQudGC0LUg0LLRgNGD0YfQvdGD0Y4uICcgKyBub3RlKTsKICB9CgogIGJveC5xdWVyeVNlbGVjdG9yKCcjYXZ6cHItY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBib3gucmVtb3ZlKCk7IH07CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwINCx0LvQvtC60LAg0YbQtdC70LjQutC-0LwgLS0tLS0tLS0tLQogICAgINCS0YHQtSDQvdC10LjQt9C80LXQvdGP0LXQvNGL0LUg0YfQsNGB0YLQuCAo0YHRgtC40LvQuCwg0YHQutGA0LjQv9GCINCy0LrQu9Cw0LTQvtC6LCDRgdGB0YvQu9C60Lgg0L3QsCDRiNGA0LjRhNGC0YspCiAgICAg0LHQtdGA0ZHQvCDQuNC3INC40YHRhdC-0LTQvdC-0LPQviDQutC-0LTQsCDRgdGC0YDQsNC90LjRhtGLLCDQsCDQvdC1INC40Lcg0YjQsNCx0LvQvtC90LAg0LLQvdGD0YLRgNC4INC_0LDQvdC10LvQuC4KICAgICDQotCw0Log0YDRg9GH0L3Ri9C1INC_0YDQsNCy0LrQuCDQtNC40LfQsNC50L3QsCDQv9C10YDQtdC20LjQstCw0Y7RgiDQv9C10YDQtdGB0LHQvtGA0LrRgy4gKi8KCiAgZnVuY3Rpb24gbGRXaXRoTmV3UHJpY2VzKGRvYywgZGF0YSkgewogICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZigncHJpY2VDdXJyZW5jeScpID4gLTE7CiAgICB9KVswXTsKICAgIGlmICghc2MpIHJldHVybiB7IHRleHQ6IG51bGwsIGhpdHM6IDAsIHdhcm46IFsn0LHQu9C-0LogbGQranNvbiDRgSDRhtC10L3QsNC80Lgg0L3QtSDQvdCw0LnQtNC10L0nXSB9OwoKICAgIHZhciB0ZXh0ID0gc2MudGV4dENvbnRlbnQsIGhpdHMgPSAwLCB3YXJuID0gW10sIGNoYW5nZXMgPSBbXTsKCiAgICBbJ2t6bicsICdtc2snXS5mb3JFYWNoKGZ1bmN0aW9uIChjaXR5KSB7CiAgICAgIGlmICghZGF0YVtjaXR5XSB8fCAhT1JJR1tjaXR5XSkgcmV0dXJuOwogICAgICBkYXRhW2NpdHldLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgICB2YXIgbyA9IE9SSUdbY2l0eV0uY2FyZHNbaV07CiAgICAgICAgaWYgKCFvKSByZXR1cm47CiAgICAgICAgaWYgKGRpZ2l0cyhjLnByaWNlKSAhPT0gZGlnaXRzKG8ucHJpY2UpKSBjaGFuZ2VzLnB1c2goeyBvbGQ6IG8ucHJpY2UsIG5ldTogYy5wcmljZSB9KTsKICAgICAgICBpZiAoYy5ub3RlICYmIG8ubm90ZSAmJiBkaWdpdHMoYy5ub3RlLnZhbHVlKSAhPT0gZGlnaXRzKG8ubm90ZS52YWx1ZSkpIHsKICAgICAgICAgIGNoYW5nZXMucHVzaCh7IG9sZDogby5ub3RlLnZhbHVlLCBuZXU6IGMubm90ZS52YWx1ZSB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgY2hhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaCkgewogICAgICB2YXIgb2QgPSBkaWdpdHMoY2gub2xkKSwgbmQgPSBkaWdpdHMoY2gubmV1KTsKICAgICAgaWYgKCFvZCB8fCAhbmQpIHJldHVybjsKCiAgICAgIC8qINC_0L7Qu9C1IHByaWNlIOKAlCDRhtC40YTRgNGLINC_0L7QtNGA0Y_QtCwg0LHQtdC3INC_0YDQvtCx0LXQu9C-0LIgKi8KICAgICAgdmFyIHJlUCA9IG5ldyBSZWdFeHAoJygicHJpY2UiXFxzKjpcXHMqIiknICsgb2QgKyAnKCIpJywgJ2cnKTsKICAgICAgdmFyIG4xID0gKHRleHQubWF0Y2gocmVQKSB8fCBbXSkubGVuZ3RoOwogICAgICBpZiAobjEgPiAxKSB3YXJuLnB1c2goY2gub2xkICsgJyDRgdGC0L7QuNGCINCyICcgKyBuMSArICcg0L_RgNC10LTQu9C-0LbQtdC90LjRj9GFIOKAlCDRgdCy0LXRgNGM0YLQtSDQs9C70LDQt9Cw0LzQuCcpOwogICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlUCwgJyQxJyArIG5kICsgJyQyJyk7CgogICAgICAvKiDRgtCwINC20LUg0YbQtdC90LAg0L_RgNC-0L_QuNGB0YzRjiDQsiDQvtC_0LjRgdCw0L3QuNGP0YU6IMKr0L7RgiAxNCA5MDAg4oK9wrsgKi8KICAgICAgdmFyIGh1bWFuID0gb2QucmVwbGFjZSgvXEIoPz0oXGR7M30pKyg_IVxkKSkvZywgJ1tcXHNcXHUwMGEwXT8nKTsKICAgICAgdmFyIHByZXR0eSA9IG5kLnJlcGxhY2UoL1xCKD89KFxkezN9KSsoPyFcZCkpL2csICcgJyk7CiAgICAgIHZhciBuMiA9ICh0ZXh0Lm1hdGNoKG5ldyBSZWdFeHAoaHVtYW4sICdnJykpIHx8IFtdKS5sZW5ndGg7CiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cChodW1hbiwgJ2cnKSwgcHJldHR5KTsKCiAgICAgIGhpdHMgKz0gbjEgKyBuMjsKICAgIH0pOwoKICAgIC8qINCg0LDQt9C80LXRgtC60YMg0LfQtNC10YHRjCDQv9GA0LDQstC40Lwg0YLQtdC60YHRgtC-0LwsINGH0YLQvtCx0Ysg0L3QtSDQv9C10YDQtdGE0L7RgNC80LDRgtC40YDQvtCy0LDRgtGMINC10ZEg0LHQtdC3INC90YPQttC00YsuCiAgICAgICDQndC-INC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuCDQvdCw0LTQviDQv9GA0LjQstC10YHRgtC4INC6INCz0LvQsNCy0L3QvtC5LCDQsCDRjdGC0L4g0LTQtdC70LDQtdGC0YHRjyDRgNCw0LfQsdC-0YDQvtC8LgogICAgICAg0J_QvtGN0YLQvtC80YMg0YDQsNC30LHQuNGA0LDQtdC8INC-0LTQuNC9INGA0LDQtyDQsiDQutC-0L3RhtC1OiDQtdGB0LvQuCDQutCw0YDRgtC-0YfQutC4INGD0LbQtSDRgdC-0LLQv9Cw0LTQsNGO0YIKICAgICAgINGBINGN0YLQsNC70L7QvdC-0LwsINGC0LXQutGB0YIg0L7RgdGC0LDRkdGC0YHRjyDQv9GA0LXQttC90LjQvCDQuCDRhNC-0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1INC90LUg0L_QvtC10LTQtdGCLiAqLwogICAgdmFyIHBhcnNlZDsKICAgIHRyeSB7IHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7IH0KICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGhpdHM6IGhpdHMsIHdhcm46IFsn0L_QvtGB0LvQtSDQv9C-0LTRgdGC0LDQvdC-0LLQutC4IGxkK2pzb24g0YHRgtCw0Lsg0L3QtdCy0LDQu9C40LTQvdGL0Lw6ICcgKyBlLm1lc3NhZ2VdIH07IH0KCiAgICB2YXIgZml4ZWQgPSBzeW5jQ2Fub24ocGFyc2VkWydAZ3JhcGgnXSB8fCBbXSk7CiAgICBpZiAoZml4ZWQubGVuZ3RoKSB7CiAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShwYXJzZWQsIG51bGwsIDIpOwogICAgICB3YXJuLnB1c2goJ9C-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuCDQv9GA0LjQstC10LTQtdC90Ysg0Log0LPQu9Cw0LLQvdC-0Lk6ICcgKyBmaXhlZC5qb2luKCcsICcpKTsKICAgIH0KCiAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBoaXRzOiBoaXRzLCB3YXJuOiB3YXJuLCBjaGFuZ2VkOiBjaGFuZ2VzLmxlbmd0aCB9OwogIH0KCiAgYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwci1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgZGF0YSA9IGNvbGxlY3QoKTsKICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CgogICAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKGgpIHsKICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaCwgJ3RleHQvaHRtbCcpOwoKICAgICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1wcmljZXMnKTsKICAgICAgaWYgKCFzY29wZSkgeyBtc2coJ9CSINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L0g0LHQu9C-0LogLmF2LXByaWNlcycpOyByZXR1cm47IH0KICAgICAgd3JpdGVBbGwoc2NvcGUsIGRhdGEpOwoKICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2LXByaWNlcycpID4gLTE7CiAgICAgIH0pWzBdOwogICAgICB2YXIgdGFiU2NyaXB0ID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3dhaXRGb3JET00nKSA-IC0xOwogICAgICB9KVswXTsKICAgICAgLyog0L7QtNC40L0g0Lgg0YLQvtGCINC20LUg0YjRgNC40YTRgiDQvNC-0LMg0L_QvtC_0LDRgdGC0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtGDINC00LLQsNC20LTRiyDigJQg0L_RgNC4INCy0YHRgtCw0LLQutC1CiAgICAgICAgINC90L7QstC-0Lkg0YjQsNC_0LrQuCDQv9C-0LLQtdGA0YUg0YHRgtCw0YDQvtC5LiDQodC-0LHQuNGA0LDQtdC8INC_0L4g0L7QtNC90L7QvNGDINGA0LDQt9GDINC90LAg0LDQtNGA0LXRgSAqLwogICAgICB2YXIgc2VlbkZvbnQgPSB7fTsKICAgICAgdmFyIGR1cEZvbnRzID0gMDsKICAgICAgdmFyIGZvbnRMaW5rcyA9IFtdLnNsaWNlLmNhbGwoZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJykpCiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobCkgewogICAgICAgICAgdmFyIGhyZWYgPSBsLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnOwogICAgICAgICAgaWYgKHNlZW5Gb250W2hyZWZdKSB7IGR1cEZvbnRzKys7IHJldHVybiBmYWxzZTsgfQogICAgICAgICAgc2VlbkZvbnRbaHJlZl0gPSAxOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CiAgICAgIHZhciBmb250TGluayA9IGZvbnRMaW5rc1swXSB8fCBudWxsOwoKICAgICAgLyogdjM6INGI0YDQuNGE0YLRiyDQu9C10LbQsNGCINCy0L3Rg9GC0YDQuCA8c3R5bGU-IChAZm9udC1mYWNlIMKrQVZaIOKApsK7KSwg0LfQvdCw0YfQutC4INGA0LjRgdGD0LXRggogICAgICAgICDRgdC60YDQuNC_0YIg0LLQutC70LDQtNC-0LogKEFWWl9JQ09OUykuINCh0YHRi9C70LrQuCDQvdCwIEdvb2dsZSDQvdC1INC90YPQttC90Ysg0Lgg0L3QtSDQstGL0LLQvtC00Y_RgtGB0Y8uICovCiAgICAgIHZhciBoYXNFbWJlZGRlZCA9ICEhc3R5bGUgJiYgc3R5bGUudGV4dENvbnRlbnQuaW5kZXhPZignZm9udC1mYW1pbHk6ICJBVlogUnViaWsiJykgPiAtMTsKICAgICAgdmFyIGhhc0ljb25zID0gISF0YWJTY3JpcHQgJiYgdGFiU2NyaXB0LnRleHRDb250ZW50LmluZGV4T2YoJ0FWWl9JQ09OUycpID4gLTE7CgogICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0LHQu9C-0LrQsCDRhtC10L0nKTsKICAgICAgaWYgKCF0YWJTY3JpcHQpIG1pc3NpbmcucHVzaCgnPHNjcmlwdD4g0LLQutC70LDQtNC-0LonKTsKICAgICAgaWYgKHN0eWxlICYmICFoYXNFbWJlZGRlZCkgbWlzc2luZy5wdXNoKCfQstGI0LjRgtGL0LUg0YjRgNC40YTRgtGLIMKrQVZaIFJ1Ymlrwrsg0LIgPHN0eWxlPiAo0L3QsCDRgdGC0YDQsNC90LjRhtC1INGB0YLQsNGA0YvQuSDQv9GA0LDQudGBIHYyPyknKTsKICAgICAgaWYgKHRhYlNjcmlwdCAmJiAhaGFzSWNvbnMpIG1pc3NpbmcucHVzaCgn0LLRgdGC0YDQvtC10L3QvdGL0LUg0LfQvdCw0YfQutC4IEFWWl9JQ09OUyDQsiDRgdC60YDQuNC_0YLQtSDQstC60LvQsNC00L7QuicpOwogICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHsgbXNnKCfQndC1INC90LDQudC00LXQvdC-INCyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ys6ICcgKyBtaXNzaW5nLmpvaW4oJywgJykgKyAnLiDQmtC-0LQg0L3QtSDRgdC-0LHRgNCw0L0uJyk7IHJldHVybjsgfQoKICAgICAgdmFyIGxkID0gbGRXaXRoTmV3UHJpY2VzKGRvYywgZGF0YSk7CiAgICAgIGlmICghbGQudGV4dCkgeyBtc2coJ9Cg0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LI6ICcgKyBsZC53YXJuLmpvaW4oJzsgJykgKyAnLiDQmtC-0LQg0L3QtSDRgdC-0LHRgNCw0L0uJyk7IHJldHVybjsgfQoKICAgICAgdmFyIG91dCA9IFsKICAgICAgICAvKiDRgNC-0LLQvdC-INGC0LUg0YHRgtGA0L7QutC4LCDRh9GC0L4g0YHRgtC-0Y_RgiDQsiDQsdC70L7QutC1IC9wcmljZSDigJQg0L3QuNGH0LXQs9C-INC90LUg0LTQvtCx0LDQstC70Y_QtdC8LgogICAgICAgICAgIHByZWNvbm5lY3Qg0LogaS53Zm9saW8ucnUg0LfQtNC10YHRjCDQvdC10YIsINC4INCy0YvQtNGD0LzRi9Cy0LDRgtGMINC10LPQviDQvdC10LvRjNC30Y8gKi8KICAgICAgICAnPG1ldGEgY2hhcnNldD0idXRmLTgiPicsCiAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAnJywKICAgICAgICB0YWJTY3JpcHQub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgbGQudGV4dC50cmltKCksCiAgICAgICAgJzwnICsgJy9zY3JpcHQ-JwogICAgICBdLmpvaW4oJ1xuJyk7CgogICAgICB2YXIgbm90ZSA9ICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIG91dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAgICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiAvcHJpY2Ug0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuJzsKICAgICAgaWYgKGxkLmNoYW5nZWQpIG5vdGUgKz0gJyDQptC10L0g0L7QsdC90L7QstC70LXQvdC-INCyINGA0LDQt9C80LXRgtC60LUg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LI6ICcgKyBsZC5oaXRzICsgJy4nOwogICAgICBlbHNlIG5vdGUgKz0gJyDQptC10L3RiyDQvdC1INC80LXQvdGP0LvQuNGB0YwuJzsKICAgICAgaWYgKGZvbnRMaW5rcy5sZW5ndGgpIG5vdGUgKz0gJyDQodGB0YvQu9C60Lgg0L3QsCDRiNGA0LjRhNGC0YsgR29vZ2xlINCyINC60L7QtCDQvdC1INC_0L7Qv9Cw0LvQuCDigJQg0YjRgNC40YTRgtGLINCy0YjQuNGC0Ysg0LIg0LHQu9C-0LouJzsKICAgICAgaWYgKGxkLndhcm4ubGVuZ3RoKSBub3RlICs9ICcg0JLQndCY0JzQkNCd0JjQlTogJyArIGxkLndhcm4uam9pbignOyAnKTsKCiAgICAgIGNvcHkob3V0LCBub3RlKTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YHRgtGA0LDQvdC40YbRgzogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJldHVybiAn0J_QsNC90LXQu9GMINGG0LXQvSDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoicG9ydGZvbGlvIix0aXRsZToi0J_QsNC90LXQu9GMINGB0YLRgNCw0L3QuNGG0Ysg0L_QvtGA0YLRhNC-0LvQuNC-IixzaG9ydDoi0J_QvtGA0YLRhNC-0LvQuNC-IixoaW50OiLQu9C10L3RgtCwINC90LDQv9GA0LDQstC70LXQvdC40LksINGE0L7RgtC-LCDQv9C-0LTQv9C40YHQuCwgYWx0LdGC0LXQutGB0YLRiyIscGFnZXM6WyIvcG9ydGZvbGlvIl0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCh0KLQoNCQ0J3QmNCm0Ksg0J_QntCg0KLQpNCe0JvQmNCeICB2MiDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwICjRgdGC0YDQsNC90LjRhtCwIHYzLCDQu9C10L3RgtCwKQogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0Zm9saW8KCiAgINCd0LjRh9C10LPQviDQvdC1INC_0YPQsdC70LjQutGD0LXRgiDQuCDQvdC1INC80LXQvdGP0LXRgiDQttC40LLRg9GOINGB0YLRgNCw0L3QuNGG0YMuINCn0LjRgtCw0LXRgiDQuNGB0YXQvtC00L3Ri9C5CiAgIEhUTUwg0YHRgtGA0LDQvdC40YbRiywg0L_QvtC00YHRgtCw0LLQu9GP0LXRgiDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiyDQuCDQstGL0LTQsNGR0YIg0LLQtdGB0Ywg0LHQu9C-0LoKICAg0YbQtdC70LjQutC-0Lwg4oCUINCy0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0L7QtNC90LjQvCDQutGD0YHQutC-0Lwg0L_QvtCy0LXRgNGFIEhUTUwt0LHQu9C-0LrQsCAvcG9ydGZvbGlvLgoKICAg0J_QvtGH0LXQvNGDINCz0LXQvdC10YDQsNGC0L7RgCwg0LAg0L3QtSDQutC-0L3RhNC40LMg0YEg0LTQstC40LbQutC-0LwsINC60LDQuiDQvdCwINCz0LvQsNCy0L3QvtC5OgogICDRgdC-0LTQtdGA0LbQuNC80L7QtSDQv9C70LjRgtC60Lgg0LvQtdC20LjRgiDQsiDRgtGA0ZHRhSDQvNC10YHRgtCw0YUg4oCUIHNyYyDQutCw0YDRgtC40L3QutC4LCBhbHQg0Lgg0LfQsNC_0LjRgdGMCiAgIGhhc1BhcnQg0LIgbGQranNvbi4g0JTQstC40LbQvtC6INC_0YDQsNCy0LjRgiDRgtC-0LvRjNC60L4gRE9NLCDQv9C-0Y3RgtC-0LzRgyDQsiDQuNGB0YXQvtC00L3QvtC8INC60L7QtNC1CiAgINC90LDQstGB0LXQs9C00LAg0L7RgdGC0LDQstCw0LvQuNGB0Ywg0LHRiyDRgdGC0LDRgNGL0LUg0YHRgdGL0LvQutC4LCDQsCDQuNGFINC90LUg0LLQuNC00Y_RgiDQmNCYLdC60YDQsNGD0LvQtdGA0Ys6CiAgINC-0L3QuCDQvdC1INCy0YvQv9C-0LvQvdGP0Y7RgiBKUy4KCiAgINCg0LDQt9C80LXRgtC60YMg0LHQtdGA0ZHQvCDQvdC1INC40Lcg0LbQuNCy0L7Qs9C-IERPTSwg0LAg0LjQtyDRgdCy0LXQttC10LfQsNCz0YDRg9C20LXQvdC90L7Qs9C-INC40YHRhdC-0LTQvdC40LrQsAogICDRgdGC0YDQsNC90LjRhtGLIOKAlCDRgtCw0Log0L3QsCDRgNC10LfRg9C70YzRgtCw0YIg0L3QtSDQstC70LjRj9C10YIg0L3QuNGH0LXQs9C-LCDRh9GC0L4g0YPQttC1INC-0YLRgNCw0LHQvtGC0LDQu9C-CiAgINCyINCx0YDQsNGD0LfQtdGA0LUgKNC00LLQuNC20LrQuCwg0LvQtdC90LjQstCw0Y8g0LfQsNCz0YDRg9C30LrQsCwg0L_QvtC00YHRgtCw0L3QvtCy0LrQsCBzcmNzZXQpLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qIHYyIMK3INGI0YDQuNGE0YLRiyDQstGI0LjRgtGLINCyIDxzdHlsZT4g0LHQu9C-0LrQsCAoQVZaIEpvc3QgLyBBVlogUnViaWspIOKAlCDRgdGB0YvQu9C60Lgg0L3QsCBHb29nbGUg0L3QtdGCLiAqLwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuSDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUCiAgICAg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQuiDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4CiAgICAg0LLQtdGA0LjRgtGMLCDQuCDQvdCw0LPRgNCw0LTRiyDQvNC-0LPRg9GCINC90LUg0LfQsNGB0YfQuNGC0LDRgtGM0YHRjy4g0J_QsNC90LXQu9GMINC_0YDQuNCy0L7QtNC40YIg0Y3RgtC4INGD0LfQu9GLCiAgICAg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAzMCDQvtC60YLRj9Cx0YDRjyAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTktMDEtMDEiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogIjE0OTAwLTU0OTAwIiwKICAgICAgIm9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iLAogICAgICAgICAgImRheU9mV2VlayI6IFsKICAgICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAgICJUdWVzZGF5IiwKICAgICAgICAgICAgIldlZG5lc2RheSIsCiAgICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAgICJGcmlkYXkiLAogICAgICAgICAgICAiU2F0dXJkYXkiLAogICAgICAgICAgICAiU3VuZGF5IgogICAgICAgICAgXSwKICAgICAgICAgICJvcGVucyI6ICIxMDowMCIsCiAgICAgICAgICAiY2xvc2VzIjogIjIwOjAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIGZ1bmN0aW9uIHN5bmNDYW5vbihncmFwaCkgewogICAgaWYgKCFncmFwaCB8fCAhZ3JhcGgubGVuZ3RoKSByZXR1cm4gW107CiAgICB2YXIgZG9uZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaWQgPSBncmFwaFtpXSAmJiBncmFwaFtpXVsnQGlkJ107CiAgICAgIGlmIChpZCAmJiBBVlpfQ0FOT05baWRdKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdyYXBoW2ldKSAhPT0gSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpIHsKICAgICAgICAgIGRvbmUucHVzaChTdHJpbmcoaWQpLnNwbGl0KCcjJylbMV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFtpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enBmLXJvb3QnKTsKICBpZiAob2xkKSBvbGQucmVtb3ZlKCk7CgogIC8qIHYyIMK3INGB0YLRgNCw0L3QuNGG0LAgdjMgKNC70LXQvdGC0LApOiDQsdC70L7QuiAjYXZ6cC4g0KHRgtCw0YDRg9GOINGB0LXRgtC60YMgI2F2eiDQv9Cw0L3QtdC70Ywg0L3QtSDRgdC-0LHQuNGA0LDQtdGCIOKAlAogICAgINC40L3QsNGH0LUg0LLQtdGA0L3Rg9C70LAg0LHRiyDQv9GA0LXQttC90LjQuSDQtNC40LfQsNC50L0uICovCiAgdmFyIGxpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6cCcpOwogIGlmICghbGl2ZSkgewogICAgYWxlcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2eicpCiAgICAgID8gJ0FWWjog0L3QsCDRgdGC0YDQsNC90LjRhtC1INGB0YLQsNGA0LDRjyDQstC10YDRgdC40Y8g0L_QvtGA0YLRhNC-0LvQuNC-LiDQl9Cw0LvQtdC50YLQtSBwb3J0Zm9saW8tYmxvY2stdjMuMCDigJQg0L_QsNC90LXQu9GMIHYyINGA0LDQsdC-0YLQsNC10YIg0YEg0L3QtdC5LicKICAgICAgOiAnQVZaOiDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0L3QtdGCINCx0LvQvtC60LAg0L_QvtGA0YLRhNC-0LvQuNC-ICNhdnpwJyk7CiAgICByZXR1cm47CiAgfQogIGlmICghbGl2ZS5xdWVyeVNlbGVjdG9yKCcudHJhY2sgLmdpJykpIHsgYWxlcnQoJ0FWWjog0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1INC90LXRgiDQu9C10L3RgtGLINC90LDQv9GA0LDQstC70LXQvdC40LknKTsgcmV0dXJuOyB9CgogIHZhciBNQVhXID0gMTI0MDsgLy8g0L_RgNC10LTQtdC7INGI0LjRgNC40L3RiyDQutCw0LTRgNCwLCDRgdC8LiDQuNGB0YLQvtGA0LjRjiDQv9GA0L7QtdC60YLQsAoKICAvKiAtLS0tLS0tLS0tINGD0YLQuNC70LjRgtGLINGH0YLQtdC90LjRjyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIG9uZShlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBlbC5xdWVyeVNlbGVjdG9yKHNlbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfQogIGZ1bmN0aW9uIGFsbChlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBbXS5zbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKSk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9IH0KICBmdW5jdGlvbiB0KGVsKSB7IHJldHVybiBlbCA_IGVsLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKSA6ICcnOyB9CiAgLyog0YLQtdC60YHRgiDQutC90L7Qv9C60Lgg0LHQtdC3INGB0YLRgNC10LvQutC4IMKr4oaXwrsg4oCUINGB0YLRgNC10LvQutGDINC00L7Qv9C40YHRi9Cy0LDQtdGCINGB0LHQvtGA0LrQsCAqLwogIGZ1bmN0aW9uIGJ0blRleHQoZWwpIHsgcmV0dXJuIHQoZWwpLnJlcGxhY2UoL1xzKuKGl1xzKiQvLCAnJyk7IH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyDQsiDQutC-0L3RhNC40LMgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiByZWFkVGlsZXMocm9vdCkgewogICAgcmV0dXJuIGFsbChyb290LCAnLnRyYWNrIC5naScpLm1hcChmdW5jdGlvbiAoYykgewogICAgICB2YXIgaW1nID0gb25lKGMsICdpbWcnKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB0aXRsZTogdChvbmUoYywgJ2ZpZ2NhcHRpb24gaDMnKSksCiAgICAgICAgY2FwdGlvbjogdChvbmUoYywgJ2ZpZ2NhcHRpb24gLmgnKSksCiAgICAgICAgaHJlZjogYy5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJywKICAgICAgICBpbWc6IGltZyA_IChpbWcuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiAnJywKICAgICAgICBhbHQ6IGltZyA_IChpbWcuZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJwogICAgICB9OwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiByZWFkQ2ZnKHJvb3QpIHsKICAgIHZhciBmaW5hbFRpdGxlID0gb25lKHJvb3QsICcuZmluYWwgLmgyJyk7CiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllYnJvdzogdChvbmUocm9vdCwgJy5pbnRybyAubGFiZWwnKSksCiAgICAgICAgdGl0bGU6IHQob25lKHJvb3QsICcuaW50cm8gLmRpc3BsYXknKSkKICAgICAgfSwKICAgICAgbGVkZTogdChvbmUocm9vdCwgJy5pbnRybyAubGVkZScpKSwKICAgICAgc2VjdGlvbkxhYmVsOiB0KG9uZShyb290LCAnLmdhbC1oZWFkIC5sYWJlbCcpKSwKICAgICAgdGlsZXM6IHJlYWRUaWxlcyhyb290KSwKICAgICAgY3RhOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHJvb3QsICcuZmluYWwgPiAubGFiZWwnKSksCiAgICAgICAgdGl0bGU6IGZpbmFsVGl0bGUgPyBmaW5hbFRpdGxlLmlubmVySFRNTC50cmltKCkgOiAnJywKICAgICAgICBidXR0b25zOiBhbGwocm9vdCwgJy5maW5hbCAuYnRucyAuYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiBidG5UZXh0KGIpLCBocmVmOiBiLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgZm9vdGVyOiB7CiAgICAgICAgY29weTogdChvbmUocm9vdCwgJy5mb290ZXIgLmNvcHknKSksCiAgICAgICAgc29jaWFsczogYWxsKHJvb3QsICcuc29jaWFscyBhJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICByZXR1cm4geyBsYWJlbDogdChhKSwgaHJlZjogYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIHNlbzogeyBuYW1lOiAnJywgZGVzY3JpcHRpb246ICcnIH0KICAgIH07CiAgfQoKICB2YXIgY2ZnID0gcmVhZENmZyhsaXZlKTsKCiAgLyog0LjQvNGPINC4INC-0L_QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiyDQttC40LLRg9GCINGC0L7Qu9GM0LrQviDQsiBsZCtqc29uICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzID0gYWxsKGRvY3VtZW50LCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdwb3J0Zm9saW8jcGFnZScpID4gLTE7CiAgICB9KVswXTsKICAgIGlmICghcykgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOwogICAgICB2YXIgcGFnZSA9IChvWydAZ3JhcGgnXSB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZyhuWydAaWQnXSB8fCAnJykuaW5kZXhPZignI3BhZ2UnKSA-IC0xOwogICAgICB9KVswXTsKICAgICAgaWYgKHBhZ2UpIHsKICAgICAgICBjZmcuc2VvLm5hbWUgPSBwYWdlLm5hbWUgfHwgJyc7CiAgICAgICAgY2ZnLnNlby5kZXNjcmlwdGlvbiA9IHBhZ2UuZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgIH0KICAgICAgLyog0YMg0YDQsNC30LTQtdC70L7QsiDQsiDRgNCw0LfQvNC10YLQutC1INC90LDQt9Cy0LDQvdC40Y8g0YDQsNC30LLRkdGA0L3Rg9GC0LXQtSwg0YfQtdC8INC_0L7QtNC_0LjRgdC4INC_0L7QtCDQutCw0LTRgNCw0LzQuCAqLwogICAgICB2YXIgcGFydHMgPSAocGFnZSAmJiBwYWdlLmhhc1BhcnQpIHx8IFtdOwogICAgICBjZmcudGlsZXMuZm9yRWFjaChmdW5jdGlvbiAodGwsIGkpIHsKICAgICAgICB0bC5zZW9OYW1lID0gKHBhcnRzW2ldICYmIHBhcnRzW2ldLm5hbWUpIHx8IHRsLnRpdGxlOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsgLyog0L7RgdGC0LDRkdGC0YHRjyDQv9C-0LTQv9C40YHRjCDQutCw0LTRgNCwICovIH0KICB9KSgpOwoKCiAgLyogLS0tLS0tLS0tLSDQstGR0YDRgdGC0LrQsCDQv9Cw0L3QtdC70LggLS0tLS0tLS0tLQogICAgINCi0LXQvNCwIHdmb2xpbyDQutGA0LDRgdC40YIg0L_QvtC70Y8g0LIg0LHQtdC70YvQuSDRgtC10LrRgdGCINC90LAg0LHQtdC70L7QvCDRhNC-0L3QtS4KICAgICDQn9C-0Y3RgtC-0LzRgyDRhtCy0LXRgiwg0YjRgNC40YTRgiDQuCAtd2Via2l0LXRleHQtZmlsbC1jb2xvciDQt9Cw0LTQsNGO0YLRgdGPINGP0LLQvdC-CiAgICAg0Lgg0YEg0L_RgNC40L7RgNC40YLQtdGC0L7QvCwg0LAg0LLRgdC1INGH0LDRgdGC0L3Ri9C1INC_0YDQsNCy0LjQu9CwINC90LDRh9C40L3QsNGO0YLRgdGPINGBICNhdnpwZi1yb290LiAqLwoKICB2YXIgY3NzID0gWwogICAgJyNhdnpwZi1yb290LCNhdnpwZi1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6cGYtcm9vdCBpbnB1dCwjYXZ6cGYtcm9vdCB0ZXh0YXJlYXtiYWNrZ3JvdW5kOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7JywKICAgICdvcGFjaXR5OjEgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjEuNCAhaW1wb3J0YW50fScsCiAgICAnI2F2enBmLXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1iLnB7YmFja2dyb3VuZDojMWQxZDFmICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiNmZmYgIWltcG9ydGFudH0nLAogICAgJyNhdnpwZi1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnpwZi13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oOTgwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpwZi1oZWFke3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpwZi1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9JywKICAgICcjYXZ6cGYtYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6cGYtZm9vdHtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtYi5we2JvcmRlci1jb2xvcjojMWQxZDFmfScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtc2VjPnN1bW1hcnl7cGFkZGluZzoxMnB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZhZmFmYTtsaXN0LXN0eWxlOm5vbmV9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtc2VjPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QkUgICJ9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtaW57cGFkZGluZzoxNHB4fScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtZiBpbnB1dCwjYXZ6cGYtcm9vdCAuYXZ6cGYtZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NzBweDtyZXNpemU6dmVydGljYWx9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0nLAogICAgJ0BtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsjYXZ6cGYtcm9vdCAuYXZ6cGYtcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2enBmLXdpbntib3JkZXItcmFkaXVzOjB9fScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWNhcmQgaDR7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudH0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtaW1nPmltZ3t3aWR0aDo3OHB4O2hlaWdodDo5OHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnpwZi1yb290IC5hdnpwZi1pbWc-aW1nLmJhZHtvdXRsaW5lOjJweCBzb2xpZCAjYzAzOTJifScsCiAgICAnI2F2enBmLXJvb3QgLmF2enBmLWltZyAuZ3tmbGV4OjF9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtbm90ZXtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjZweCAwIDB9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDg0cHgsMWZyKSk7Z2FwOjhweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEwcHh9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtZ3JpZCBmaWd1cmV7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmV9JywKICAgICcjYXZ6cGYtcm9vdCAuYXZ6cGYtZ3JpZCBpbWd7d2lkdGg6MTAwJTthc3BlY3QtcmF0aW86My80O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo1cHg7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOiNlY2VjZWN9JywKICAgICcjYXZ6cGYtb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2enBmLW1zZ3tmb250LXNpemU6MTNweH0nCiAgXS5qb2luKCcnKTsKCiAgZnVuY3Rpb24gZXNjKHMpIHsKICAgIHJldHVybiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKQogICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykKICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKICB9CgogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIHZhciB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyAnPHRleHRhcmVhIGRhdGEtcD0iJyArIHBhdGggKyAnIj4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2enBmLWYiPjxsYWJlbD4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsgdGFnICsgJzwvZGl2Pic7CiAgfQoKICBmdW5jdGlvbiBpbWdGaWVsZChsYWJlbCwgcGF0aCwgdmFsLCBmcm9tKSB7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2enBmLWYiPjxsYWJlbD4nICsgbGFiZWwgKyAnPC9sYWJlbD48ZGl2IGNsYXNzPSJhdnpwZi1pbWciPicgKwogICAgICAnPGltZyBzcmM9IicgKyBlc2ModmFsKSArICciIGRhdGEtcHJldj0iJyArIHBhdGggKyAnIiBvbmVycm9yPSJ0aGlzLmNsYXNzTGlzdC5hZGQoXCdiYWRcJykiPicgKwogICAgICAnPGRpdiBjbGFzcz0iZyI-PGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6cGYtbm90ZSI-PGJ1dHRvbiBjbGFzcz0iYXZ6cGYtYiIgZGF0YS1jaG9vc2U9IicgKyBwYXRoICsgJyIgZGF0YS1mcm9tPSInICsgZXNjKGZyb20pICsgJyIgJyArCiAgICAgICdzdHlsZT0icGFkZGluZzo1cHggMTBweDtmb250LXNpemU6MTJweDttYXJnaW4tdG9wOjZweCI-0JLRi9Cx0YDQsNGC0Ywg0YHQviDRgdGC0YDQsNC90LjRhtGLINGA0LDQt9C00LXQu9CwPC9idXR0b24-PC9wPicgKwogICAgICAnPC9kaXY-PC9kaXY-PC9kaXY-JzsKICB9CgoKICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2enBmLXdpbiI-JyArCiAgICAnPGRpdiBpZD0iYXZ6cGYtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQv9C-0YDRgtGE0L7Qu9C40L4gwrcgdjIgKNC70LXQvdGC0LApPC9oMj4nICsKICAgICc8YnV0dG9uIGNsYXNzPSJhdnpwZi1iIiBpZD0iYXZ6cGYtY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-PC9kaXY-PGRpdiBpZD0iYXZ6cGYtYm9keSI-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enBmLXNlYyIgb3Blbj48c3VtbWFyeT7QndCw0L_RgNCw0LLQu9C10L3QuNGPINCyINC70LXQvdGC0LUgKCcgKyBjZmcudGlsZXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cGYtaW4iPicgKwogICAgJzxwIGNsYXNzPSJhdnpwZi1ub3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAxMnB4Ij7QntCz0LvQsNCy0LvQtdC90LjQtSDQv9C-0LQg0LfQsNCz0L7Qu9C-0LLQutC-0Lwg0Lgg0YHRh9GR0YLRh9C40LogwqswMSAvIDA3wrsgJyArCiAgICAn0YHQvtCx0LjRgNCw0Y7RgtGB0Y8g0LjQtyDRjdGC0LjRhSDQutCw0YDRgtC-0YfQtdC6INGB0LDQvNC4LjwvcD4nOwogIGNmZy50aWxlcy5mb3JFYWNoKGZ1bmN0aW9uICh0bCwgaSkgewogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cGYtY2FyZCI-PGg0PicgKyBTdHJpbmcoaSArIDEpLnBhZFN0YXJ0KDIsICcwJykgKyAnIMK3INC90LDQv9GA0LDQstC70LXQvdC40LU8L2g0PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6cGYtcm93Ij4nICsgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCAndGlsZXMuJyArIGkgKyAnLnRpdGxlJywgdGwudGl0bGUpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMICjQvNC10LvQutC-LCDQutCw0L_RgdC-0LwpJywgJ3RpbGVzLicgKyBpICsgJy5jYXB0aW9uJywgdGwuY2FwdGlvbikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQodGB0YvQu9C60LAnLCAndGlsZXMuJyArIGkgKyAnLmhyZWYnLCB0bC5ocmVmKSArCiAgICAgIGltZ0ZpZWxkKCfQpNC-0YLQvtCz0YDQsNGE0LjRjyAo0LLQtdGA0YLQuNC60LDQu9GM0L3QsNGPKScsICd0aWxlcy4nICsgaSArICcuaW1nJywgdGwuaW1nLCB0bC5ocmVmKSArCiAgICAgIGZpZWxkKCdBbHQt0YLQtdC60YHRgiAo0LLQuNC00LXQvSDQv9C-0LjRgdC60L7QstC40LrQsNC8KScsICd0aWxlcy4nICsgaSArICcuYWx0JywgdGwuYWx0KSArCiAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INGA0LDQt9C00LXQu9CwINCyINGA0LDQt9C80LXRgtC60LUnLCAndGlsZXMuJyArIGkgKyAnLnNlb05hbWUnLCB0bC5zZW9OYW1lIHx8IHRsLnRpdGxlKSArCiAgICAgICc8L2Rpdj4nOwogIH0pOwogIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cGYtc2VjIj48c3VtbWFyeT7QqNCw0L_QutCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enBmLWluIj4nICsKICAgIGZpZWxkKCfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnaGVyby5leWVicm93JywgY2ZnLmhlcm8uZXllYnJvdykgKwogICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLnRpdGxlJywgY2ZnLmhlcm8udGl0bGUpICsKICAgIGZpZWxkKCfQotC10LrRgdGCINGA0Y_QtNC-0Lwg0YEg0LfQsNCz0L7Qu9C-0LLQutC-0LwnLCAnbGVkZScsIGNmZy5sZWRlLCAnYXJlYScpICsKICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCDQvdCw0LQg0LvQtdC90YLQvtC5JywgJ3NlY3Rpb25MYWJlbCcsIGNmZy5zZWN0aW9uTGFiZWwpICsKICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enBmLXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyINC4INC_0L7QtNCy0LDQuzwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwZi1pbiI-JyArCiAgICBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0L3QsNC0INC_0YDQuNC30YvQstC-0LwnLCAnY3RhLmxhYmVsJywgY2ZnLmN0YS5sYWJlbCkgKwogICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDQv9GA0LjQt9GL0LLQsCAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdjdGEudGl0bGUnLCBjZmcuY3RhLnRpdGxlKTsKICBjZmcuY3RhLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cGYtY2FyZCI-PGg0PtCa0L3QvtC_0LrQsCAnICsgKGkgKyAxKSArICc8L2g0PjxkaXYgY2xhc3M9ImF2enBmLXJvdyI-JyArCiAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy50ZXh0JywgYi50ZXh0KSArCiAgICAgIGZpZWxkKCfQkNC00YDQtdGBJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy5ocmVmJywgYi5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogIH0pOwogIGggKz0gZmllbGQoJ9Ca0L7Qv9C40YDQsNC50YInLCAnZm9vdGVyLmNvcHknLCBjZmcuZm9vdGVyLmNvcHkpOwogIGNmZy5mb290ZXIuc29jaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwZi1jYXJkIj48aDQ-0KHQvtGG0YHQtdGC0YwgJyArIChpICsgMSkgKyAnPC9oND48ZGl2IGNsYXNzPSJhdnpwZi1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdmb290ZXIuc29jaWFscy4nICsgaSArICcubGFiZWwnLCBzLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQkNC00YDQtdGBJywgJ2Zvb3Rlci5zb2NpYWxzLicgKyBpICsgJy5ocmVmJywgcy5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogIH0pOwogIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cGYtc2VjIj48c3VtbWFyeT7QlNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwZi1pbiI-JyArCiAgICAnPHAgY2xhc3M9ImF2enBmLW5vdGUiIHN0eWxlPSJtYXJnaW46MCAwIDEycHgiPtCd0LDQt9Cy0LDQvdC40Y8sINCw0LTRgNC10YHQsCDQuCDQutCw0YDRgtC40L3QutC4INGA0LDQt9C00LXQu9C-0LIg0LIg0YDQsNC30LzQtdGC0LrQtSAnICsKICAgICfQv9C-0LTRgdGC0LDQstC70Y_RjtGC0YHRjyDQuNC3INC60LDRgNGC0L7Rh9C10Log0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguINCX0LTQtdGB0Ywg4oCUINGC0L7Qu9GM0LrQviDQt9Cw0LPQvtC70L7QstC-0Log0Lgg0L7Qv9C40YHQsNC90LjQtSDQstGB0LXQuSDRgdGC0YDQsNC90LjRhtGLLjwvcD4nICsKICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLm5hbWUnLCBjZmcuc2VvLm5hbWUpICsKICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLmRlc2NyaXB0aW9uJywgY2ZnLnNlby5kZXNjcmlwdGlvbiwgJ2FyZWEnKSArCiAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enBmLWZvb3QiPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enBmLWIgcCIgaWQ9ImF2enBmLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enBmLWIiIGlkPSJhdnpwZi10ZXN0Ij7Qn9GA0L7QstC10YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Lo8L2J1dHRvbj4nICsKICAgICc8c3BhbiBpZD0iYXZ6cGYtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnpwZi1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgoKICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHJvb3QuaWQgPSAnYXZ6cGYtcm9vdCc7CiAgcm9vdC5pbm5lckhUTUwgPSBoOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKCiAgdmFyIGJveCA9IHJvb3Q7CiAgZnVuY3Rpb24gbXNnKHMpIHsgYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwZi1tc2cnKS50ZXh0Q29udGVudCA9IHM7IH0KICBib3gucXVlcnlTZWxlY3RvcignI2F2enBmLWNsb3NlJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcm9vdC5yZW1vdmUoKTsgfTsKCiAgLyogLS0tLS0tLS0tLSDQv9GA0LXQstGM0Y4g0L_QviDQstCy0L7QtNGDIFVSTCAtLS0tLS0tLS0tICovCiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICBpZiAoIXApIHJldHVybjsKICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgcCArICciXScpOwogICAgaWYgKHByZXYpIHsgcHJldi5jbGFzc0xpc3QucmVtb3ZlKCdiYWQnKTsgcHJldi5zcmMgPSBlLnRhcmdldC52YWx1ZTsgfQogIH0pOwoKICAvKiAtLS0tLS0tLS0tINCy0YvQsdC-0YAg0LrQsNC00YDQsCDRgdC-INGB0YLRgNCw0L3QuNGG0Ysg0YDQsNC30LTQtdC70LAgLS0tLS0tLS0tLSAqLwoKICB2YXIgc2hvdENhY2hlID0ge307CgogIGZ1bmN0aW9uIHNob3RzRnJvbSh1cmwpIHsKICAgIGlmIChzaG90Q2FjaGVbdXJsXSkgcmV0dXJuIFByb21pc2UucmVzb2×2ZShzaG90Q2FjaGVbdXJsXSk7CiAgICByZXR1cm4gZmV0Y2godXJsICsgKHVybC5pbmRleE9mKCc_JykgPiAtMSA_ICcmJyA6ICc_JykgKyAndD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKGh0bWwpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIHNlZW4gPSB7fSwgb3V0ID0gW107CiAgICAgICAgYWxsKGRvYywgJ2ltZycpLmZvckVhY2goZnVuY3Rpb24gKGltKSB7CiAgICAgICAgICB2YXIgc2V0ID0gaW0uZ2V0QXR0cmlidXRlKCdzcmNzZXQnKSB8fCBpbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgJyc7CiAgICAgICAgICB2YXIgc3JjID0gaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCBpbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykgfHwgJyc7CiAgICAgICAgICBpZiAoc2V0LmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwICYmIHNyYy5pbmRleE9mKCdpLndmb2xpby5ydScpIDwgMCkgcmV0dXJuOwogICAgICAgICAgdmFyIHBhaXIgPSBmcm9tU3Jjc2V0KHNldCwgc3JjKTsKICAgICAgICAgIGlmICghcGFpci5mdWxsIHx8IHNlZW5bcGFpci5mdWxsXSkgcmV0dXJuOwogICAgICAgICAgc2VlbltwYWlyLmZ1bGxdID0gMTsKICAgICAgICAgIG91dC5wdXNoKHBhaXIpOwogICAgICAgIH0pOwogICAgICAgIHNob3RDYWNoZVt1cmxdID0gb3V0OwogICAgICAgIHJldHVybiBvdXQ7CiAgICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gZnJvbVNyY3NldChzZXQsIHNyYykgewogICAgaWYgKCFzZXQpIHsKICAgICAgdmFyIHUgPSBhYnMoc3JjKTsKICAgICAgcmV0dXJuIHsgZnVsbDogdSwgc21hbGw6IHUgfTsKICAgIH0KICAgIHZhciBsaXN0ID0gc2V0LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uICh4KSB7CiAgICAgIHZhciBwID0geC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICByZXR1cm4geyB1OiBhYnMocFswXSksIHc6IHBhcnNlSW50KHBbMV0sIDEwKSB8fCAwIH07CiAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudTsgfSk7CiAgICBpZiAoIWxpc3QubGVuZ3RoKSB7IHZhciB2ID0gYWJzKHNyYyk7IHJldHVybiB7IGZ1bGw6IHYsIHNtYWxsOiB2IH07IH0KICAgIHZhciBiaWcgPSBsaXN0LnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi53IC0gYS53OyB9KTsKICAgIHZhciBzbWFsbCA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLncgLSBiLnc7IH0pOwogICAgcmV0dXJuIHsKICAgICAgZnVsbDogKGJpZy5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudyA8PSBNQVhXOyB9KVswXSB8fCBiaWdbYmlnLmxlbmd0aCAtIDFdKS51LAogICAgICBzbWFsbDogKHNtYWxsLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53ID49IDI4MDsgfSlbMF0gfHwgc21hbGxbMF0pLnUKICAgIH07CiAgfQoKICBmdW5jdGlvbiBhYnModSkgewogICAgaWYgKCF1KSByZXR1cm4gJyc7CiAgICBpZiAodS5pbmRleE9mKCcvLycpID09PSAwKSByZXR1cm4gJ2h0dHBzOicgKyB1OwogICAgaWYgKHUuaW5kZXhPZignLycpID09PSAwKSByZXR1cm4gbG9jYXRpb24ub3JpZ2luICsgdTsKICAgIHJldHVybiB1OwogIH0KCiAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2hvb3NlJyk7CiAgICBpZiAoIXApIHJldHVybjsKICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAvKiDQsNC00YDQtdGBINCx0LXRgNGR0Lwg0LjQtyDQv9C-0LvRjyDRgdGB0YvQu9C60LgsINCwINC90LUg0LjQtyDQuNGB0YXQvtC00L3QvtCz0L4g0LrQvtC90YTQuNCz0LA6CiAgICAgICDQtdGB0LvQuCDQv9C70LjRgtC60YMg0YLQvtC70YzQutC-INGH0YLQviDQv9C10YDQtdC90LDQv9GA0LDQstC40LvQuCwg0LrQsNC00YDRiyDQvdGD0LbQvdGLINGBINC90L7QstC-0Lkg0YHRgtGA0LDQvdC40YbRiyAqLwogICAgdmFyIGlkeCA9IHAuc3BsaXQoJy4nKVsxXTsKICAgIHZhciBocmVmSW5wdXQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtcD0idGlsZXMuJyArIGlkeCArICcuaHJlZiJdJyk7CiAgICB2YXIgdXJsID0gKGhyZWZJbnB1dCAmJiBocmVmSW5wdXQudmFsdWUudHJpbSgpKSB8fCBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtZnJvbScpOwogICAgaWYgKCF1cmwpIHsgbXNnKCfQoyDQv9C70LjRgtC60Lgg0L3QtSDRg9C60LDQt9Cw0L3QsCDRgdGB0YvQu9C60LAg4oCUINCy0YvQsdC40YDQsNGC0Ywg0L3QtSDQuNC3INGH0LXQs9C-LicpOyByZXR1cm47IH0KCiAgICB2YXIgcGFuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgcGFuZS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO2luc2V0OjglO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7ei1pbmRleDoyMTQ3NDgzNjQ3OycgKwogICAgICAncGFkZGluZzoxNnB4O292ZXJmbG93OmF1dG87Ym94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC40KSc7CiAgICBwYW5lLmlubmVySFRNTCA9ICc8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4Ij7Ql9Cw0LPRgNGD0LbQsNGOINGB0L3QuNC80LrQuCDRgdC-INGB0YLRgNCw0L3QuNGG0YsgJyArIGVzYyh1cmwpICsgJ-KApjwvcD4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enBmLWdyaWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvZGl2Pic7CiAgICB2YXIgY2xvc2VCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgIGNsb3NlQnRuLmNsYXNzTmFtZSA9ICdhdnpwZi1iJzsKICAgIGNsb3NlQnRuLnRleHRDb250ZW50ID0gJ9Ce0YLQvNC10L3QsCc7CiAgICBjbG9zZUJ0bi5zdHlsZS5tYXJnaW5Ub3AgPSAnMTJweCc7CiAgICBjbG9zZUJ0bi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBwYW5lLnJlbW92ZSgpOyB9OwogICAgcGFuZS5hcHBlbmRDaGlsZChjbG9zZUJ0bik7CiAgICByb290LmFwcGVuZENoaWxkKHBhbmUpOwoKICAgIHNob3RzRnJvbSh1cmwpLnRoZW4oZnVuY3Rpb24gKHNob3RzKSB7CiAgICAgIHZhciBoZWFkID0gcGFuZS5xdWVyeVNlbGVjdG9yKCdwJyk7CiAgICAgIHZhciBncmlkID0gcGFuZS5xdWVyeVNlbGVjdG9yKCcuYXZ6cGYtZ3JpZCcpOwogICAgICBpZiAoIXNob3RzLmxlbmd0aCkgeyBoZWFkLnRleHRDb250ZW50ID0gJ9Cd0LAg0YHRgtGA0LDQvdC40YbQtSAnICsgdXJsICsgJyDRgdC90LjQvNC60L7QsiDQvdC1INC90LDRiNC70L7RgdGMLiDQktGB0YLQsNCy0YzRgtC1INCw0LTRgNC10YEg0LLRgNGD0YfQvdGD0Y4uJzsgcmV0dXJuOyB9CiAgICAgIGhlYWQudGV4dENvbnRlbnQgPSAn0JLRi9Cx0LXRgNC40YLQtSDRgdC90LjQvNC-0LogKCcgKyBzaG90cy5sZW5ndGggKyAnKSc7CiAgICAgIGdyaWQuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgewogICAgICAgIHZhciBmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmlndXJlJyk7CiAgICAgICAgdmFyIGltID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CiAgICAgICAgaW0uc3JjID0gaXQuc21hbGw7CiAgICAgICAgaW0ubG9hZGluZyA9ICdsYXp5JzsKICAgICAgICBmLmFwcGVuZENoaWxkKGltKTsKICAgICAgICBmLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgaW5wID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtkYXRhLXA9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICBpbnAudmFsdWUgPSBpdC5mdWxsOwogICAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICBpZiAocHJldikgeyBwcmV2LmNsYXNzTGlzdC5yZW1vdmUoJ2JhZCcpOyBwcmV2LnNyYyA9IGl0LmZ1bGw7IH0KICAgICAgICAgIHBhbmUucmVtb3ZlKCk7CiAgICAgICAgfTsKICAgICAgICBncmlkLmFwcGVuZENoaWxkKGYpOwogICAgICB9KTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgcGFuZS5xdWVyeVNlbGVjdG9yKCdwJykudGV4dENvbnRlbnQgPSAn0KHRgtGA0LDQvdC40YbQsCAnICsgdXJsICsgJyDQvdC1INC-0YLQutGA0YvQu9Cw0YHRjDogJyArIGVyci5tZXNzYWdlICsKICAgICAgICAnLiDQktGB0YLQsNCy0YzRgtC1INCw0LTRgNC10YEg0YHQvdC40LzQutCwINCy0YDRg9GH0L3Rg9GOLic7CiAgICB9KTsKICB9KTsKCiAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgCDQt9C90LDRh9C10L3QuNC5INC40Lcg0YTQvtGA0LzRiyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKSwgbyA9IG9iaiwgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BhcnRzW2ldXTsKICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogIH0KCiAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgIGFsbChyb290LCAnW2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICBzZXRQYXRoKGRhdGEsIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyksIGVsLnZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIGRhdGE7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCDQt9C90LDRh9C10L3QuNC5INCyINGA0LDQt9C80LXRgtC60YMgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBzZXRQbGFpbihlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC50ZXh0Q29udGVudCA9IHY7IH0KICBmdW5jdGlvbiBwYWQyKG4pIHsgcmV0dXJuIFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpOyB9CgogIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICB2YXIgZG9jID0gc2NvcGUub3duZXJEb2N1bWVudDsKICAgIC8qINGI0LDQv9C60LAgKi8KICAgIHNldFBsYWluKG9uZShzY29wZSwgJy5pbnRybyAubGFiZWwnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmludHJvIC5kaXNwbGF5JyksIGQuaGVyby50aXRsZSk7CiAgICBzZXRQbGFpbihvbmUoc2NvcGUsICcuaW50cm8gLmxlZGUnKSwgZC5sZWRlKTsKICAgIHNldFBsYWluKG9uZShzY29wZSwgJy5nYWwtaGVhZCAubGFiZWwnKSwgZC5zZWN0aW9uTGFiZWwpOwoKICAgIC8qINC70LXQvdGC0LAgKi8KICAgIGFsbChzY29wZSwgJy50cmFjayAuZ2knKS5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgIHZhciB0bCA9IGQudGlsZXNbaV07CiAgICAgIGlmICghdGwpIHJldHVybjsKICAgICAgaWYgKHRsLmhyZWYpIGMuc2V0QXR0cmlidXRlKCdocmVmJywgdGwuaHJlZik7CiAgICAgIHNldFBsYWluKG9uZShjLCAnZmlnY2FwdGlvbiBoMycpLCB0bC50aXRsZSk7CiAgICAgIHNldFBsYWluKG9uZShjLCAnZmlnY2FwdGlvbiAuaCcpLCB0bC5jYXB0aW9uKTsKICAgICAgc2V0UGxhaW4ob25lKGMsICdmaWdjYXB0aW9uIC5uJyksIHBhZDIoaSArIDEpICsgJyDCtycpOwogICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpOwogICAgICBpZiAoaW0pIHsKICAgICAgICBpZiAodGwuaW1nKSB7CiAgICAgICAgICBpbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRsLmltZyk7CiAgICAgICAgICBpbS5yZW1vdmVBdHRyaWJ1dGUoJ3NyY3NldCcpOwogICAgICAgICAgaW0ucmVtb3ZlQXR0cmlidXRlKCdzaXplcycpOwogICAgICAgIH0KICAgICAgICBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHRsLmFsdCk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8qINC-0LPQu9Cw0LLQu9C10L3QuNC1INC_0L7QtCDQt9Cw0LPQvtC70L7QstC60L7QvCDigJQg0LfQtdGA0LrQsNC70L4g0LvQtdC90YLRiyAqLwogICAgdmFyIGlkeCA9IG9uZShzY29wZSwgJy5pbnRybyAuaWR4Jyk7CiAgICBpZiAoaWR4KSB7CiAgICAgIHdoaWxlIChpZHguZmlyc3RDaGlsZCkgaWR4LnJlbW92ZUNoaWxkKGlkeC5maXJzdENoaWxkKTsKICAgICAgZC50aWxlcy5mb3JFYWNoKGZ1bmN0aW9uICh0bCwgaSkgewogICAgICAgIHZhciBsaSA9IGRvYy5jcmVhdGVFbGVtZW50KCdsaScpLCBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKSwKICAgICAgICAgICAgYiA9IGRvYy5jcmVhdGVFbGVtZW50KCdiJyksIHMgPSBkb2MuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdGwuaHJlZik7CiAgICAgICAgYi50ZXh0Q29udGVudCA9IHBhZDIoaSArIDEpOwogICAgICAgIHMudGV4dENvbnRlbnQgPSB0bC50aXRsZTsKICAgICAgICBhLmFwcGVuZENoaWxkKGIpOyBhLmFwcGVuZENoaWxkKHMpOyBsaS5hcHBlbmRDaGlsZChhKTsKICAgICAgICBpZHguYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCdcbiAgICAgICcpKTsKICAgICAgICBpZHguYXBwZW5kQ2hpbGQobGkpOwogICAgICB9KTsKICAgICAgaWR4LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgnXG4gICAgJykpOwogICAgfQogICAgdmFyIHRvdGFsID0gb25lKHNjb3BlLCAnLmdhbC1oZWFkIC5jb3VudCBpJyk7CiAgICBpZiAodG90YWwpIHRvdGFsLnRleHRDb250ZW50ID0gJy8gJyArIHBhZDIoZC50aWxlcy5sZW5ndGgpOwoKICAgIC8qINC_0YDQuNC30YvQsiAqLwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmZpbmFsID4gLmxhYmVsJyksIGQuY3RhLmxhYmVsKTsKICAgIHZhciBjdGFUaXRsZSA9IG9uZShzY29wZSwgJy5maW5hbCAuaDInKTsKICAgIGlmIChjdGFUaXRsZSAmJiB0eXBlb2YgZC5jdGEudGl0bGUgPT09ICdzdHJpbmcnKSBjdGFUaXRsZS5pbm5lckhUTUwgPSBkLmN0YS50aXRsZTsKICAgIGFsbChzY29wZSwgJy5maW5hbCAuYnRucyAuYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICB2YXIgYnQgPSBkLmN0YS5idXR0b25zW2ldOwogICAgICBpZiAoIWJ0KSByZXR1cm47CiAgICAgIGlmIChidC5ocmVmKSBiLnNldEF0dHJpYnV0ZSgnaHJlZicsIGJ0LmhyZWYpOwogICAgICBiLnRleHRDb250ZW50ID0gYnQudGV4dCArICcg4oaXJzsKICAgIH0pOwoKICAgIC8qINC_0L7QtNCy0LDQuyAqLwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmZvb3RlciAuY29weScpLCBkLmZvb3Rlci5jb3B5KTsKICAgIGFsbChzY29wZSwgJy5zb2NpYWxzIGEnKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgIHZhciBzID0gZC5mb290ZXIuc29jaWFsc1tpXTsKICAgICAgaWYgKCFzKSByZXR1cm47CiAgICAgIHNldFBsYWluKGEsIHMubGFiZWwpOwogICAgICBpZiAocy5ocmVmKSBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHMuaHJlZik7CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7QsiAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIGxkU2NyaXB0KGRvYykgewogICAgcmV0dXJuIGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3BvcnRmb2xpbyNwYWdlJykgPiAtMTsKICAgIH0pWzBdOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRMZChkb2MsIGQpIHsKICAgIHZhciBzID0gbGRTY3JpcHQoZG9jKTsKICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIgbGQranNvbiDQv9C-0YDRgtGE0L7Qu9C40L4nIH07CgogICAgdmFyIG87CiAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAnbGQranNvbiDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQoKICAgIHZhciBncmFwaCA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgc3luY0Nhbm9uKGdyYXBoKTsKICAgIHZhciBwYWdlID0gZ3JhcGguZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBTdHJpbmcoblsnQGlkJ10gfHwgJycpLmluZGV4T2YoJyNwYWdlJykgPiAtMTsgfSlbMF07CiAgICBpZiAoIXBhZ2UpIHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9CyIGxkK2pzb24g0L3QtSDQvdCw0LnQtNC10L0g0YPQt9C10Lsg0YHRgtGA0LDQvdC40YbRiycgfTsKCiAgICBpZiAoZC5zZW8ubmFtZSkgcGFnZS5uYW1lID0gZC5zZW8ubmFtZTsKICAgIGlmIChkLnNlby5kZXNjcmlwdGlvbikgcGFnZS5kZXNjcmlwdGlvbiA9IGQuc2VvLmRlc2NyaXB0aW9uOwoKICAgIHZhciBwYXJ0cyA9IEFycmF5LmlzQXJyYXkocGFnZS5oYXNQYXJ0KSA_IHBhZ2UuaGFzUGFydCA6IFtdOwogICAgcGFnZS5oYXNQYXJ0ID0gZC50aWxlcy5tYXAoZnVuY3Rpb24gKHRsLCBpKSB7CiAgICAgIHZhciBzcmMgPSBwYXJ0c1tpXSB8fCB7fTsKICAgICAgcmV0dXJuIHsKICAgICAgICAnQHR5cGUnOiBzcmNbJ0B0eXBlJ10gfHwgJ0ltYWdlR2FsbGVyeScsCiAgICAgICAgbmFtZTogdGwuc2VvTmFtZSB8fCB0bC50aXRsZSwKICAgICAgICB1cmw6IHRsLmhyZWYsCiAgICAgICAgaW1hZ2U6IHRsLmltZwogICAgICB9OwogICAgfSk7CgogICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMiksIGVycjogbnVsbCB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgNC60LAgLS0tLS0tLS0tLQogICAgINCR0LvQvtC6IHYzINGB0L7RgdGC0L7QuNGCINC40Lc6INC60L7QvNC80LXQvdGC0LDRgNC40Y8t0YjQsNC_0LrQuCwg0L7QtNC90L7Qs9C-IDxzdHlsZT4gKNCyINC90ZHQvCDQstGI0LjRgtGL0LUKICAgICDRiNGA0LjRhNGC0YspLCDRgNCw0LfQvNC10YLQutC4ICNhdnpwLCDQtNCy0YPRhSA8c2NyaXB0PiDRgSBHU0FQINC4IFNjcm9sbFRyaWdnZXIsINGB0LrRgNC40L_RgtCwCiAgICAg0LvQtdC90YLRiyDQuCBsZCtqc29uLiDQktGB0ZEsINC60YDQvtC80LUg0L_QvtC70LXQuSDRhNC-0YDQvNGLLCDQv9C10YDQtdC90L7RgdC40YLRgdGPINC00L7RgdC70L7QstC90L4uCiAgICAgR29vZ2xlIEZvbnRzINC90LUg0LTQvtCx0LDQstC70Y_QtdC8OiDRiNGA0LjRhNGC0Ysg0YPQttC1INCy0L3Rg9GC0YDQuCA8c3R5bGU-LiAqLwoKICBmdW5jdGlvbiBwYWdlU291cmNlKCkgewogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz90PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KTsKICB9CgogIGZ1bmN0aW9uIGhlYWRDb21tZW50KGRvYykgewogICAgdmFyIHcgPSBkb2MuY3JlYXRlVHJlZVdhbGtlcihkb2MuYm9keSwgMTI4IC8qIFNIT1dfQ09NTUVOVCAqLywgbnVsbCwgZmFsc2UpLCBuOwogICAgd2hpbGUgKChuID0gdy5uZXh0Tm9kZSgpKSkgewogICAgICBpZiAoKG4ubm9kZVZhbHVlIHx8ICcnKS5pbmRleE9mKCdBVkFOWkFUTy5SVSDigJQgL3BvcnRmb2xpbycpID4gLTEpIHJldHVybiAnPCEtLScgKyBuLm5vZGVWYWx1ZSArICctLT4nOwogICAgfQogICAgcmV0dXJuICcnOwogIH0KCiAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgcmV0dXJuIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChodG1sKSB7CiAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTsKCiAgICAgIHZhciBzY29wZSA9IGRvYy5nZXRFbGVtZW50QnlJZCgnYXZ6cCcpOwogICAgICB2YXIgc3R5bGUgPSBhbGwoZG9jLCAnc3R5bGUnKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcjYXZ6cCAudHJhY2snKSA-IC0xOwogICAgICB9KVswXTsKICAgICAgdmFyIHBsYWluID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpOwogICAgICB2YXIgZ3NhcEpzID0gcGxhaW4uZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiAvXCogR1NBUCAzXC4vLnRlc3QoeC50ZXh0Q29udGVudC5zbGljZSgwLCAyMDApKTsgfSlbMF07CiAgICAgIHZhciBzdEpzID0gcGxhaW4uZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiAvXCogU2Nyb2xsVHJpZ2dlciAzXC4vLnRlc3QoeC50ZXh0Q29udGVudC5zbGljZSgwLCAyMDApKTsgfSlbMF07CiAgICAgIHZhciBtYWluSnMgPSBwbGFpbi5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZigiZ2V0RWxlbWVudEJ5SWQoJ2F2enAnKSIpID4gLTE7IH0pWzBdOwoKICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgaWYgKCFzY29wZSkgbWlzc2luZy5wdXNoKCfQsdC70L7QuiAjYXZ6cCcpOwogICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICBpZiAoIWdzYXBKcykgbWlzc2luZy5wdXNoKCdHU0FQJyk7CiAgICAgIGlmICghc3RKcykgbWlzc2luZy5wdXNoKCdTY3JvbGxUcmlnZ2VyJyk7CiAgICAgIGlmICghbWFpbkpzKSBtaXNzaW5nLnB1c2goJ9GB0LrRgNC40L_RgiDQu9C10L3RgtGLJyk7CiAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LUg0L3QsNC50LTQtdC90L46ICcgKyBtaXNzaW5nLmpvaW4oJywgJykpOwoKICAgICAgd3JpdGVBbGwoc2NvcGUsIGQpOwogICAgICB2YXIgbGQgPSBidWlsZExkKGRvYywgZCk7CiAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICByZXR1cm4gWwogICAgICAgIGhlYWRDb21tZW50KGRvYyksCiAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAnJywKICAgICAgICBnc2FwSnMub3V0ZXJIVE1MLAogICAgICAgIHN0SnMub3V0ZXJIVE1MLAogICAgICAgIG1haW5Kcy5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICBsZC50ZXh0LAogICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgXS5qb2luKCdcbicpOwogICAgfSk7CiAgfQoKCiAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICB2YXIgdGEgPSBib3gucXVlcnlTZWxlY3RvcignI2F2enBmLW91dCcpOwogICAgdGEudmFsdWUgPSB0ZXh0OwogICAgdGEuc2VsZWN0KCk7CiAgICB2YXIgb2sgPSBmYWxzZTsKICAgIHRyeSB7IG9rID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaCAoZSkge30KICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogIH0KCiAgYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwZi1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgYXNzZW1ibGUoY29sbGVjdCgpKS50aGVuKGZ1bmN0aW9uIChvdXQpIHsKICAgICAgY29weShvdXQsICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIG91dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiAvcG9ydGZvbGlvINC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLicpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgfTsKCiAgLyog0J_RgNC-0LLQtdGA0LrQsDog0YHQvtCx0YDQsNGC0Ywg0LHQtdC3INC10LTQuNC90L7QuSDQv9GA0LDQstC60LgsINGA0LDQt9C-0LHRgNCw0YLRjCDRgNC10LfRg9C70YzRgtCw0YIg0L7QsdGA0LDRgtC90L4KICAgICDQuCDRgdCy0LXRgNC40YLRjCDRgSDQuNGB0YXQvtC00L3QuNC60L7QvC4g0JvQvtCy0LjRgiDQv9C-0YLQtdGA0Y4g0L_RgNC-0LHQtdC70L7QsiDQuCDRgNCw0YHRhdC-0LbQtNC10L3QuNC1CiAgICAg0YHQtdC70LXQutGC0L7RgNC-0LIg0L_QvtGB0LvQtSDQv9GA0LDQstC-0Log0LTQuNC30LDQudC90LAuICovCiAgYm94LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwZi10ZXN0Jykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgYXNzZW1ibGUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKSkudGhlbihmdW5jdGlvbiAob3V0KSB7CiAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKG91dCwgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5nZXRFbGVtZW50QnlJZCgnYXZ6cCcpKTsKICAgICAgYWdhaW4uc2VvID0gY2ZnLnNlbzsKICAgICAgLyogc2VvTmFtZSDQttC40LLRkdGCINCyIGxkK2pzb24sINCwINC90LUg0LIg0YDQsNC30LzQtdGC0LrQtSDigJQg0YHQstC10YDRj9C10Lwg0YLQvtC70YzQutC-INCy0ZHRgNGB0YLQutGDICovCiAgICAgIGFnYWluLnRpbGVzLmZvckVhY2goZnVuY3Rpb24gKHRsLCBpKSB7IHRsLnNlb05hbWUgPSBjZmcudGlsZXNbaV0uc2VvTmFtZTsgfSk7CiAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoY2ZnKSwgYiA9IEpTT04uc3RyaW5naWZ5KGFnYWluKTsKICAgICAgaWYgKGEgPT09IGIpIHsKICAgICAgICBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgb3V0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgIH0KICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC_0L7RgNGC0YTQvtC70LjQviDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwp9fSwKe2lkOiJyZXBvcnQiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0YDQtdC_0L7RgNGC0LDQttC10LkiLHNob3J0OiLQoNC10L_QvtGA0YLQsNC20LgiLGhpbnQ6ItGB0L7QsdGL0YLQuNGPLCDRhdGA0L7QvdC40LrQsCwg0YbQtdC90YssINCy0L7Qv9GA0L7RgdGLIOKAlCDQv9C70Y7RgSDQv9C-0LTRgtGP0LPQuNCy0LDQvdC40LUg0LjQtyDRgNCw0LfQtNC10LvQsCIscGFnZXM6WyIvcmVwb3J0YXpobnl5LWZvdG9ncmFmLXYta2F6YW5pLWFudG9uLWF2YW56YXRvIl0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCh0KLQoNCQ0J3QmNCm0Ksg0KDQldCf0J7QoNCi0JDQltCV0JkgIHYyLjEg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsCAo0YHRgtGA0LDQvdC40YbQsCB2My54LCDQttGD0YDQvdCw0LspCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvcmVwb3J0YXpobnl5LWZvdG9ncmFmLXYta2F6YW5pLWFudG9uLWF2YW56YXRvCgogICDQodGF0LXQvNCwINC_0YDQsNC50YHQsCDQuCDQv9C-0YDRgtGE0L7Qu9C40L46INGH0LjRgtCw0LXRgiDQttC40LLRg9GOINGB0YLRgNCw0L3QuNGG0YMsINC_0L7QtNGB0YLQsNCy0LvRj9C10YIKICAg0LfQvdCw0YfQtdC90LjRjyDQuNC3INGE0L7RgNC80YssINCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvC4KCiAgINCe0YLQu9C40YfQuNC1INC-0YIg0LTRgNGD0LPQuNGFINGB0YLRgNCw0L3QuNGGOiDQt9C00LXRgdGMINC10YHRgtGMINC60L3QvtC_0LrQsCDCq9Cf0L7QtNGC0Y_QvdGD0YLRjCDRgdC-0LHRi9GC0LjRj8K7CiAgIOKAlCDQv9Cw0L3QtdC70Ywg0YHRgNCw0LLQvdC40LLQsNC10YIg0YDQsNC30LTQtdC7IC9yZXBvcnRhemhueWUtZm90b3Nlc3NpaSDRgSDQutCw0YDRgtC-0YfQutCw0LzQuAogICDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0Lgg0LTQvtC_0LjRgdGL0LLQsNC10YIg0L3QtdC00L7RgdGC0LDRjtGJ0LjQtSDQsiDQutC-0L3QtdGGINGB0LXRgtC60LgsINCyINGC0L7QuSDQttC1CiAgINCy0ZHRgNGB0YLQutC1INC4INGBINGC0LXQvCDQttC1INGA0LjRgtC80L7QvCDQv9C-0Y_QstC70LXQvdC40Y8uCgogICDQp9GC0L4g0YHQuNC90YXRgNC-0L3QuNC30LjRgNGD0LXRgtGB0Y8g0YHQsNC80L46CiAgICAg0LrQsNGA0YLQvtGH0LrQuCDihpIgbnVtYmVyT2ZJdGVtcyDQuCBpdGVtTGlzdEVsZW1lbnQg0LIgbGQranNvbgogICAgINCy0L7Qv9GA0L7RgdGLIEZBUSDihpIg0LLQuNC00LjQvNGL0Lkg0LHQu9C-0Log0LggRkFRUGFnZQogICAgINC30LDQs9C-0LvQvtCy0L7QuiDQuCDQvtC_0LjRgdCw0L3QuNC1IOKGkiBpbml0TWV0YSDQuCBsZCtqc29uCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyog0KHRgdGL0LvQutCwINC90LAg0YjRgNC40YTRgtGLINCx0LvQvtC60LAg4oCUINC60L7QvdGB0YLQsNC90YLQsCwg0LAg0L3QtSDRgtC-LCDRh9GC0L4g0L3QsNGI0LvQvtGB0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtC1LgogICAgINCSIDxoZWFkPiB3Zm9saW8g0YHQstC-0Y8g0YHRgdGL0LvQutCwINC90LAgSm9zdC9SdWJpayDQvtGCINGC0LXQvNGLLCDQuCDQvtC90LAg0YHRgtC-0LjRgiDQoNCQ0J3QrNCo0JUKICAgICDQvdCw0YjQtdC5OiDQv9Cw0L3QtdC70Ywg0LHRgNCw0LvQsCDQv9C10YDQstGD0Y4g0L_QvtC00YXQvtC00Y_RidGD0Y4g0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQvtC5INC_0L7QtNC80LXQvdGP0LvQsAogICAgINC90LDRh9C10YDRgtCw0L3QuNGPINCx0LvQvtC60LAg0L3QsCDRgtC10LzQuNC90YsuINCd0LDQsdC-0YAg0LLQtdGB0L7QsiDQt9Cw0LTQsNC9IENTUyDQsdC70L7QutCwLCDQv9C-0Y3RgtC-0LzRgwogICAgINC00LXRgNC20LjQvCDQtdCz0L4g0LfQtNC10YHRjC4g0JzQtdC90Y_QtdGC0YHRjyDQtNC40LfQsNC50L0g4oCUINC80LXQvdGP0LXRgtGB0Y8g0Y3RgtCwINGB0YLRgNC-0LrQsC4gKi8KICB2YXIgQVZaX0ZPTlRfTElOSyA9ICc8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI_ZmFtaWx5PUpvc3Q6d2dodEAyMDA7MzAwOzQwMDs1MDA7NjAwJyArCiAgICAnJmFtcDtmYW1pbHk9UnViaWs6d2dodEAxMDA7MjAwOzMwMCZhbXA7ZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPic7CgogIC8qIC0tLS0tLS0tLS0g0L7QsdGJ0LjQtSDQutCw0YDRgtC-0YfQutC4OiDQs9C70LDQstC90LDRjyDigJQg0LjRgdGC0L7Rh9C90LjQuiDQuNGB0YLQuNC90YsgLS0tLS0tLS0tLQogICAgINCj0LfQu9GLICNwaG90b2dyYXBoZXIsICNidXNpbmVzcyDQuCAjd2Vic2l0ZSDQvtC_0LjRgdGL0LLQsNGO0YIg0L7QtNC90L7Qs9C-INC4INGC0L7Qs9C-INC20LUKICAgICDRh9C10LvQvtCy0LXQutCwLCDQvtC00L3QviDQtNC10LvQviDQuCDQvtC00LjQvSDRgdCw0LnRgi4g0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0LkKICAgICDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40LoKICAgICDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4INCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQv9GA0L7RgdGC0L4KICAgICDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINC40YUg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUsCiAgICAg0L_QvtGN0YLQvtC80YMg0YDQsNGB0YXQvtC00LjRgtGM0YHRjyDQuNC8INCx0L7Qu9GM0YjQtSDQvdC10YfQtdC8LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMzAg0L7QutGC0Y_QsdGA0Y8gMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5LTAxLTAxIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICIxNDkwMC01NDkwMCIsCiAgICAgICJvcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICJkYXlPZldlZWsiOiBbCiAgICAgICAgICAgICJNb25kYXkiLAogICAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgICAiVGh1cnNkYXkiLAogICAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICAgIlN1bmRheSIKICAgICAgICAgIF0sCiAgICAgICAgICAib3BlbnMiOiAiMTA6MDAiLAogICAgICAgICAgImNsb3NlcyI6ICIyMDowMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enItcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIGxpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6LXJlcCcpOwogIGlmICghbGl2ZSkgeyBhbGVydCgnQVZaOiDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0L3QtdGCINCx0LvQvtC60LAgI2F2ei1yZXAnKTsgcmV0dXJuOyB9CgogIHZhciBMSVNUSU5HID0gJy9yZXBvcnRhemhueWUtZm90b3Nlc3NpaSc7CiAgdmFyIENBUF9TVFVCID0gJ9Cg0LXQv9C-0YDRgtCw0LYgwrcg0JrQsNC30LDQvdGMJzsKCiAgLyogLS0tLS0tLS0tLSDRg9GC0LjQu9C40YLRiyAtLS0tLS0tLS0tICovCgogIC8qINCh0YHRi9C70LrQsCDQutCw0YDRgtC-0YfQutC4INC70LjRgdGC0LjQvdCz0LA6INC90LAg0LTQtdGB0LrRgtC-0L_QtSDQvtC90LAg0LLQu9C-0LbQtdC90LAg0LIgLmxpc3RpbmctaXRlbSwKICAgICDQvNC-0LHQuNC70YzQvdGL0Lwgd2ZvbGlvINC-0YLQtNCw0ZHRgiAubGlzdGluZy1pdGVtINGD0LbQtSDRgdCw0LzQvtC5INGB0YHRi9C70LrQvtC5LiBxdWVyeVNlbGVjdG9yCiAgICAg0YHQvNC-0YLRgNC40YIg0YLQvtC70YzQutC-INCy0L3Rg9GC0YDRjCDRjdC70LXQvNC10L3RgtCwIOKAlCDQsdC10Lcg0Y3RgtC-0Lkg0L_RgNC-0LLQtdGA0LrQuCDRgSDRgtC10LvQtdGE0L7QvdCwCiAgICAg0L_QvtC00YLRj9Cz0LjQstCw0LvQvtGB0Ywg0L3QvtC70Ywg0YDQsNCx0L7Rgi4gKi8KICBmdW5jdGlvbiBpdGVtTGluayhpdCkgewogICAgaWYgKCFpdCkgcmV0dXJuIG51bGw7CiAgICBpZiAoaXQudGFnTmFtZSA9PT0gJ0EnICYmIGl0LmdldEF0dHJpYnV0ZSgnaHJlZicpKSByZXR1cm4gaXQ7CiAgICByZXR1cm4gb25lKGl0LCAnYVtocmVmXScpOwogIH0KCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICAvKiBpbm5lckhUTUwg0LHQtdGA0ZHQvCDQutCw0Log0LXRgdGC0YwsINCx0LXQtyDQvtCx0YDQtdC30LrQuDog0LLQvdGD0YLRgNC4IC5mYXEtYS1pbm5lcgogICAgINGB0YLQvtGP0YIg0L_QtdGA0LXQvdC-0YHRiyDQuCDQvtGC0YHRgtGD0L_Riywg0Lgg0LXRgdC70Lgg0LjRhSDRgdGA0LXQt9Cw0YLRjCwg0YDQsNC30LzQtdGC0LrQsCDQv9C10YDQtdGB0YLQsNC90LXRggogICAgINGB0L7QstC_0LDQtNCw0YLRjCDRgSDQuNGB0YXQvtC00L3QvtC5LiDQndCwINCy0LjQtCDRjdGC0L4g0L3QtSDQstC70LjRj9C10YIsINC90L4g0LvQvtC80LDQtdGCINC_0YDQvtCy0LXRgNC60YMuICovCiAgZnVuY3Rpb24gaHRtbChlbCkgeyByZXR1cm4gZWwgPyBlbC5pbm5lckhUTUwgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIHNlYyhzY29wZSwgbmFtZSkgeyByZXR1cm4gb25lKHNjb3BlLCAnc2VjdGlvbi4nICsgbmFtZSk7IH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUpIHsKICAgIHZhciBsaW5lcyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgdmFyIHByaWNlID0gb25lKHNjb3BlLCAnLmxlZGUtcHJpY2UnKTsKICAgIHZhciBjaHJvbiA9IHNlYyhzY29wZSwgJ2Nocm9uaWNsZScpOwogICAgdmFyIGNhc2VzID0gc2VjKHNjb3BlLCAnY2FzZXMnKTsKICAgIHZhciBtZXRoID0gc2VjKHNjb3BlLCAnbWV0aG9kJyk7CiAgICB2YXIgcHJpYyA9IHNlYyhzY29wZSwgJ3ByaWNpbmcnKTsKICAgIHZhciBmYXEgPSBzZWMoc2NvcGUsICdmYXEnKTsKCiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllYnJvdzogb3duVGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChsaW5lc1swXSksCiAgICAgICAgbGluZTI6IHQobGluZXNbMV0pLAogICAgICAgIGxpbmUzOiBsaW5lc1syXSA_IHQob25lKGxpbmVzWzJdLCAnZW0nKSB8fCBsaW5lc1syXSkgOiAnJwogICAgICB9LAogICAgICBsZWRlOiB0KG9uZShzY29wZSwgJy5sZWRlJykpLAogICAgICBwcmljZTogeyB0ZXh0OiBwcmljZSA_IG93blRleHQocHJpY2UpIDogJycsIGhyZWY6IHByaWNlID8gKHByaWNlLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnKSA6ICcnIH0sCiAgICAgIHRpY2tlcjogW10sCiAgICAgIGNocm9uOiB7CiAgICAgICAgbGFiZWw6IHQob25lKGNocm9uLCAnLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShjaHJvbiwgJy5oMicpKSwKICAgICAgICBub3RlOiBodG1sKG9uZShjaHJvbiwgJy5jaHJvbi1ub3RlJykpLAogICAgICAgIHNvdXJjZTogaHRtbChvbmUoY2hyb24sICcuY2hyb24tc291cmNlJykpLAogICAgICAgIGl0ZW1zOiBhbGwoY2hyb24sICcuY2hyb24taXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgIHJldHVybiB7IG51bTogdChvbmUoaXQsICcuY2hyb24tbnVtJykpLCBjYXA6IHQob25lKGl0LCAnLmNocm9uLWNhcCcpKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGNhc2VzOiB7CiAgICAgICAgbGFiZWw6IHQob25lKGNhc2VzLCAnLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShjYXNlcywgJy5oMicpKSwKICAgICAgICBpdGVtczogYWxsKGNhc2VzLCAnLmNhc2UnKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIHZhciBpbSA9IG9uZShjLCAnaW1nJyk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBocmVmOiBjLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnLAogICAgICAgICAgICBpbWc6IGltID8gKGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpIDogJycsCiAgICAgICAgICAgIGFsdDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgdGl0bGU6IHQob25lKGMsICcuY2FwIGgzJykpLAogICAgICAgICAgICBjYXA6IHQob25lKGMsICcuY2FwIHNwYW4nKSksCiAgICAgICAgICAgIGhlcm86IGMuY2xhc3NOYW1lLmluZGV4T2YoJ2Nhc2UtaGVybycpID4gLTEsCiAgICAgICAgICAgIGlzTmV3OiBmYWxzZQogICAgICAgICAgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBtZXRob2Q6IHsKICAgICAgICBsYWJlbDogdChvbmUobWV0aCwgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUobWV0aCwgJy5oMicpKSwKICAgICAgICBpdGVtczogYWxsKG1ldGgsICcubWV0aG9kLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICByZXR1cm4geyB0aXRsZTogdChvbmUoaXQsICdoMycpKSwgdGV4dDogdChvbmUoaXQsICdwJykpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgcHJpY2luZzogewogICAgICAgIGxhYmVsOiB0KG9uZShwcmljLCAnLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShwcmljLCAnLmgyJykpLAogICAgICAgIGZpZ3VyZTogb3duVGV4dChvbmUocHJpYywgJy5wcmljZS1maWd1cmUnKSksCiAgICAgICAgdW5pdDogdChvbmUocHJpYywgJy5wcmljZS11bml0JykpLAogICAgICAgIHRheDogdChvbmUocHJpYywgJy5wcmljZS10YXgnKSksCiAgICAgICAgaW5jbFRpdGxlOiB0KG9uZShwcmljLCAnLmluY2wtdGl0bGUnKSksCiAgICAgICAgaW5jbDogYWxsKHByaWMsICcuaW5jbCBsaScpLm1hcChmdW5jdGlvbiAobGkpIHsgcmV0dXJuIHQobGkpOyB9KQogICAgICB9LAogICAgICBmYXE6IHsKICAgICAgICBsYWJlbDogdChvbmUoZmFxLCAnLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShmYXEsICcuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChmYXEsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICByZXR1cm4geyBxOiBvd25UZXh0KG9uZShpdCwgJy5mYXEtcScpKSwgYTogaHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSksIHNjaGVtYUE6ICcnIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgY3RhOiB7CiAgICAgICAgdGl0bGU6IGh0bWwob25lKHNjb3BlLCAnLmN0YSAuaDInKSksCiAgICAgICAgYnV0dG9uczogYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKVswXSksIGhyZWY6IGIuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBtZXRhOiB7IHRpdGxlOiAnJywgZGVzYzogJycgfSwKICAgICAgLyog0KDQsNC30LzQtdGC0LrQsCDQvtC_0LjRgdGL0LLQsNC10YIg0YDQsNCx0L7RgtGLINGA0LDQt9Cy0ZHRgNC90YPRgtC10LUsINGH0LXQvCDQv9C-0LTQv9C40YHRjCDQv9C-0LQg0LrQsNGA0YLQvtGH0LrQvtC5OgogICAgICAgICDCq9Cg0LXQv9C-0YDRgtCw0LYg0YEg0L7RgtC60YDRi9GC0LjRjyDRjdC60YHRgtGA0LjQvC3Qv9Cw0YDQutCwINCj0YDQsNC8INCyINCa0LDQt9Cw0L3QuMK7INC_0YDQvtGC0LjQsgogICAgICAgICDCq9Ce0YLQutGA0YvRgtC40LUg0Y3QutGB0YLRgNC40Lwt0L_QsNGA0LrQsCDQo9GA0LDQvMK7LiDQlNC10YDQttC40Lwg0LjRhSDQvtGC0LTQtdC70YzQvdGL0LzQuCDQv9C-0LvRj9C80Lgg4oCUCiAgICAgICAgINC40L3QsNGH0LUg0L_QtdGA0LXRgdCx0L7RgNC60LAg0L7QsdC10LTQvdGP0LXRgiDRgNCw0LfQvNC10YLQutGDLiDQotC-0YIg0LbQtSDRg9GA0L7QuiDRg9C20LUg0LHRi9C7CiAgICAgICAgINC90LAg0L_QvtGA0YLRhNC-0LvQuNC-LCDQsdC70L7Qs9C1INC4INGB0YLRgNCw0L3QuNGG0LUg0YDQsNC30YDQsNCx0L7RgtC60Lgg0YHQsNC50YLQvtCyLiAqLwogICAgICBsZDogeyBkZXNjOiAnJyB9CiAgICB9OwogIH0KCiAgLyog0KDQsNC30LLRkdGA0L3Rg9GC0YvQtSDQvdCw0LfQstCw0L3QuNGPINGA0LDQsdC-0YIg0Lgg0L7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLIOKAlCDQuNC3INGB0LDQvNC-0Lkg0YDQsNC30LzQtdGC0LrQuC4KICAgICDQmNGJ0LXQvCDRg9C30LXQuyDQv9C-INCw0LTRgNC10YHRgywg0LrQvtGC0L7RgNGL0Lkg0YHRgtC-0Y_QuyDQsiDQutC-0LTQtSDQlNCeINC_0YDQsNCy0L7Qui4gKi8KICBmdW5jdGlvbiByZWFkTGRFeHRyYXMoZG9jLCBjKSB7CiAgICB2YXIgcyA9IChkb2MucXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpIHx8IFtdKVswXTsKICAgIGlmICghcykgcmV0dXJuOwogICAgdmFyIG87CiAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfSBjYXRjaCAoZSkgeyByZXR1cm47IH0KICAgIHZhciBnID0gb1snQGdyYXBoJ10gfHwgW107CiAgICB2YXIgcGFnZSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiAvV2ViUGFnZXxDb2xsZWN0aW9uUGFnZS8udGVzdChTdHJpbmcoblsnQHR5cGUnXSkpOyB9KVswXTsKICAgIGlmIChwYWdlICYmIHBhZ2UuZGVzY3JpcHRpb24pIGMubGQuZGVzYyA9IHBhZ2UuZGVzY3JpcHRpb247CiAgICB2YXIgbGlzdCA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnSXRlbUxpc3QnOyB9KVswXTsKICAgIGlmICghbGlzdCB8fCAhQXJyYXkuaXNBcnJheShsaXN0Lml0ZW1MaXN0RWxlbWVudCkpIHJldHVybjsKICAgIHZhciBieVVybCA9IHt9OwogICAgbGlzdC5pdGVtTGlzdEVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbiAoeCkgeyBpZiAoeCAmJiB4LnVybCkgYnlVcmxbeC51cmxdID0geC5uYW1lIHx8ICcnOyB9KTsKICAgIGMuY2FzZXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgdmFyIGZyb21MZCA9IGJ5VXJsW2l0LmhyZWZdOwogICAgICBpdC5zZW9OYW1lID0gZnJvbUxkIHx8IGxpc3QuaXRlbUxpc3RFbGVtZW50W2ldICYmIGxpc3QuaXRlbUxpc3RFbGVtZW50W2ldLm5hbWUgfHwgaXQudGl0bGU7CiAgICB9KTsKICB9CgogIHZhciBjZmcgPSByZWFkQ2ZnKGxpdmUpOwoKICAvKiDRgdGC0YDQvtC60LgsINC20LjQstGD0YnQuNC1INCyINGB0LrRgNC40L_RgtC1INGB0YLRgNCw0L3QuNGG0YsgKi8KICBmdW5jdGlvbiByZWFkU2NyaXB0Qml0cyhzcmMsIGMpIHsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgdGl0bGUgPSAnKCg_OlteJ1xcXXxcXC4pKiknLyk7CiAgICBpZiAobSkgYy5tZXRhLnRpdGxlID0gbVsxXS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgIG0gPSBzcmMubWF0Y2goL3ZhciBkZXNjID0gJygoPzpbXidcXF18XFwuKSopJy8pOwogICAgaWYgKG0pIGMubWV0YS5kZXNjID0gbVsxXS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgIG0gPSBzcmMubWF0Y2goL3ZhciBpdGVtcyA9IFxbKFtcc1xTXSo_KVxdOy8pOwogICAgaWYgKG0pIHsKICAgICAgYy50aWNrZXIgPSAobVsxXS5tYXRjaCgvJygoPzpbXidcXF18XFwuKSopJy9nKSB8fCBbXSkubWFwKGZ1bmN0aW9uIChzKSB7CiAgICAgICAgcmV0dXJuIHMuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcJy9nLCAiJyIpOwogICAgICB9KTsKICAgIH0KICB9CgogIHZhciBsaXZlU2NyaXB0ID0gYWxsKGRvY3VtZW50LCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdpbml0Q2hyb25pY2xlJykgPiAtMTsKICB9KVswXTsKICBpZiAobGl2ZVNjcmlwdCkgcmVhZFNjcmlwdEJpdHMobGl2ZVNjcmlwdC50ZXh0Q29udGVudCwgY2ZnKTsKICByZWFkTGRFeHRyYXMoZG9jdW1lbnQsIGNmZyk7CgogIC8qINC_0L7QuNGB0LrQvtCy0YvQtSDQvtGC0LLQtdGC0YsgRkFRICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBzID0gYWxsKGRvY3VtZW50LCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgaWYgKCFzKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgIHZhciBmID0gKG9bJ0BncmFwaCddIHx8IFtdKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJzsgfSlbMF07CiAgICAgIGlmICghZiB8fCAhQXJyYXkuaXNBcnJheShmLm1haW5FbnRpdHkpKSByZXR1cm47CiAgICAgIGYubWFpbkVudGl0eS5mb3JFYWNoKGZ1bmN0aW9uIChxLCBpKSB7CiAgICAgICAgaWYgKGNmZy5mYXEuaXRlbXNbaV0pIGNmZy5mYXEuaXRlbXNbaV0uc2NoZW1hQSA9IChxLmFjY2VwdGVkQW5zd2VyICYmIHEuYWNjZXB0ZWRBbnN3ZXIudGV4dCkgfHwgJyc7CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZSkgeyAvKiDQvtGB0YLQsNC90LXRgtGB0Y8g0L_Rg9GB0YLRi9C8LCDQv9GA0Lgg0YHQsdC-0YDQutC1INCy0L7Qt9GM0LzRkdC8INC40Lcg0LjRgdGF0L7QtNC90LjQutCwICovIH0KICB9KSgpOwoKICAvKiAtLS0tLS0tLS0tINCy0ZHRgNGB0YLQutCwINC_0LDQvdC10LvQuCAtLS0tLS0tLS0tICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2enItcm9vdCwjYXZ6ci1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6ci1yb290IGlucHV0LCNhdnpyLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnpyLXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6ci1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnpyLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enItaGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6ci1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9JywKICAgICcjYXZ6ci1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnpyLWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItc2VjPnN1bW1hcnl7cGFkZGluZzoxMnB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZhZmFmYTtsaXN0LXN0eWxlOm5vbmV9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QkUgICJ9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWYgaW5wdXQsI2F2enItcm9vdCAuYXZ6ci1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NzBweDtyZXNpemU6dmVydGljYWx9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2enItcm9vdCAuYXZ6ci1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6ci13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWNhcmQubmV1e2JvcmRlci1jb2xvcjojYzhhMDIwO2JhY2tncm91bmQ6I2ZmZmRmNH0nLAogICAgJyNhdnpyLXJvb3QgLmF2enItY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1jYXJkIGg0IGJ7Y29sb3I6I2EzNzgwMCAhaW1wb3J0YW50fScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWltZz5pbWd7d2lkdGg6NzhweDtoZWlnaHQ6NzhweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6I2VjZWNlYztmbGV4Om5vbmV9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLWltZyAuZ3tmbGV4OjF9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLW5vdGV7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjo2cHggMCAwfScsCiAgICAnI2F2enItcm9vdCAuYXZ6ci1oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6ci1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6ci1tc2d7Zm9udC1zaXplOjEzcHh9JywKICAgICcjYXZ6ci1yb290IC5hdnpyLXN0YXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTlweDtiYWNrZ3JvdW5kOiNmMGYwZjI7Zm9udC1zaXplOjEycHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINCb0LjRiNC90LjQuSDQv9C10YDQtdC90L7RgSDQv9C-0YHQu9C1IDx0ZXh0YXJlYT4g0L3QtSDRgdC70YPRh9Cw0LXQvTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIKICAgICAgINC_0LXRgNCy0YvQuSDQv9C10YDQtdC90L7RgSDRgdGA0LDQt9GDINC30LAg0L7RgtC60YDRi9Cy0LDRjtGJ0LjQvCDRgtC10LPQvtC8LiDQkdC10Lcg0Y3RgtC-0Lkg0YHRgtGA0L7QutC4CiAgICAgICDQt9C90LDRh9C10L3QuNGPLCDQvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEg0L_QtdGA0LXQvdC-0YHQsCDigJQg0LAg0YLQsNC6INGD0YHRgtGA0L7QtdC90Ysg0L7RgtCy0LXRgtGLIEZBUSwg4oCUCiAgICAgICDRgtC10YDRj9C70Lgg0LHRiyDQtdCz0L4g0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuICovCiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2enItZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpyLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgZnVuY3Rpb24gZHJhdygpIHsKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6ci13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6ci1oZWFkIj48aDI-0J_QsNC90LXQu9GMINGA0LXQv9C-0YDRgtCw0LbQtdC5PC9oMj4nICsKICAgICAgJzxzcGFuIGNsYXNzPSJhdnpyLXN0YXQiPtCh0L7QsdGL0YLQuNC5OiAnICsgY2ZnLmNhc2VzLml0ZW1zLmxlbmd0aCArICc8L3NwYW4-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpyLWIiIGlkPSJhdnpyLWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PjxkaXYgaWQ9ImF2enItYm9keSI-JzsKCiAgICAvKiDQmtCV0JnQodCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6ci1zZWMiIG9wZW4-PHN1bW1hcnk-0KHQvdGP0YLRi9C1INGB0L7QsdGL0YLQuNGPICgnICsgY2ZnLmNhc2VzLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2enItaGludCI-0JrQvdC-0L_QutCwINGB0LLQtdGA0Y_QtdGCINGA0LDQt9C00LXQuyAnICsgTElTVElORyArICcg0YEg0LrQsNGA0YLQvtGH0LrQsNC80Lgg0Lgg0LTQvtC_0LjRgdGL0LLQsNC10YIg0L3QtdC00L7RgdGC0LDRjtGJ0LjQtSAnICsKICAgICAgJ9CyINC60L7QvdC10YYg0LvQtdC90YLRiyDigJQg0YLQsNC6INC-0L3QuCDQv9C-0L_QsNC00LDRjtGCINCyINC60L7QtCDQuCDQuNGFINCy0LjQtNGP0YIg0L_QvtC40YHQutC-0LLQuNC60Lgg0Lgg0JjQmC4g0J_QvtC00L_QuNGB0Ywg0YMg0L3QvtCy0L7QuSDQutCw0YDRgtC-0YfQutC4IOKAlCDQt9Cw0LPQvtGC0L7QstC60LAgwqsnICsgQ0FQX1NUVUIgKyAnwrssINC10ZEg0L3Rg9C20L3QviDQv9C-0L_RgNCw0LLQuNGC0Ywg0YDRg9C60LDQvNC4LjwvcD4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpyLWhpbnQiPtCd0LAg0YHQsNC80L7QuSDRgdGC0YDQsNC90LjRhtC1INC90L7QstGL0LUg0YHRitGR0LzQutC4INC40Lcg0YDQsNC30LTQtdC70LAg0Lgg0YLQsNC6INC_0L7Rj9Cy0LvRj9GO0YLRgdGPINGB0LDQvNC4LCDRgdGA0LDQt9GDINC30LAg0L_QtdGA0LLQvtC5INC60LDRgNGC0L7Rh9C60L7QuS4gJyArCiAgICAgICfQrdGC0LAg0LrQvdC-0L_QutCwINC90YPQttC90LAg0YDQsNC3INCyINC90LXRgdC60L7Qu9GM0LrQviDQvNC10YHRj9GG0LXQsiwg0YfRgtC-0LHRiyDQstGI0LjRgtGMINC40YUg0LIg0LrQvtC0LiDQn9C10YDQstCw0Y8g0LrQsNGA0YLQvtGH0LrQsCDigJQg0LPQu9Cw0LLQvdCw0Y8g0YHRitGR0LzQutCwINC70LXQvdGC0YssINC90LAg0L3QtdC5INC_0LvQsNGI0LrQsCDQv9GD0LHQu9C40LrQsNGG0LjQuC48L3A-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpyLWIiIGlkPSJhdnpyLXB1bGwiPtCf0L7QtNGC0Y_QvdGD0YLRjCDRgdC-0LHRi9GC0LjRjyDQuNC3INGA0LDQt9C00LXQu9CwPC9idXR0b24-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6ci1ub3RlIiBpZD0iYXZ6ci1wdWxsLW1zZyI-PC9wPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnY2FzZXMubGFiZWwnLCBjZmcuY2FzZXMubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdjYXNlcy5oMicsIGNmZy5jYXNlcy5oMikgKyAnPC9kaXY-JzsKICAgIGNmZy5jYXNlcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enItY2FyZCcgKyAoYy5pc05ldyA_ICcgbmV1JyA6ICcnKSArICciPjxoND7QodC-0LHRi9GC0LjQtSAnICsgKGkgKyAxKSArCiAgICAgICAgKGMuaGVybyA_ICcg4oCUINC_0LXRgNCy0LDRjyDQsiDQu9C10L3RgtC1JyA6ICcnKSArIChjLmlzTmV3ID8gJyDigJQgPGI-0L3QvtCy0L7QtSwg0L_RgNC-0LLQtdGA0YzRgtC1INC_0L7QtNC_0LjRgdGMPC9iPicgOiAnJykgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ2Nhc2VzLml0ZW1zLicgKyBpICsgJy50aXRsZScsIGMudGl0bGUpICsKICAgICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0YwnLCAnY2FzZXMuaXRlbXMuJyArIGkgKyAnLmNhcCcsIGMuY2FwKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1ICjRgNCw0LfQstGR0YDQvdGD0YLQvtC1LCDQtNC70Y8g0L_QvtC40YHQutCwKScsICdjYXNlcy5pdGVtcy4nICsgaSArICcuc2VvTmFtZScsIGMuc2VvTmFtZSB8fCBjLnRpdGxlKSArCiAgICAgICAgZmllbGQoJ9Ch0YHRi9C70LrQsCcsICdjYXNlcy5pdGVtcy4nICsgaSArICcuaHJlZicsIGMuaHJlZikgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpyLWYiPjxsYWJlbD7QpNC-0YLQvtCz0YDQsNGE0LjRjzwvbGFiZWw-PGRpdiBjbGFzcz0iYXZ6ci1pbWciPicgKwogICAgICAgICc8aW1nIHNyYz0iJyArIGVzYyhjLmltZykgKyAnIiBkYXRhLXByZXY9ImNhc2VzLml0ZW1zLicgKyBpICsgJy5pbWciPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJnIj48aW5wdXQgZGF0YS1wPSJjYXNlcy5pdGVtcy4nICsgaSArICcuaW1nIiB2YWx1ZT0iJyArIGVzYyhjLmltZykgKyAnIj48L2Rpdj48L2Rpdj48L2Rpdj4nICsKICAgICAgICBmaWVsZCgnQWx0LdGC0LXQutGB0YInLCAnY2FzZXMuaXRlbXMuJyArIGkgKyAnLmFsdCcsIGMuYWx0KSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQqNCQ0J_QmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6ci1zZWMiPjxzdW1tYXJ5PtCo0LDQv9C60LA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6ci1pbiI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnaGVyby5leWVicm93JywgY2ZnLmhlcm8uZXllYnJvdykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKyBmaWVsZCgn0KHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMicsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDMgKNGB0LXRgNGL0LwpJywgJ2hlcm8ubGluZTMnLCBjZmcuaGVyby5saW5lMykgKwogICAgICBmaWVsZCgn0J_QvtC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2xlZGUnLCBjZmcubGVkZSwgJ2FyZWEnKSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpyLXJvdyI-JyArIGZpZWxkKCfQmtC90L7Qv9C60LAg0L3QsCDQvtCx0LvQvtC20LrQtSDigJQg0L3QsNC00L_QuNGB0YwnLCAncHJpY2UudGV4dCcsIGNmZy5wcmljZS50ZXh0KSArCiAgICAgIGZpZWxkKCfQmtC90L7Qv9C60LAg0L3QsCDQvtCx0LvQvtC20LrQtSDigJQg0LDQtNGA0LXRgScsICdwcmljZS5ocmVmJywgY2ZnLnByaWNlLmhyZWYpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwIOKAlCDRh9C10YDQtdC3INC30LDQv9GP0YLRg9GOICjQvdCwINGB0YLRgNCw0L3QuNGG0LUgdjMg0YHQutGA0YvRgtCwKScsICd0aWNrZXJMaW5lJywgY2ZnLnRpY2tlci5qb2luKCcsICcpLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCl0KDQntCd0JjQmtCQIOKAlCDQvdCwINGB0YLRgNCw0L3QuNGG0LUgdjMg0YHQutGA0YvRgtCwICjQtdGRINC80LXRgdGC0L4g0LfQsNC90Y_Qu9CwINC70LXQvdGC0LAgwqvQodC90Y_RgtGL0LUg0YHQvtCx0YvRgtC40Y_CuykuCiAgICAgICDQn9C-0LvRjyDQuNC3INGE0L7RgNC80Ysg0YPQsdGA0LDQvdGLLCDQvdC-INC00LDQvdC90YvQtSDQsiDRgNCw0LfQvNC10YLQutC1INGB0L7RhdGA0LDQvdGP0Y7RgtGB0Y8g0LrQsNC6INC10YHRgtGMOgogICAgICAg0YHQsdC-0YDQutCwINC_0LXRgNC10L3QvtGB0LjRgiDQuNGFINCx0LXQtyDQuNC30LzQtdC90LXQvdC40LkuICovCgogICAgLyog0JzQldCi0J7QlCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enItc2VjIj48c3VtbWFyeT7QmtCw0Log0Y8g0YDQsNCx0L7RgtCw0Y4gKCcgKyBjZmcubWV0aG9kLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnbWV0aG9kLmxhYmVsJywgY2ZnLm1ldGhvZC5sYWJlbCkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ21ldGhvZC5oMicsIGNmZy5tZXRob2QuaDIpICsgJzwvZGl2Pic7CiAgICBjZmcubWV0aG9kLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enItY2FyZCI-PGg0PtCf0YPQvdC60YIgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ21ldGhvZC5pdGVtcy4nICsgaSArICcudGl0bGUnLCBpdC50aXRsZSkgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ21ldGhvZC5pdGVtcy4nICsgaSArICcudGV4dCcsIGl0LnRleHQsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KbQldCd0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpyLXNlYyI-PHN1bW1hcnk-0KHRgtC-0LjQvNC-0YHRgtGMPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAncHJpY2luZy5sYWJlbCcsIGNmZy5wcmljaW5nLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAncHJpY2luZy5oMicsIGNmZy5wcmljaW5nLmgyKSArICc8L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enItcm93Ij4nICsgZmllbGQoJ9Cm0LjRhNGA0LAgKNCx0LXQtyDQt9C90LDQutCwINCy0LDQu9GO0YLRiyknLCAncHJpY2luZy5maWd1cmUnLCBjZmcucHJpY2luZy5maWd1cmUpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC_0L7QtCDRhtC40YTRgNC-0LknLCAncHJpY2luZy51bml0JywgY2ZnLnByaWNpbmcudW5pdCkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQn9GA0L4g0L3QsNC70L7Qs9C4INC4INGD0YHQu9C-0LLQuNGPJywgJ3ByaWNpbmcudGF4JywgY2ZnLnByaWNpbmcudGF4LCAnYXJlYScpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgdC_0LjRgdC60LAnLCAncHJpY2luZy5pbmNsVGl0bGUnLCBjZmcucHJpY2luZy5pbmNsVGl0bGUpOwogICAgY2ZnLnByaWNpbmcuaW5jbC5mb3JFYWNoKGZ1bmN0aW9uIChsaSwgaSkgewogICAgICBoICs9IGZpZWxkKCfQn9GD0L3QutGCICcgKyAoaSArIDEpLCAncHJpY2luZy5pbmNsLicgKyBpLCBsaSk7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qIEZBUSAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enItc2VjIj48c3VtbWFyeT7QktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0YsgKCcgKyBjZmcuZmFxLml0ZW1zLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2enItaGludCI-0JLQvtC_0YDQvtGBINC_0YDQsNCy0LjRgtGB0Y8g0L7QtNC40L0g0YDQsNC3IOKAlCDRg9GF0L7QtNC40YIg0Lgg0LIg0LLQuNC00LjQvNGL0Lkg0LHQu9C-0LosINC4INCyINGA0LDQt9C80LXRgtC60YMuICcgKwogICAgICAn0J7RgtCy0LXRgtC-0LIg0LTQstCwOiDQstC40LTQuNC80YvQuSDQvtGCINC_0LXRgNCy0L7Qs9C-INC70LjRhtCwLCDQv9C-0LjRgdC60L7QstGL0Lkg0L7RgiDRgtGA0LXRgtGM0LXQs9C-LjwvcD4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enItcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2ZhcS5sYWJlbCcsIGNmZy5mYXEubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdmYXEuaDInLCBjZmcuZmFxLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmZhcS5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enItY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQktC-0L_RgNC-0YEnLCAnZmFxLml0ZW1zLicgKyBpICsgJy5xJywgZi5xKSArCiAgICAgICAgZmllbGQoJ9CS0LjQtNC40LzRi9C5INC-0YLQstC10YIgKNC80L7QttC90L4gSFRNTCknLCAnZmFxLml0ZW1zLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsKICAgICAgICBmaWVsZCgn0J7RgtCy0LXRgiDQtNC70Y8g0L_QvtC40YHQutCwJywgJ2ZhcS5pdGVtcy4nICsgaSArICcuc2NoZW1hQScsIGYuc2NoZW1hQSwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiBDVEEgKyBTRU8gKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpyLXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyINC4INC_0L7QuNGB0LrQvtCy0LjQutC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enItaW4iPicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ2N0YS50aXRsZScsIGNmZy5jdGEudGl0bGUpOwogICAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6ci1jYXJkIj48aDQ-0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6ci1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy50ZXh0JywgYi50ZXh0KSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEnLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLmhyZWYnLCBiLmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgdGC0YDQsNC90LjRhtGLJywgJ21ldGEudGl0bGUnLCBjZmcubWV0YS50aXRsZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ21ldGEuZGVzYycsIGNmZy5tZXRhLmRlc2MsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1ICjQvNC-0LbQtdGCINCx0YvRgtGMINC_0L7QtNGA0L7QsdC90LXQtSknLCAnbGQuZGVzYycsIGNmZy5sZC5kZXNjLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enItZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpyLWIgcCIgaWQ9ImF2enItYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpyLWIiIGlkPSJhdnpyLXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2enItbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxOHB4Ij48dGV4dGFyZWEgaWQ9ImF2enItb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgYmluZCgpOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgCDRhNC-0YDQvNGLIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgb1twYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7CiAgfQoKICBmdW5jdGlvbiBoYXJ2ZXN0KCkgewogICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgIHZhciBwID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKHAgPT09ICd0aWNrZXJMaW5lJykgewogICAgICAgIGNmZy50aWNrZXIgPSBlbC52YWx1ZS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy50cmltKCk7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgc2V0UGF0aChjZmcsIHAsIGVsLnZhbHVlKTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYmluZCgpIHsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enItY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGlmICghcCkgcmV0dXJuOwogICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gZS50YXJnZXQudmFsdWU7CiAgICB9KTsKCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXB1bGwnKS5vbmNsaWNrID0gcHVsbDsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enItYnVpbGQnKS5vbmNsaWNrID0gYnVpbGQ7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXRlc3QnKS5vbmNsaWNrID0gc2VsZlRlc3Q7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC_0L7QtNGC0Y_Qs9C40LLQsNC90LjQtSDRgdC-0LHRi9GC0LjQuSAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHBpY2tXaWR0aChzcmNzZXQsIHdhbnQpIHsKICAgIHZhciBwYXJ0cyA9IChzcmNzZXQgfHwgJycpLnNwbGl0KCcsJyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBwID0gcGFydHNbaV0udHJpbSgpOwogICAgICBpZiAocC5zbGljZSgtKFN0cmluZyh3YW50KS5sZW5ndGggKyAyKSkgPT09ICcgJyArIHdhbnQgKyAndycpIHsKICAgICAgICB2YXIgdSA9IHAuc2xpY2UoMCwgcC5sYXN0SW5kZXhPZignICcpKS50cmltKCk7CiAgICAgICAgaWYgKHUuaW5kZXhPZignaHR0cCcpID09PSAwKSByZXR1cm4gdTsKICAgICAgICBpZiAodS5pbmRleE9mKCcvLycpID09PSAwKSByZXR1cm4gJ2h0dHBzOicgKyB1OwogICAgICAgIHJldHVybiAnaHR0cHM6Ly8nICsgdTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBwdWxsKCkgewogICAgdmFyIG5vdGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXB1bGwtbXNnJyk7CiAgICBub3RlLnRleHRDb250ZW50ID0gJ9Cn0LjRgtCw0Y4g0YDQsNC30LTQtdC7ICcgKyBMSVNUSU5HICsgJ-KApic7CiAgICBoYXJ2ZXN0KCk7CgogICAgZmV0Y2goTElTVElORyArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfRgNCw0LfQtNC10Lsg0LLQtdGA0L3Rg9C7ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGl0ZW1zID0gYWxsKGRvYywgJy5saXN0aW5nLWl0ZW0nKTsKICAgICAgICBpZiAoIWl0ZW1zLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDRgNCw0LfQtNC10LvQtSDQvdC10YIg0LrQsNGA0YLQvtGH0LXQuiAubGlzdGluZy1pdGVtIOKAlCDQstGR0YDRgdGC0LrQsCB3Zm9saW8g0LjQt9C80LXQvdC40LvQsNGB0YwnKTsKCiAgICAgICAgdmFyIGtub3duID0ge307CiAgICAgICAgY2ZnLmNhc2VzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIGtub3duWyhjLmhyZWYgfHwgJycpLnJlcGxhY2UoL15odHRwcz86XC9cL2F2YW56YXRvXC5ydS8sICcnKS5yZXBsYWNlKC9cLyQvLCAnJyldID0gMTsKICAgICAgICB9KTsKCiAgICAgICAgdmFyIGFkZGVkID0gMCwgc2tpcHBlZCA9IDAsIGJyb2tlbiA9IDA7CiAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgIHZhciBsaW5rID0gaXRlbUxpbmsoaXQpLCBpbWcgPSBvbmUoaXQsICdpbWcnKTsKICAgICAgICAgIGlmICghbGluayB8fCAhaW1nKSB7IGJyb2tlbisrOyByZXR1cm47IH0KICAgICAgICAgIHZhciBocmVmID0gKGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycpLnJlcGxhY2UoL1wvJC8sICcnKTsKICAgICAgICAgIGlmICghaHJlZiB8fCBrbm93bltocmVmXSkgcmV0dXJuOwogICAgICAgICAga25vd25baHJlZl0gPSAxOwoKICAgICAgICAgIHZhciBzcyA9IGltZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgaW1nLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JykgfHwgJyc7CiAgICAgICAgICB2YXIgdSA9IHBpY2tXaWR0aChzcywgMTI0MCkgfHwgcGlja1dpZHRoKHNzLCA2MDApOwogICAgICAgICAgaWYgKCF1KSB7IHNraXBwZWQrKzsgcmV0dXJuOyB9CiAgICAgICAgICB2YXIgYWx0ID0gKGltZy5nZXRBdHRyaWJ1dGUoJ2FsdCcpIHx8ICcnKS5yZXBsYWNlKC8mbmJzcDsvZ2ksICcgJykucmVwbGFjZSgvwqAvZywgJyAnKS50cmltKCk7CgogICAgICAgICAgY2ZnLmNhc2VzLml0ZW1zLnB1c2goewogICAgICAgICAgICBocmVmOiAnaHR0cHM6Ly9hdmFuemF0by5ydScgKyBocmVmLAogICAgICAgICAgICBpbWc6IHUsCiAgICAgICAgICAgIGFsdDogYWx0LAogICAgICAgICAgICB0aXRsZTogYWx0LAogICAgICAgICAgICAvKiDRgyDQvdC-0LLQvtC5INGA0LDQsdC-0YLRiyDRgNCw0LfQstGR0YDQvdGD0YLQvtCz0L4g0L3QsNC30LLQsNC90LjRjyDQtdGJ0ZEg0L3QtdGCIOKAlCDQsdC10YDRkdC8CiAgICAgICAgICAgICAgINC_0L7QtNC_0LjRgdGMINCw0LvRjNCx0L7QvNCwLCDQtdGRINCy0LjQtNC90L4g0Lgg0LzQvtC20L3QviDQv9C-0L_RgNCw0LLQuNGC0Ywg0LIg0YTQvtGA0LzQtSAqLwogICAgICAgICAgICBzZW9OYW1lOiBhbHQsCiAgICAgICAgICAgIGNhcDogQ0FQX1NUVUIsCiAgICAgICAgICAgIGhlcm86IGZhbHNlLAogICAgICAgICAgICBpc05ldzogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBhZGRlZCsrOwogICAgICAgIH0pOwoKICAgICAgICBkcmF3KCk7CiAgICAgICAgdmFyIG4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXB1bGwtbXNnJyk7CiAgICAgICAgbi50ZXh0Q29udGVudCA9IGFkZGVkCiAgICAgICAgICA_ICfQlNC-0LHQsNCy0LvQtdC90L4g0YHQvtCx0YvRgtC40Lk6ICcgKyBhZGRlZCArICcuINCf0L7Qv9GA0LDQstGM0YLQtSDQt9Cw0LPQvtC70L7QstC60Lgg0Lgg0L_QvtC00L_QuNGB0Lgg4oCUINC90L7QstGL0LUg0LrQsNGA0YLQvtGH0LrQuCDQvtGC0LzQtdGH0LXQvdGLINC20ZHQu9GC0YvQvC4nICsKICAgICAgICAgICAgKHNraXBwZWQgPyAnINCf0YDQvtC_0YPRidC10L3QviDQsdC10Lcg0L7QsdC70L7QttC60Lg6ICcgKyBza2lwcGVkICsgJy4nIDogJycpCiAgICAgICAgICA6ICfQndC-0LLRi9GFINGB0L7QsdGL0YLQuNC5INC90LXRgiDigJQg0LIg0YDQsNC30LTQtdC70LUgJyArIGl0ZW1zLmxlbmd0aCArICcsINC90LAg0YHRgtGA0LDQvdC40YbQtSAnICsgY2ZnLmNhc2VzLml0ZW1zLmxlbmd0aCArICcuJzsKICAgICAgICBpZiAoYnJva2VuKSBuLnRleHRDb250ZW50ICs9ICcg0JLQndCY0JzQkNCd0JjQlTog0LrQsNGA0YLQvtGH0LXQuiDQsdC10Lcg0YHRgdGL0LvQutC4INC40LvQuCDQvtCx0LvQvtC20LrQuDogJyArIGJyb2tlbiArCiAgICAgICAgICAnIOKAlCDQstGR0YDRgdGC0LrQsCDQu9C40YHRgtC40L3Qs9CwIHdmb2xpbyDQvNC-0LPQu9CwINC_0L7QvNC10L3Rj9GC0YzRgdGPLic7CiAgICAgICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcuYXZ6ci1zZWMnKS5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnb3BlbicpOwogICAgICB9KQogICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpyLXB1bGwtbXNnJykudGV4dENvbnRlbnQgPSAn0J3QtSDQv9C-0LTRgtGP0L3Rg9C70L7RgdGMOiAnICsgZS5tZXNzYWdlOwogICAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMINCyINGA0LDQt9C80LXRgtC60YMgLS0tLS0tLS0tLSAqLwoKICAvKiDQn9C10YDQtdC_0LjRgdGL0LLQsNC10Lwg0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDRgtC10LrRgdGCINGN0LvQtdC80LXQvdGC0LAsINC90LUg0YLRgNC-0LPQsNGPINCy0LvQvtC20LXQvdC90YvQtQogICAgINC30L3QsNGH0LrQuCDQuCDQuNGFINC_0L7RgNGP0LTQvtC6LiDQn9C40YjQtdC8INCyINGC0L7RgiDRgtC10LrRgdGC0L7QstGL0Lkg0YPQt9C10LssINCz0LTQtSDRgtC10LrRgdGCCiAgICAg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LXRgdGC0YwsINCwINC90LUg0LIg0L_QtdGA0LLRi9C5INC_0L7Qv9Cw0LLRiNC40LnRgdGPOiDQsiDRgNCw0LfQvNC10YLQutC1INCy0LjQtNCwCiAgICAgYDxzcGFuIGNsYXNzPSJpY29uIj5zd2lwZTwvc3Bhbj4g0L_QvtC00L_QuNGB0YxgINC_0LXRgNCy0YvQuSDRg9C30LXQuyDigJQg0Y3RgtC-CiAgICAg0L7RgtGB0YLRg9C_INC_0LXRgNC10LQg0LfQvdCw0YfQutC-0LwsINC4INC30LDQv9C40YHRjCDQsiDQvdC10LPQviDQv9C10YDQtdCx0YDQsNGB0YvQstCw0LvQsCDQv9C-0LTQv9C40YHRjAogICAgINCy0L_QtdGA0ZHQtCDQt9C90LDRh9C60LAuICovCiAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgaWYgKCFlbCB8fCB0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgIHZhciB0ZXh0cyA9IFtdLCBpOwogICAgZm9yIChpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHRleHRzLnB1c2goZWwuY2hpbGROb2Rlc1tpXSk7CiAgICB9CiAgICBpZiAoIXRleHRzLmxlbmd0aCkgeyBlbC5hcHBlbmRDaGlsZChlbC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHYpKTsgcmV0dXJuOyB9CiAgICB2YXIgbWFpbiA9IG51bGw7CiAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG1haW4gPSB0ZXh0c1tpXTsgYnJlYWs7IH0KICAgIH0KICAgIGlmICghbWFpbikgbWFpbiA9IHRleHRzWzBdOwogICAgdmFyIHJhdyA9IG1haW4ubm9kZVZhbHVlOwogICAgdmFyIHByZSA9IChyYXcubWF0Y2goL15ccyovKSB8fCBbJyddKVswXTsKICAgIHZhciBwb3N0ID0gKHJhdy5tYXRjaCgvXHMqJC8pIHx8IFsnJ10pWzBdOwogICAgaWYgKHJhdy50cmltKCkgPT09ICcnKSB7IHByZSA9ICcnOyBwb3N0ID0gJyc7IH0KICAgIG1haW4ubm9kZVZhbHVlID0gcHJlICsgdiArIHBvc3Q7CiAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRleHRzW2ldICE9PSBtYWluICYmIHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgdGV4dHNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXh0c1tpXSk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gc2V0UGxhaW4oZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwudGV4dENvbnRlbnQgPSB2OyB9CiAgZnVuY3Rpb24gc2V0SHRtbChlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC5pbm5lckhUTUwgPSB2OyB9CgogIC8qINCa0LDRgNGC0L7Rh9C60LAg0YHQvtCx0YvRgtC40Y8g4oCUINGA0L7QstC90L4g0YLQsCDQttC1INCy0ZHRgNGB0YLQutCwLCDRh9GC0L4g0YMg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFLgogICAgINCd0LDQv9GA0LDQstC70LXQvdC40LUg0YfQtdGA0LXQtNGD0LXRgtGB0Y8sINC30LDQtNC10YDQttC60LAg0YDQsNGB0YLRkdGCINC_0L4gODAg0L3QsCDQutCw0LbQtNGD0Y4g0L_QsNGA0YM6CiAgICAg0Y3RgtC-INC_0YDQvtC00L7Qu9C20LXQvdC40LUg0YDQuNGC0LzQsCwg0LfQsNC00LDQvdC90L7Qs9C-INCyINC40YHRhdC-0LTQvdC-0Lkg0YDQsNC30LzQtdGC0LrQtS4gKi8KICBmdW5jdGlvbiBjYXNlSHRtbChkb2MsIGMsIGkpIHsKICAgIHZhciBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgYy5ocmVmKTsKICAgIGEuY2xhc3NOYW1lID0gJ2Nhc2UgZmx5JzsKICAgIGEuc2V0QXR0cmlidXRlKCdkYXRhLWRpcicsIGkgJSAyID09PSAwID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7CiAgICB2YXIgZGVsYXkgPSBNYXRoLmZsb29yKGkgLyAyKSAqIDgwOwogICAgaWYgKGRlbGF5KSBhLnNldEF0dHJpYnV0ZSgnZGF0YS1kZWxheScsIFN0cmluZyhkZWxheSkpOwoKICAgIHZhciBpbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgIGltLnNldEF0dHJpYnV0ZSgnc3JjJywgYy5pbWcpOwogICAgaW0uc2V0QXR0cmlidXRlKCdhbHQnLCBjLmFsdCk7CiAgICBpbS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzgwMCcpOwogICAgaW0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnODAwJyk7CiAgICBpbS5zZXRBdHRyaWJ1dGUoJ2xvYWRpbmcnLCAnbGF6eScpOwogICAgaW0uc2V0QXR0cmlidXRlKCdkZWNvZGluZycsICdhc3luYycpOwoKICAgIHZhciBjYXAgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBjYXAuY2xhc3NOYW1lID0gJ2NhcCc7CiAgICB2YXIgaDMgPSBkb2MuY3JlYXRlRWxlbWVudCgnaDMnKTsgaDMudGV4dENvbnRlbnQgPSBjLnRpdGxlOwogICAgdmFyIHNwID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsgc3AudGV4dENvbnRlbnQgPSBjLmNhcDsKICAgIGNhcC5hcHBlbmRDaGlsZChoMyk7IGNhcC5hcHBlbmRDaGlsZChzcCk7CgogICAgLyog0L7RgtGB0YLRg9C_0Ysg0LrQsNC6INGDINGB0YPRidC10YHRgtCy0YPRjtGJ0LjRhSDQutCw0YDRgtC-0YfQtdC6IOKAlCDQutC-0LQg0YfQuNGC0LDRjtGCINCz0LvQsNC30LDQvNC4ICovCiAgICBhLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgnXG4gICAgICAgICcpKTsKICAgIGEuYXBwZW5kQ2hpbGQoaW0pOwogICAgYS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoJ1xuICAgICAgICAnKSk7CiAgICBhLmFwcGVuZENoaWxkKGNhcCk7CiAgICBhLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgnXG4gICAgICAnKSk7CiAgICByZXR1cm4gYTsKICB9CgogIGZ1bmN0aW9uIHdyaXRlQWxsKGRvYywgc2NvcGUsIGQpIHsKICAgIHNldFRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICBzZXRQbGFpbihsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgIHNldFBsYWluKGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgaWYgKGxpbmVzWzJdKSBzZXRQbGFpbihvbmUobGluZXNbMl0sICdlbScpIHx8IGxpbmVzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmxlZGUnKSwgZC5sZWRlKTsKICAgIHZhciBwcmljZSA9IG9uZShzY29wZSwgJy5sZWRlLXByaWNlJyk7CiAgICBpZiAocHJpY2UpIHsgaWYgKGQucHJpY2UuaHJlZikgcHJpY2Uuc2V0QXR0cmlidXRlKCdocmVmJywgZC5wcmljZS5ocmVmKTsgc2V0VGV4dChwcmljZSwgZC5wcmljZS50ZXh0KTsgfQoKICAgIHZhciBjaHJvbiA9IHNlYyhzY29wZSwgJ2Nocm9uaWNsZScpOwogICAgc2V0UGxhaW4ob25lKGNocm9uLCAnLmxhYmVsJyksIGQuY2hyb24ubGFiZWwpOwogICAgc2V0SHRtbChvbmUoY2hyb24sICcuaDInKSwgZC5jaHJvbi5oMik7CiAgICBzZXRIdG1sKG9uZShjaHJvbiwgJy5jaHJvbi1ub3RlJyksIGQuY2hyb24ubm90ZSk7CiAgICBzZXRIdG1sKG9uZShjaHJvbiwgJy5jaHJvbi1zb3VyY2UnKSwgZC5jaHJvbi5zb3VyY2UpOwogICAgYWxsKGNocm9uLCAnLmNocm9uLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICB2YXIgcyA9IGQuY2hyb24uaXRlbXNbaV07IGlmICghcykgcmV0dXJuOwogICAgICBzZXRQbGFpbihvbmUoaXQsICcuY2hyb24tbnVtJyksIHMubnVtKTsKICAgICAgc2V0UGxhaW4ob25lKGl0LCAnLmNocm9uLWNhcCcpLCBzLmNhcCk7CiAgICB9KTsKCiAgICB2YXIgY2FzZXMgPSBzZWMoc2NvcGUsICdjYXNlcycpOwogICAgc2V0UGxhaW4ob25lKGNhc2VzLCAnLmxhYmVsJyksIGQuY2FzZXMubGFiZWwpOwogICAgc2V0SHRtbChvbmUoY2FzZXMsICcuaDInKSwgZC5jYXNlcy5oMik7CiAgICB2YXIgZ3JpZCA9IG9uZShjYXNlcywgJy5jYXNlLWdyaWQnKTsKICAgIHZhciBleGlzdGluZyA9IGFsbChjYXNlcywgJy5jYXNlJyk7CiAgICBkLmNhc2VzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgdmFyIGVsID0gZXhpc3RpbmdbaV07CiAgICAgIGlmICghZWwpIHsKICAgICAgICBncmlkLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgnXG5cbiAgICAgICcpKTsKICAgICAgICBncmlkLmFwcGVuZENoaWxkKGNhc2VIdG1sKGRvYywgYywgaSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBjLmhyZWYpOwogICAgICB2YXIgaW0gPSBvbmUoZWwsICdpbWcnKTsKICAgICAgaWYgKGltKSB7IGltLnNldEF0dHJpYnV0ZSgnc3JjJywgYy5pbWcpOyBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIGMuYWx0KTsgfQogICAgICBzZXRQbGFpbihvbmUoZWwsICcuY2FwIGgzJyksIGMudGl0bGUpOwogICAgICBzZXRQbGFpbihvbmUoZWwsICcuY2FwIHNwYW4nKSwgYy5jYXApOwogICAgfSk7CgogICAgdmFyIG1ldGggPSBzZWMoc2NvcGUsICdtZXRob2QnKTsKICAgIHNldFBsYWluKG9uZShtZXRoLCAnLmxhYmVsJyksIGQubWV0aG9kLmxhYmVsKTsKICAgIHNldEh0bWwob25lKG1ldGgsICcuaDInKSwgZC5tZXRob2QuaDIpOwogICAgYWxsKG1ldGgsICcubWV0aG9kLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICB2YXIgcyA9IGQubWV0aG9kLml0ZW1zW2ldOyBpZiAoIXMpIHJldHVybjsKICAgICAgc2V0UGxhaW4ob25lKGl0LCAnaDMnKSwgcy50aXRsZSk7CiAgICAgIHNldFBsYWluKG9uZShpdCwgJ3AnKSwgcy50ZXh0KTsKICAgIH0pOwoKICAgIHZhciBwcmljID0gc2VjKHNjb3BlLCAncHJpY2luZycpOwogICAgc2V0UGxhaW4ob25lKHByaWMsICcubGFiZWwnKSwgZC5wcmljaW5nLmxhYmVsKTsKICAgIHNldEh0bWwob25lKHByaWMsICcuaDInKSwgZC5wcmljaW5nLmgyKTsKICAgIHNldFRleHQob25lKHByaWMsICcucHJpY2UtZmlndXJlJyksIGQucHJpY2luZy5maWd1cmUpOwogICAgc2V0UGxhaW4ob25lKHByaWMsICcucHJpY2UtdW5pdCcpLCBkLnByaWNpbmcudW5pdCk7CiAgICBzZXRQbGFpbihvbmUocHJpYywgJy5wcmljZS10YXgnKSwgZC5wcmljaW5nLnRheCk7CiAgICBzZXRQbGFpbihvbmUocHJpYywgJy5pbmNsLXRpdGxlJyksIGQucHJpY2luZy5pbmNsVGl0bGUpOwogICAgYWxsKHByaWMsICcuaW5jbCBsaScpLmZvckVhY2goZnVuY3Rpb24gKGxpLCBpKSB7CiAgICAgIGlmICh0eXBlb2YgZC5wcmljaW5nLmluY2xbaV0gPT09ICdzdHJpbmcnKSBzZXRQbGFpbihsaSwgZC5wcmljaW5nLmluY2xbaV0pOwogICAgfSk7CgogICAgdmFyIGZhcSA9IHNlYyhzY29wZSwgJ2ZhcScpOwogICAgc2V0UGxhaW4ob25lKGZhcSwgJy5sYWJlbCcpLCBkLmZhcS5sYWJlbCk7CiAgICBzZXRIdG1sKG9uZShmYXEsICcuaDInKSwgZC5mYXEuaDIpOwogICAgYWxsKGZhcSwgJy5mYXEtaXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgIHZhciBzID0gZC5mYXEuaXRlbXNbaV07IGlmICghcykgcmV0dXJuOwogICAgICBzZXRUZXh0KG9uZShpdCwgJy5mYXEtcScpLCBzLnEpOwogICAgICBzZXRIdG1sKG9uZShpdCwgJy5mYXEtYS1pbm5lcicpLCBzLmEpOwogICAgfSk7CgogICAgc2V0SHRtbChvbmUoc2NvcGUsICcuY3RhIC5oMicpLCBkLmN0YS50aXRsZSk7CiAgICBhbGwoc2NvcGUsICcuY3RhIC5idG5zIC5idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChiLCBpKSB7CiAgICAgIHZhciBzID0gZC5jdGEuYnV0dG9uc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgIGlmIChzLmhyZWYpIGIuc2V0QXR0cmlidXRlKCdocmVmJywgcy5ocmVmKTsKICAgICAgYWxsKGIsICcuYnRuLWxhYmVsID4gc3BhbicpLmZvckVhY2goZnVuY3Rpb24gKHgpIHsgc2V0UGxhaW4oeCwgcy50ZXh0KTsgfSk7CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0YsgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBqc1N0cihzKSB7IHJldHVybiAiJyIgKyBTdHJpbmcocykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsgfQoKICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgIHZhciBvdXQgPSBzcmMsIG1pc3NlZCA9IFtdOwogICAgZnVuY3Rpb24gc3ViKHJlLCBtYWtlLCBuYW1lKSB7CiAgICAgIGlmICghcmUudGVzdChvdXQpKSB7IG1pc3NlZC5wdXNoKG5hbWUpOyByZXR1cm47IH0KICAgICAgb3V0ID0gb3V0LnJlcGxhY2UocmUsIG1ha2UpOwogICAgfQogICAgc3ViKC8odmFyIHRpdGxlID0gKScoPzpbXidcXF18XFwuKSonLywgZnVuY3Rpb24gKG0sIHAxKSB7IHJldHVybiBwMSArIGpzU3RyKGQubWV0YS50aXRsZSk7IH0sICfQt9Cw0LPQvtC70L7QstC-0LonKTsKICAgIHN1YigvKHZhciBkZXNjID0gKScoPzpbXidcXF18XFwuKSonLywgZnVuY3Rpb24gKG0sIHAxKSB7IHJldHVybiBwMSArIGpzU3RyKGQubWV0YS5kZXNjKTsgfSwgJ9C-0L_QuNGB0LDQvdC40LUnKTsKICAgIGlmIChkLnRpY2tlci5sZW5ndGgpIHsKICAgICAgc3ViKC8odmFyIGl0ZW1zID0gXFspW1xzXFNdKj8oXF07KS8sIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHsKICAgICAgICB2YXIgYm9keSA9IGQudGlja2VyLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gJyAgICAgICcgKyBqc1N0cihzKTsgfSkuam9pbignLFxuJyk7CiAgICAgICAgcmV0dXJuIHAxICsgJ1xuJyArIGJvZHkgKyAnXG4gICAgJyArIHAyOwogICAgICB9LCAn0LHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwJyk7CiAgICB9CiAgICByZXR1cm4geyB0ZXh0OiBvdXQsIG1pc3NlZDogbWlzc2VkIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LIgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBidWlsZExkKGRvYywgZCkgewogICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJyB9OwogICAgdmFyIG87CiAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAnbGQranNvbiDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQoKICAgIHZhciBnID0gb1snQGdyYXBoJ10gfHwgW107CiAgICBzeW5jQ2Fub24oZyk7CiAgICBmdW5jdGlvbiBub2RlKHApIHsgcmV0dXJuIGcuZmlsdGVyKHApWzBdOyB9CgogICAgdmFyIHBhZ2UgPSBub2RlKGZ1bmN0aW9uIChuKSB7CiAgICAgIHJldHVybiAvV2ViUGFnZXxDb2xsZWN0aW9uUGFnZS8udGVzdChTdHJpbmcoblsnQHR5cGUnXSkpIDsKICAgIH0pOwogICAgaWYgKHBhZ2UpIHsKICAgICAgaWYgKGQubWV0YS50aXRsZSkgcGFnZS5uYW1lID0gZC5tZXRhLnRpdGxlOwogICAgICAvKiDQvtC_0LjRgdCw0L3QuNC1INGA0LDQt9C80LXRgtC60Lgg4oCUINGB0LLQvtGRINC_0L7Qu9C1OiDRgNCw0L3RjNGI0LUg0YHRjtC00LAg0LfQsNGC0LjRgNCw0LvQvtGB0Ywg0LHQvtC70LXQtQogICAgICAgICDQutC-0YDQvtGC0LrQvtC1INC-0L_QuNGB0LDQvdC40LUg0LjQtyDRgdC60YDQuNC_0YLQsCwg0Lgg0YDQsNC30LzQtdGC0LrQsCDQsdC10LTQvdC10LvQsCDQv9GA0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQtSAqLwogICAgICBpZiAoZC5sZCAmJiBkLmxkLmRlc2MpIHBhZ2UuZGVzY3JpcHRpb24gPSBkLmxkLmRlc2M7CiAgICAgIGVsc2UgaWYgKGQubWV0YS5kZXNjKSBwYWdlLmRlc2NyaXB0aW9uID0gZC5tZXRhLmRlc2M7CiAgICB9CgogICAgdmFyIGYgPSBub2RlKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pOwogICAgaWYgKGYgJiYgQXJyYXkuaXNBcnJheShmLm1haW5FbnRpdHkpKSB7CiAgICAgIGQuZmFxLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHEsIGkpIHsKICAgICAgICB2YXIgaXQgPSBmLm1haW5FbnRpdHlbaV07IGlmICghaXQpIHJldHVybjsKICAgICAgICBpZiAocS5xKSBpdC5uYW1lID0gcS5xOwogICAgICAgIGlmIChxLnNjaGVtYUEgJiYgaXQuYWNjZXB0ZWRBbnN3ZXIpIGl0LmFjY2VwdGVkQW5zd2VyLnRleHQgPSBxLnNjaGVtYUE7CiAgICAgIH0pOwogICAgfQoKICAgIHZhciBsaXN0ID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0l0ZW1MaXN0JzsgfSk7CiAgICBpZiAobGlzdCkgewogICAgICBsaXN0Lm51bWJlck9mSXRlbXMgPSBkLmNhc2VzLml0ZW1zLmxlbmd0aDsKICAgICAgdmFyIHNyYyA9IEFycmF5LmlzQXJyYXkobGlzdC5pdGVtTGlzdEVsZW1lbnQpID8gbGlzdC5pdGVtTGlzdEVsZW1lbnQgOiBbXTsKICAgICAgbGlzdC5pdGVtTGlzdEVsZW1lbnQgPSBkLmNhc2VzLml0ZW1zLm1hcChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciB3YXMgPSBzcmNbaV0gfHwge307CiAgICAgICAgdmFyIHJvdyA9IHsgJ0B0eXBlJzogJ0xpc3RJdGVtJywgcG9zaXRpb246IGkgKyAxLAogICAgICAgICAgbmFtZTogKGMuc2VvTmFtZSB8fCBjLnRpdGxlKSwgdXJsOiBjLmhyZWYgfTsKICAgICAgICBpZiAod2FzLmltYWdlICE9PSB1bmRlZmluZWQpIHJvdy5pbWFnZSA9IGMuaW1nOwogICAgICAgIHJldHVybiByb3c7CiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBjb21tZW50cyhkb2MpIHsKICAgIHZhciBvdXQgPSBbXSwgdyA9IGRvYy5jcmVhdGVUcmVlV2Fsa2VyKGRvYy5ib2R5LCAxMjgsIG51bGwsIGZhbHNlKSwgbjsKICAgIHdoaWxlICgobiA9IHcubmV4dE5vZGUoKSkpIHsKICAgICAgdmFyIHYgPSBuLm5vZGVWYWx1ZSB8fCAnJzsKICAgICAgaWYgKHYuaW5kZXhPZignQVZBTlpBVE8nKSA-IC0xKSB7IG91dC5wdXNoKCc8IS0tJyArIHYgKyAnLS0-Jyk7IG91dC5wdXNoKCcnKTsgYnJlYWs7IH0KICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgdmFyIHNjb3BlID0gZG9jLmdldEVsZW1lbnRCeUlkKCdhdnotcmVwJyk7CiAgICAgIHZhciBzdHlsZSA9IGFsbChkb2MsICdzdHlsZScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcjYXZ6LXJlcCAuY2FzZS1ncmlkJykgPiAtMTsgfSlbMF07CiAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ2luaXRDaHJvbmljbGUnKSA-IC0xOyB9KVswXTsKICAgICAgdmFyIGZvbnRMaW5rID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJyk7CgogICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6ICNhdnotcmVwJyk7CiAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgnPHN0eWxlPiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgIHdyaXRlQWxsKGRvYywgc2NvcGUsIGQpOwogICAgICB2YXIgc2MgPSBwYXRjaFNjcmlwdChzY3JpcHQudGV4dENvbnRlbnQsIGQpOwogICAgICB2YXIgbGQgPSBidWlsZExkKGRvYywgZCk7CiAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICB2YXIgaGVhZCA9IFsKICAgICAgICAvKiB2MiDCtyDRgdGC0YDQsNC90LjRhtCwIHYzOiDRiNGA0LjRhNGC0Ysg0LLRiNC40YLRiyDQsiA8c3R5bGU-LCBHU0FQIOKAlCDQsiDQvtGB0L3QvtCy0L3QvtC5IDxzY3JpcHQ-OyBHb29nbGUg0L3QtSDQv9C-0LTQutC70Y7Rh9Cw0LXQvCAqLwogICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vaS53Zm9saW8ucnUiIGNyb3Nzb3JpZ2luPicKICAgICAgXTsKCiAgICAgIHZhciB0ZXh0ID0gY29tbWVudHMoZG9jKS5jb25jYXQoaGVhZCkuY29uY2F0KFsKICAgICAgICAnJywKICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgc2NvcGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0PicsCiAgICAgICAgc2MudGV4dCwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgbGQudGV4dCwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgIF0pLmpvaW4oJ1xuJyk7CgogICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBtaXNzZWQ6IHNjLm1pc3NlZCB9OwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDQtNCw0LbQtSDQuNC3INGC0LXRhSDQutGD0YHQutC-0LIsINC60L7RgtC-0YDRi9C1INC_0LDQvdC10LvRjCDQutC-0L_QuNGA0YPQtdGCCiAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgIHRleHQgPSBTdHJpbmcodGV4dCkucmVwbGFjZSgvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2csICcnKTsKICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2enItb3V0Jyk7CiAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgdmFyIG9rID0gZmFsc2U7CiAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICB9CgogIGZ1bmN0aW9uIGJ1aWxkKCkgewogICAgaGFydmVzdCgpOwogICAgdmFyIHN0dWJzID0gY2ZnLmNhc2VzLml0ZW1zLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5jYXAgPT09IENBUF9TVFVCOyB9KS5sZW5ndGg7CiAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgYXNzZW1ibGUoY2ZnKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgdmFyIG5vdGUgPSAn0KHQutC-0L_QuNGA0L7QstCw0L0g0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YbQtdC70LjQutC-0LwgKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiDRgNC10L_QvtGA0YLQsNC20LXQuSDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4gJyArCiAgICAgICAgJ9Ch0L7QsdGL0YLQuNC5OiAnICsgY2ZnLmNhc2VzLml0ZW1zLmxlbmd0aCArICcuJzsKICAgICAgaWYgKHN0dWJzKSBub3RlICs9ICcg0JLQndCY0JzQkNCd0JjQlTog0YMgJyArIHN0dWJzICsgJyDQutCw0YDRgtC-0YfQtdC6INC_0L7QtNC_0LjRgdGMINC-0YHRgtCw0LvQsNGB0Ywg0LfQsNCz0L7RgtC-0LLQutC-0LkgwqsnICsgQ0FQX1NUVUIgKyAnwrsuJzsKICAgICAgaWYgKHJlcy5taXNzZWQubGVuZ3RoKSBub3RlICs9ICcg0J3QtSDQvdCw0LnQtNC10L3QviDQsiDRgdC60YDQuNC_0YLQtTogJyArIHJlcy5taXNzZWQuam9pbignLCAnKSArICcuJzsKICAgICAgY29weShyZXMudGV4dCwgbm90ZSk7CiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cd0LUg0YHQvtCx0YDQsNC90L46ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICB9CgogIGZ1bmN0aW9uIHNlbGZUZXN0KCkgewogICAgbXNnKCfQn9GA0L7QstC10YDRj9GO4oCmJyk7CiAgICB2YXIgc25hcHNob3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgYXNzZW1ibGUoc25hcHNob3QpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5nZXRFbGVtZW50QnlJZCgnYXZ6LXJlcCcpKTsKICAgICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdpbml0Q2hyb25pY2xlJykgPiAtMTsgfSlbMF07CiAgICAgIGlmIChzYykgcmVhZFNjcmlwdEJpdHMoc2MudGV4dENvbnRlbnQsIGFnYWluKTsKICAgICAgcmVhZExkRXh0cmFzKGRvYywgYWdhaW4pOwogICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgbyA9IEpTT04ucGFyc2UoYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXS50ZXh0Q29udGVudCk7CiAgICAgICAgICB2YXIgZiA9IChvWydAZ3JhcGgnXSB8fCBbXSkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pWzBdOwogICAgICAgICAgZi5tYWluRW50aXR5LmZvckVhY2goZnVuY3Rpb24gKHEsIGkpIHsKICAgICAgICAgICAgaWYgKGFnYWluLmZhcS5pdGVtc1tpXSkgYWdhaW4uZmFxLml0ZW1zW2ldLnNjaGVtYUEgPSBxLmFjY2VwdGVkQW5zd2VyLnRleHQ7CiAgICAgICAgICB9KTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9KSgpOwogICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KHNuYXBzaG90KSwgYiA9IEpTT04uc3RyaW5naWZ5KGFnYWluKTsKICAgICAgaWYgKGEgPT09IGIpIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLicpOwogICAgICBlbHNlIHsKICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INCx0YvQu9C-JywgSlNPTi5wYXJzZShhKSk7CiAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INGB0YLQsNC70L4nLCBKU09OLnBhcnNlKGIpKTsKICAgICAgfQogICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgfQoKICBkcmF3KCk7CiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0YDQtdC_0L7RgNGC0LDQttC10Lkg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6InByb2R1Y3QiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0L_RgNC10LTQvNC10YLQvdC-0Lkg0YHRitGR0LzQutC4IixzaG9ydDoi0J_RgNC10LTQvNC10YLQvdCw0Y8iLGhpbnQ6ItGA0LDQsdC-0YLRiywg0YfRgtC-INGB0L3QuNC80LDRjiwg0L_RgNC-0YbQtdGB0YEsINCy0L7Qv9GA0L7RgdGLIixwYWdlczpbIi9wcm9kdWN0LXBvcnRmb2xpbyIsICIvcHJvZHVjdC1wb3J0Zm9saW8tbW9zY293Il0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCf0KDQldCU0JzQldCi0J3QntCZINCh0KrQgdCc0JrQmCAgdjIuMSDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvcHJvZHVjdC1wb3J0Zm9saW8g0LggL3Byb2R1Y3QtcG9ydGZvbGlvLW1vc2NvdwogICAodjIuMTog0YMg0LzQvtGB0LrQvtCy0YHQutC-0Lkg0YLQsCDQttC1INGA0LDQt9C80LXRgtC60LA7INC_0YDQvtGG0LXRgdGB0LAg0Lgg0LLQvtC_0YDQvtGB0L7QsiDRgtCw0Lwg0L3QtdGCIOKAlAogICDQuNGFINGA0LDQt9C00LXQu9GLINCyINC-0LrQvdC1INC_0YDQvtGB0YLQviDQv9GD0YHRgtGL0LUpCgogICDQodGF0LXQvNCwINC-0YHRgtCw0LvRjNC90YvRhSDRgdGC0YDQsNC90LjRhjog0YfQuNGC0LDQtdGCINC20LjQstGD0Y4g0YHRgtGA0LDQvdC40YbRgywg0L_QvtC00YHRgtCw0LLQu9GP0LXRggogICDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiywg0LLRi9C00LDRkdGCINCy0LXRgdGMINCx0LvQvtC6INGG0LXQu9C40LrQvtC8LgoKICAg0J7RgtC70LjRh9C40LUg0L7RgiDQv9GA0L7Rh9C40YUg0L_QsNC90LXQu9C10Lk6INGA0LDQt9C80LXRgtC60LAgRkFRUGFnZSDRgdC-0LHQuNGA0LDQtdGC0YHRjwogICDQuNC3INCy0LjQtNC40LzQvtCz0L4g0YLQtdC60YHRgtCwINCy0L7Qv9GA0L7RgdC-0LIg0Lgg0L7RgtCy0LXRgtC-0LIsINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvi4KICAgR29vZ2xlINC30LDRgdGH0LjRgtGL0LLQsNC10YIgRkFRINGC0L7Qu9GM0LrQviDRgtC-0LPQtNCwLCDQutC-0LPQtNCwINGB0L7QtNC10YDQttC40LzQvtC1CiAgINGA0LDQt9C80LXRgtC60Lgg0LXRgdGC0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC00L7RgdC70L7QstC90L4g4oCUINC_0LXRgNC10YHQutCw0Lcg0L3QtSDQs9C-0LTQuNGC0YHRjy4KICAg0J_QvtGN0YLQvtC80YMg0L7RgtC00LXQu9GM0L3QvtCz0L4g0L_QvtC70Y8gwqvQvtGC0LLQtdGCINC00LvRjyDQv9C-0LjRgdC60LDCuyDQt9C00LXRgdGMINC90LXRgiwKICAg0Lgg0YDQsNC30L7QudGC0LjRgdGMINC40Lwg0L3QtdGH0LXQvC4KCiAgINCg0LDQt9C00LXQu9CwINGBINCw0LvRjNCx0L7QvNCw0LzQuCDRgyDQv9GA0LXQtNC80LXRgtC60Lgg0L3QtdGCLCDQv9C-0LTRgtGP0LPQuNCy0LDRgtGMINC90LXQvtGC0LrRg9C00LA6CiAgINGE0L7RgtC-0LPRgNCw0YTQuNC4INC30LDQtNCw0Y7RgtGB0Y8g0LDQtNGA0LXRgdCw0LzQuCDQstGA0YPRh9C90YPRji4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiDQodGB0YvQu9C60LAg0L3QsCDRiNGA0LjRhNGC0Ysg0LHQu9C-0LrQsCDigJQg0LrQvtC90YHRgtCw0L3RgtCwLCDQsCDQvdC1INGC0L4sINGH0YLQviDQvdCw0YjQu9C-0YHRjCDQvdCwINGB0YLRgNCw0L3QuNGG0LUuCiAgICAg0JIgPGhlYWQ-IHdmb2xpbyDRgdCy0L7RjyDRgdGB0YvQu9C60LAg0L3QsCBKb3N0L1J1YmlrINC-0YIg0YLQtdC80YssINC4INC-0L3QsCDRgdGC0L7QuNGCINCg0JDQndCs0KjQlQogICAgINC90LDRiNC10Lk6INC_0LDQvdC10LvRjCDQsdGA0LDQu9CwINC_0LXRgNCy0YPRjiDQv9C-0LTRhdC-0LTRj9GJ0YPRjiDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC-0Lkg0L_QvtC00LzQtdC90Y_Qu9CwCiAgICAg0L3QsNGH0LXRgNGC0LDQvdC40Y8g0LHQu9C-0LrQsCDQvdCwINGC0LXQvNC40L3Riy4g0J3QsNCx0L7RgCDQstC10YHQvtCyINC30LDQtNCw0L0gQ1NTINCx0LvQvtC60LAsINC_0L7RjdGC0L7QvNGDCiAgICAg0LTQtdGA0LbQuNC8INC10LPQviDQt9C00LXRgdGMLiDQnNC10L3Rj9C10YLRgdGPINC00LjQt9Cw0LnQvSDigJQg0LzQtdC90Y_QtdGC0YHRjyDRjdGC0LAg0YHRgtGA0L7QutCwLiAqLwogIHZhciBBVlpfRk9OVF9MSU5LID0gJzxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9Sm9zdDp3Z2h0QDIwMDszMDA7NDAwOzUwMDs2MDAnICsKICAgICcmYW1wO2ZhbWlseT1SdWJpazp3Z2h0QDEwMDsyMDA7MzAwJmFtcDtkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI-JzsKCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0Lkg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlAogICAgINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40Log0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuAogICAgINCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINGN0YLQuCDRg9C30LvRiwogICAgINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMzAg0L7QutGC0Y_QsdGA0Y8gMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5LTAxLTAxIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICIxNDkwMC01NDkwMCIsCiAgICAgICJvcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICJkYXlPZldlZWsiOiBbCiAgICAgICAgICAgICJNb25kYXkiLAogICAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgICAiVGh1cnNkYXkiLAogICAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICAgIlN1bmRheSIKICAgICAgICAgIF0sCiAgICAgICAgICAib3BlbnMiOiAiMTA6MDAiLAogICAgICAgICAgImNsb3NlcyI6ICIyMDowMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enEtcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIGxpdmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6LXBkJyk7CiAgaWYgKCFsaXZlKSB7IGFsZXJ0KCdBVlo6INC90LAg0Y3RgtC-0Lkg0YHRgtGA0LDQvdC40YbQtSDQvdC10YIg0LHQu9C-0LrQsCAjYXZ6LXBkJyk7IHJldHVybjsgfQoKICBmdW5jdGlvbiBvbmUoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWwpOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9IH0KICBmdW5jdGlvbiBhbGwoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gW10uc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkpOyB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfSB9CiAgZnVuY3Rpb24gdChlbCkgeyByZXR1cm4gZWwgPyBlbC50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGh0bWwoZWwpIHsgcmV0dXJuIGVsID8gZWwuaW5uZXJIVE1MIDogJyc7IH0KICBmdW5jdGlvbiBvd25UZXh0KGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgcyA9ICcnOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSBzICs9IGVsLmNoaWxkTm9kZXNbaV0ubm9kZVZhbHVlOwogICAgfQogICAgcmV0dXJuIHMucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwogIH0KICBmdW5jdGlvbiBzZWMoc2NvcGUsIG5hbWUpIHsgcmV0dXJuIG9uZShzY29wZSwgJ3NlY3Rpb24uJyArIG5hbWUpOyB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICB2YXIgcHJpY2UgPSBvbmUoc2NvcGUsICcubGVkZS1wcmljZScpOwogICAgdmFyIHdvcmtzID0gc2VjKHNjb3BlLCAnd29ya3MnKTsKICAgIHZhciBzY29wZTIgPSBzZWMoc2NvcGUsICdzY29wZScpOwogICAgdmFyIGZsb3cgPSBzZWMoc2NvcGUsICdmbG93Jyk7CiAgICB2YXIgZmFxID0gc2VjKHNjb3BlLCAnZmFxJyk7CgogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IG93blRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSksCiAgICAgICAgbGluZTE6IHQobGluZXNbMF0pLAogICAgICAgIGxpbmUyOiB0KGxpbmVzWzFdKSwKICAgICAgICBsaW5lMzogbGluZXNbMl0gPyB0KG9uZShsaW5lc1syXSwgJ2VtJykgfHwgbGluZXNbMl0pIDogJycKICAgICAgfSwKICAgICAgbGVkZTogdChvbmUoc2NvcGUsICcubGVkZScpKSwKICAgICAgcHJpY2U6IHsgdGV4dDogcHJpY2UgPyBvd25UZXh0KHByaWNlKSA6ICcnLCBocmVmOiBwcmljZSA_IChwcmljZS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJykgOiAnJyB9LAogICAgICB0aWNrZXI6IFtdLAogICAgICB3b3JrczogewogICAgICAgIGxhYmVsOiB0KG9uZSh3b3JrcywgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUod29ya3MsICcuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbCh3b3JrcywgJy5jZWxsJykubWFwKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpLCB2aWQgPSBvbmUoYywgJ3ZpZGVvJyk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0aXRsZTogdChvbmUoYywgJ2ZpZ2NhcHRpb24gYicpKSwKICAgICAgICAgICAgY2FwOiB0KG9uZShjLCAnZmlnY2FwdGlvbiBzcGFuJykpLAogICAgICAgICAgICBpbWc6IGltID8gKGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpIDogJycsCiAgICAgICAgICAgIGFsdDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgdmlkZW86IHZpZCA_ICh2aWQuZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgcG9zdGVyOiB2aWQgPyAodmlkLmdldEF0dHJpYnV0ZSgncG9zdGVyJykgfHwgJycpIDogJycKICAgICAgICAgIH07CiAgICAgICAgfSksCiAgICAgICAgbW9yZTogYWxsKHdvcmtzLCAnLndvcmtzLW1vcmUgYScpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgICAgcmV0dXJuIHsgdGV4dDogb3duVGV4dChhKSwgaHJlZjogYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIHNjb3BlOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlMiwgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoc2NvcGUyLCAnLmgyJykpLAogICAgICAgIGNvbHM6IGFsbChzY29wZTIsICcuc2NvcGUtY29sJykubWFwKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICByZXR1cm4geyB0aXRsZTogdChvbmUoYywgJ2gzJykpLCBpdGVtczogYWxsKGMsICdsaScpLm1hcChmdW5jdGlvbiAobGkpIHsgcmV0dXJuIGh0bWwobGkpOyB9KSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGZsb3c6IHsKICAgICAgICBsYWJlbDogdChvbmUoZmxvdywgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoZmxvdywgJy5oMicpKSwKICAgICAgICBpdGVtczogYWxsKGZsb3csICcuZmxvdy1pdGVtJykubWFwKGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICByZXR1cm4geyBudW06IHQob25lKGYsICcuZmxvdy1udW0nKSksIHRpdGxlOiB0KG9uZShmLCAnaDMnKSksIHRleHQ6IHQob25lKGYsICdwJykpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgZmFxOiB7CiAgICAgICAgbGFiZWw6IHQob25lKGZhcSwgJy5sYWJlbCcpKSwKICAgICAgICBoMjogaHRtbChvbmUoZmFxLCAnLmgyJykpLAogICAgICAgIGl0ZW1zOiBhbGwoZmFxLCAnLmZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgcmV0dXJuIHsgcTogb3duVGV4dChvbmUoaXQsICcuZmFxLXEnKSksIGE6IGh0bWwob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgY3RhOiB7CiAgICAgICAgdGl0bGU6IGh0bWwob25lKHNjb3BlLCAnLmN0YSAuaDInKSksCiAgICAgICAgYnV0dG9uczogYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKVswXSksIGhyZWY6IGIuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJycgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBtZXRhOiB7IHRpdGxlOiAnJywgZGVzYzogJycgfQogICAgfTsKICB9CgogIHZhciBjZmcgPSByZWFkQ2ZnKGxpdmUpOwoKICBmdW5jdGlvbiByZWFkU2NyaXB0Qml0cyhzcmMsIGMpIHsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgdGl0bGUgPSAnKCg_OlteJ1xcXXxcXC4pKiknLyk7CiAgICBpZiAobSkgYy5tZXRhLnRpdGxlID0gbVsxXS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgIG0gPSBzcmMubWF0Y2goL3ZhciBkZXNjID0gJygoPzpbXidcXF18XFwuKSopJy8pOwogICAgaWYgKG0pIGMubWV0YS5kZXNjID0gbVsxXS5yZXBsYWNlKC9cXCcvZywgIiciKTsKICAgIG0gPSBzcmMubWF0Y2goL3ZhciBpdGVtcyA9IFxbKFtcc1xTXSo_KVxdOy8pOwogICAgaWYgKG0pIHsKICAgICAgYy50aWNrZXIgPSAobVsxXS5tYXRjaCgvJygoPzpbXidcXF18XFwuKSopJy9nKSB8fCBbXSkubWFwKGZ1bmN0aW9uIChzKSB7CiAgICAgICAgcmV0dXJuIHMuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcJy9nLCAiJyIpOwogICAgICB9KTsKICAgIH0KICB9CiAgdmFyIGxpdmVTY3JpcHQgPSBhbGwoZG9jdW1lbnQsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsKICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3BkLXRpY2tlcicpID4gLTE7CiAgfSlbMF07CiAgaWYgKGxpdmVTY3JpcHQpIHJlYWRTY3JpcHRCaXRzKGxpdmVTY3JpcHQudGV4dENvbnRlbnQsIGNmZyk7CgogIC8qIC0tLS0tLS0tLS0g0L7QutC90L4gLS0tLS0tLS0tLSAqLwoKICB2YXIgY3NzID0gWwogICAgJyNhdnpxLXJvb3QsI2F2enEtcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2enEtcm9vdCBpbnB1dCwjYXZ6cS1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cS1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2enEtcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6cS13aW57YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTRweDt3aWR0aDptaW4oOTgwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpxLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enEtaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2enEtYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6cS1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6cS1yb290IC5hdnpxLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1mIGlucHV0LCNhdnpxLXJvb3QgLmF2enEtZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnpxLXJvb3QgLmF2enEtcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2enEtd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2enEtcm9vdCAuYXZ6cS1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtaW1nPmltZ3t3aWR0aDo3OHB4O2hlaWdodDo3OHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtaW1nIC5ne2ZsZXg6MX0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtbm90ZXtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjZweCAwIDB9JywKICAgICcjYXZ6cS1yb290IC5hdnpxLWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnpxLXJvb3QgLmF2enEtd2Fybntjb2xvcjojYTM3ODAwICFpbXBvcnRhbnR9JywKICAgICcjYXZ6cS1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6cS1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINC70LjRiNC90LjQuSDQv9C10YDQtdC90L7RgTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIg0L_QtdGA0LLRi9C5INC_0L7RgdC70LUgPHRleHRhcmVhPiAqLwogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnpxLWYiPjxsYWJlbD4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsgdGFnICsgJzwvZGl2Pic7CiAgfQoKICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHJvb3QuaWQgPSAnYXZ6cS1yb290JzsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOwoKICAvKiAtLS0tLS0tLS0tINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyAtLS0tLS0tLS0tCiAgICAg0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtQogICAgINGB0YLRgNC-0LrQuCDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg4oCUIFUrMjAwQiDQuCDRgNC-0LTQvdGPLiDQndCwINGN0LrRgNCw0L3QtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0YTQsNC50LvQsCDQvtC90Lgg0LvQvtC80LDRjtGCINGB0YHRi9C70LrRgzog0LHRgNCw0YPQt9C10YAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LAogICAgINC60LDRgNGC0LjQvdC60LAg0LjQu9C4INCy0LjQtNC10L4g0L3QtSDQs9GA0YPQt9GP0YLRgdGPLiDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMCiAgICAg0L3QtdGH0LXQs9C-LCDQv9C-0Y3RgtC-0LzRgyDQstGL0YfQuNGJ0LDQtdC8INC40YUg0Lgg0L_RgNC4INCy0LLQvtC00LUsINC4INGB0L_Qu9C-0YjQvdGL0Lwg0L_RgNC-0YXQvtC00L7QvCDQv9C10YDQtdC0CiAgICAg0YHQsdC-0YDQutC-0Lkg4oCUINC30L3QsNGH0LXQvdC40LUg0LzQvtCz0LvQviDQv9C-0L_QsNGB0YLRjCDQsiDQv9C-0LvQtSDQvNC40LzQviDRgdC-0LHRi9GC0LjQuSDQstCy0L7QtNCwLiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgWlcgPSAvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2c7CiAgICBmdW5jdGlvbiBzY3J1YihlbCkgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiBlbC52YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAwOwogICAgICB2YXIgdiA9IGVsLnZhbHVlLnJlcGxhY2UoWlcsICcnKTsKICAgICAgaWYgKHYgPT09IGVsLnZhbHVlKSByZXR1cm4gMDsKICAgICAgZWwudmFsdWUgPSB2OwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2NydWIoZWwpOyB9LCAwKTsKICAgIH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGVscyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpxLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnpxLXdpbiI-JyArCiAgICAnPGRpdiBpZD0iYXZ6cS1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC_0YDQtdC00LzQtdGC0L3QvtC5INGB0YrRkdC80LrQuDwvaDI-JyArCiAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cS1iIiBpZD0iYXZ6cS1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnpxLWJvZHkiPic7CgogIC8qINCg0JDQkdCe0KLQqyAqLwogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpxLXNlYyIgb3Blbj48c3VtbWFyeT7QoNCw0LHQvtGC0YsgKCcgKyBjZmcud29ya3MuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cS1pbiI-JyArCiAgICAnPHAgY2xhc3M9ImF2enEtaGludCI-0KDQsNC30LTQtdC70LAg0YEg0LDQu9GM0LHQvtC80LDQvNC4INGDINC_0YDQtdC00LzQtdGC0LrQuCDQvdC10YIsINC_0L7RjdGC0L7QvNGDINGE0L7RgtC-0LPRgNCw0YTQuNC4INC30LDQtNCw0Y7RgtGB0Y8g0LDQtNGA0LXRgdCw0LzQuC4gJyArCiAgICAn0KHQutC-0L_QuNGA0YPQudGC0LUg0LDQtNGA0LXRgSDQvdGD0LbQvdC-0LPQviDRgdC90LjQvNC60LAg0Lgg0LLRgdGC0LDQstGM0YLQtSDQsiDQv9C-0LvQtSDigJQg0L_RgNC10LLRjNGOINC-0LHQvdC-0LLQuNGC0YHRjyDRgdGA0LDQt9GDLjwvcD4nICsKICAgICc8ZGl2IGNsYXNzPSJhdnpxLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICd3b3Jrcy5sYWJlbCcsIGNmZy53b3Jrcy5sYWJlbCkgKwogICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICd3b3Jrcy5oMicsIGNmZy53b3Jrcy5oMikgKyAnPC9kaXY-JzsKICBjZmcud29ya3MuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodywgaSkgewogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cS1jYXJkIj48aDQ-0KDQsNCx0L7RgtCwICcgKyAoaSArIDEpICsgKHcudmlkZW8gPyAnIOKAlCDQstC40LTQtdC-JyA6ICcnKSArICc8L2g0PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6cS1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy50aXRsZScsIHcudGl0bGUpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5jYXAnLCB3LmNhcCkgKyAnPC9kaXY-JzsKICAgIGlmICh3LnZpZGVvKSB7CiAgICAgIGggKz0gZmllbGQoJ9CQ0LTRgNC10YEg0LLQuNC00LXQvicsICd3b3Jrcy5pdGVtcy4nICsgaSArICcudmlkZW8nLCB3LnZpZGVvKSArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enEtZiI-PGxhYmVsPtCe0LHQu9C-0LbQutCwINCy0LjQtNC10L48L2xhYmVsPjxkaXYgY2xhc3M9ImF2enEtaW1nIj4nICsKICAgICAgICAnPGltZyBzcmM9IicgKyBlc2Mody5wb3N0ZXIpICsgJyIgZGF0YS1wcmV2PSJ3b3Jrcy5pdGVtcy4nICsgaSArICcucG9zdGVyIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iZyI-PGlucHV0IGRhdGEtcD0id29ya3MuaXRlbXMuJyArIGkgKyAnLnBvc3RlciIgdmFsdWU9IicgKyBlc2Mody5wb3N0ZXIpICsgJyI-PC9kaXY-PC9kaXY-PC9kaXY-JzsKICAgIH0gZWxzZSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enEtZiI-PGxhYmVsPtCk0L7RgtC-0LPRgNCw0YTQuNGPPC9sYWJlbD48ZGl2IGNsYXNzPSJhdnpxLWltZyI-JyArCiAgICAgICAgJzxpbWcgc3JjPSInICsgZXNjKHcuaW1nKSArICciIGRhdGEtcHJldj0id29ya3MuaXRlbXMuJyArIGkgKyAnLmltZyI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPjxpbnB1dCBkYXRhLXA9IndvcmtzLml0ZW1zLicgKyBpICsgJy5pbWciIHZhbHVlPSInICsgZXNjKHcuaW1nKSArICciPjwvZGl2PjwvZGl2PjwvZGl2PicgKwogICAgICAgIGZpZWxkKCdBbHQt0YLQtdC60YHRgiAo0LLQuNC00LXQvSDQv9C-0LjRgdC60L7QstC40LrQsNC8KScsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuYWx0Jywgdy5hbHQpOwogICAgfQogICAgaCArPSAnPC9kaXY-JzsKICB9KTsKICBjZmcud29ya3MubW9yZS5mb3JFYWNoKGZ1bmN0aW9uIChtLCBpKSB7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpxLWNhcmQiPjxoND7QodGB0YvQu9C60LAg0L_QvtC0INGB0LXRgtC60L7QuSAnICsgKGkgKyAxKSArICc8L2g0PjxkaXYgY2xhc3M9ImF2enEtcm93Ij4nICsKICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnd29ya3MubW9yZS4nICsgaSArICcudGV4dCcsIG0udGV4dCkgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICd3b3Jrcy5tb3JlLicgKyBpICsgJy5ocmVmJywgbS5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogIH0pOwogIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAvKiDQqNCQ0J_QmtCQICovCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enEtc2VjIj48c3VtbWFyeT7QqNCw0L_QutCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enEtaW4iPicgKwogICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAnPGRpdiBjbGFzcz0iYXZ6cS1yb3ciPicgKyBmaWVsZCgn0KHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDInLCAnaGVyby5saW5lMicsIGNmZy5oZXJvLmxpbmUyKSArICc8L2Rpdj4nICsKICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMyAo0LrRg9GA0YHQuNCyKScsICdoZXJvLmxpbmUzJywgY2ZnLmhlcm8ubGluZTMpICsKICAgIGZpZWxkKCfQn9C-0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnbGVkZScsIGNmZy5sZWRlLCAnYXJlYScpICsKICAgICc8ZGl2IGNsYXNzPSJhdnpxLXJvdyI-JyArIGZpZWxkKCfQodGB0YvQu9C60LAg0L_QvtC0INGC0LXQutGB0YLQvtC8IOKAlCDQvdCw0LTQv9C40YHRjCcsICdwcmljZS50ZXh0JywgY2ZnLnByaWNlLnRleHQpICsKICAgIGZpZWxkKCfQodGB0YvQu9C60LAg0L_QvtC0INGC0LXQutGB0YLQvtC8IOKAlCDQsNC00YDQtdGBJywgJ3ByaWNlLmhyZWYnLCBjZmcucHJpY2UuaHJlZikgKyAnPC9kaXY-JyArCiAgICBmaWVsZCgn0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwIOKAlCDRh9C10YDQtdC3INC30LDQv9GP0YLRg9GOJywgJ3RpY2tlckxpbmUnLCBjZmcudGlja2VyLmpvaW4oJywgJyksICdhcmVhJykgKwogICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAvKiDQp9Ci0J4g0KHQndCY0JzQkNCuICovCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enEtc2VjIj48c3VtbWFyeT7Qp9GC0L4g0YHQvdC40LzQsNGOPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enEtaW4iPicgKwogICAgJzxkaXYgY2xhc3M9ImF2enEtcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ3Njb3BlLmxhYmVsJywgY2ZnLnNjb3BlLmxhYmVsKSArCiAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ3Njb3BlLmgyJywgY2ZnLnNjb3BlLmgyKSArICc8L2Rpdj4nOwogIGNmZy5zY29wZS5jb2xzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enEtY2FyZCI-PGg0PtCa0L7Qu9C-0L3QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0LrQvtC70L7QvdC60LgnLCAnc2NvcGUuY29scy4nICsgaSArICcudGl0bGUnLCBjLnRpdGxlKTsKICAgIGMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAobGksIGspIHsKICAgICAgaCArPSBmaWVsZCgn0J_Rg9C90LrRgiAnICsgKGsgKyAxKSArICcgKNC80L7QttC90L4gJmx0O2ImZ3Q7KScsICdzY29wZS5jb2xzLicgKyBpICsgJy5pdGVtcy4nICsgaywgbGksICdhcmVhJyk7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2Pic7CiAgfSk7CiAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogIC8qINCf0KDQntCm0JXQodChICovCiAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enEtc2VjIj48c3VtbWFyeT7QmtCw0Log0L_RgNC-0YXQvtC00LjRgiDRgdGK0ZHQvNC60LAgKCcgKyBjZmcuZmxvdy5pdGVtcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpxLWluIj4nICsKICAgICc8ZGl2IGNsYXNzPSJhdnpxLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdmbG93LmxhYmVsJywgY2ZnLmZsb3cubGFiZWwpICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAnZmxvdy5oMicsIGNmZy5mbG93LmgyKSArICc8L2Rpdj4nOwogIGNmZy5mbG93Lml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enEtY2FyZCI-PGg0PtCo0LDQsyAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6cS1yb3ciPicgKyBmaWVsZCgn0J3QvtC80LXRgCcsICdmbG93Lml0ZW1zLicgKyBpICsgJy5udW0nLCBmLm51bSkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ2Zsb3cuaXRlbXMuJyArIGkgKyAnLnRpdGxlJywgZi50aXRsZSkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2Zsb3cuaXRlbXMuJyArIGkgKyAnLnRleHQnLCBmLnRleHQsICdhcmVhJykgKyAnPC9kaXY-JzsKICB9KTsKICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgLyog0JLQntCf0KDQntCh0KsgKi8KICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cS1zZWMiPjxzdW1tYXJ5PtCS0L7Qv9GA0L7RgdGLINC4INC-0YLQstC10YLRiyAoJyArIGNmZy5mYXEuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cS1pbiI-JyArCiAgICAnPHAgY2xhc3M9ImF2enEtaGludCI-0J7RgtCy0LXRgiDQvtC00LjQvTog0L7QvSDQttC1INGD0YXQvtC00LjRgiDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvi4gJyArCiAgICAn0KLQsNC6INGC0YDQtdCx0YPQtdGCIEdvb2dsZSDigJQg0L_QtdGA0LXRgdC60LDQtyDRgdCy0L7QuNC80Lgg0YHQu9C-0LLQsNC80Lgg0L7QvSDQvdC1INC30LDRgdGH0LjRgtGL0LLQsNC10YIuPC9wPicgKwogICAgJzxkaXYgY2xhc3M9ImF2enEtcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2ZhcS5sYWJlbCcsIGNmZy5mYXEubGFiZWwpICsKICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyknLCAnZmFxLmgyJywgY2ZnLmZhcS5oMikgKyAnPC9kaXY-JzsKICBjZmcuZmFxLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enEtY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICBmaWVsZCgn0JLQvtC_0YDQvtGBJywgJ2ZhcS5pdGVtcy4nICsgaSArICcucScsIGYucSkgKwogICAgICBmaWVsZCgn0J7RgtCy0LXRgiAo0LzQvtC20L3QviBIVE1MOiAmbHQ7cCZndDssICZsdDthJmd0OyknLCAnZmFxLml0ZW1zLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgfSk7CiAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogIC8qIENUQSArIFNFTyAqLwogIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpxLXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyINC4INC_0L7QuNGB0LrQvtCy0LjQutC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enEtaW4iPicgKwogICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDQv9GA0LjQt9GL0LLQsCAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdjdGEudGl0bGUnLCBjZmcuY3RhLnRpdGxlKTsKICBjZmcuY3RhLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cS1jYXJkIj48aDQ-0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6cS1yb3ciPicgKwogICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdjdGEuYnV0dG9ucy4nICsgaSArICcudGV4dCcsIGIudGV4dCkgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICdjdGEuYnV0dG9ucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-PC9kaXY-JzsKICB9KTsKICBoICs9IGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YHRgtGA0LDQvdC40YbRiycsICdtZXRhLnRpdGxlJywgY2ZnLm1ldGEudGl0bGUpICsKICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnbWV0YS5kZXNjJywgY2ZnLm1ldGEuZGVzYywgJ2FyZWEnKSArCiAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2enEtZm9vdCI-JyArCiAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6cS1iIHAiIGlkPSJhdnpxLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgJzxidXR0b24gY2xhc3M9ImF2enEtYiIgaWQ9ImF2enEtdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAnPHNwYW4gaWQ9ImF2enEtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnpxLW91dCIgc3BlbGxjaGVjaz0iZmFsc2UiICcgKwogICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgcm9vdC5pbm5lckhUTUwgPSBoOwogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enEtY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwogIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgewogICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgaWYgKCFwKSByZXR1cm47CiAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOwogIH0pOwoKICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc2V0UGF0aChvYmosIHBhdGgsIHZhbCkgewogICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgb1twYXJ0c1twYXJ0cy5sZW5ndGggLSAxXV0gPSB2YWw7CiAgfQogIGZ1bmN0aW9uIGhhcnZlc3QoKSB7CiAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgdmFyIHAgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAocCA9PT0gJ3RpY2tlckxpbmUnKSB7CiAgICAgICAgY2ZnLnRpY2tlciA9IGVsLnZhbHVlLnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzLnRyaW0oKTsgfSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBzZXRQYXRoKGNmZywgcCwgZWwudmFsdWUpOwogICAgfSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCAtLS0tLS0tLS0tICovCgogIC8qINCf0LXRgNC10L_QuNGB0YvQstCw0LXQvCDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INGC0LXQutGB0YIg0Y3Qu9C10LzQtdC90YLQsCwg0L3QtSDRgtGA0L7Qs9Cw0Y8g0LLQu9C-0LbQtdC90L3Ri9C1CiAgICAg0LfQvdCw0YfQutC4INC4INC40YUg0L_QvtGA0Y_QtNC-0LouINCf0LjRiNC10Lwg0LIg0YLQvtGCINGC0LXQutGB0YLQvtCy0YvQuSDRg9C30LXQuywg0LPQtNC1INGC0LXQutGB0YIKICAgICDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQtdGB0YLRjCwg0LAg0L3QtSDQsiDQv9C10YDQstGL0Lkg0L_QvtC_0LDQstGI0LjQudGB0Y86INCyINGA0LDQt9C80LXRgtC60LUg0LLQuNC00LAKICAgICBgPHNwYW4gY2xhc3M9Imljb24iPnN3aXBlPC9zcGFuPiDQv9C-0LTQv9C40YHRjGAg0L_QtdGA0LLRi9C5INGD0LfQtdC7IOKAlCDRjdGC0L4KICAgICDQvtGC0YHRgtGD0L8g0L_QtdGA0LXQtCDQt9C90LDRh9C60L7QvCwg0Lgg0LfQsNC_0LjRgdGMINCyINC90LXQs9C-INC_0LXRgNC10LHRgNCw0YHRi9Cy0LDQu9CwINC_0L7QtNC_0LjRgdGMCiAgICAg0LLQv9C10YDRkdC0INC30L3QsNGH0LrQsC4gKi8KICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgdmFyIHRleHRzID0gW10sIGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgIH0KICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgIHZhciBtYWluID0gbnVsbDsKICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgfQogICAgaWYgKCFtYWluKSBtYWluID0gdGV4dHNbMF07CiAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgdmFyIHBvc3QgPSAocmF3Lm1hdGNoKC9ccyokLykgfHwgWycnXSlbMF07CiAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBzZXRQbGFpbihlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC50ZXh0Q29udGVudCA9IHY7IH0KICBmdW5jdGlvbiBzZXRIdG1sKGVsLCB2KSB7IGlmIChlbCAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGVsLmlubmVySFRNTCA9IHY7IH0KCiAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgIHNldFRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICBzZXRQbGFpbihsaW5lc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgIHNldFBsYWluKGxpbmVzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgaWYgKGxpbmVzWzJdKSBzZXRQbGFpbihvbmUobGluZXNbMl0sICdlbScpIHx8IGxpbmVzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmxlZGUnKSwgZC5sZWRlKTsKICAgIHZhciBwcmljZSA9IG9uZShzY29wZSwgJy5sZWRlLXByaWNlJyk7CiAgICBpZiAocHJpY2UpIHsgaWYgKGQucHJpY2UuaHJlZikgcHJpY2Uuc2V0QXR0cmlidXRlKCdocmVmJywgZC5wcmljZS5ocmVmKTsgc2V0VGV4dChwcmljZSwgZC5wcmljZS50ZXh0KTsgfQoKICAgIHZhciB3b3JrcyA9IHNlYyhzY29wZSwgJ3dvcmtzJyk7CiAgICBzZXRQbGFpbihvbmUod29ya3MsICcubGFiZWwnKSwgZC53b3Jrcy5sYWJlbCk7CiAgICBzZXRIdG1sKG9uZSh3b3JrcywgJy5oMicpLCBkLndvcmtzLmgyKTsKICAgIGFsbCh3b3JrcywgJy5jZWxsJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICB2YXIgdyA9IGQud29ya3MuaXRlbXNbaV07IGlmICghdykgcmV0dXJuOwogICAgICBzZXRQbGFpbihvbmUoYywgJ2ZpZ2NhcHRpb24gYicpLCB3LnRpdGxlKTsKICAgICAgc2V0UGxhaW4ob25lKGMsICdmaWdjYXB0aW9uIHNwYW4nKSwgdy5jYXApOwogICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpLCB2aWQgPSBvbmUoYywgJ3ZpZGVvJyk7CiAgICAgIGlmIChpbSkgeyBpZiAody5pbWcpIGltLnNldEF0dHJpYnV0ZSgnc3JjJywgdy5pbWcpOyBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHcuYWx0KTsgfQogICAgICBpZiAodmlkKSB7CiAgICAgICAgaWYgKHcudmlkZW8pIHZpZC5zZXRBdHRyaWJ1dGUoJ3NyYycsIHcudmlkZW8pOwogICAgICAgIGlmICh3LnBvc3RlcikgdmlkLnNldEF0dHJpYnV0ZSgncG9zdGVyJywgdy5wb3N0ZXIpOwogICAgICB9CiAgICB9KTsKICAgIGFsbCh3b3JrcywgJy53b3Jrcy1tb3JlIGEnKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgIHZhciBtID0gZC53b3Jrcy5tb3JlW2ldOyBpZiAoIW0pIHJldHVybjsKICAgICAgaWYgKG0uaHJlZikgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBtLmhyZWYpOwogICAgICBzZXRUZXh0KGEsIG0udGV4dCk7CiAgICB9KTsKCiAgICB2YXIgc2MgPSBzZWMoc2NvcGUsICdzY29wZScpOwogICAgc2V0UGxhaW4ob25lKHNjLCAnLmxhYmVsJyksIGQuc2NvcGUubGFiZWwpOwogICAgc2V0SHRtbChvbmUoc2MsICcuaDInKSwgZC5zY29wZS5oMik7CiAgICBhbGwoc2MsICcuc2NvcGUtY29sJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICB2YXIgY29sID0gZC5zY29wZS5jb2xzW2ldOyBpZiAoIWNvbCkgcmV0dXJuOwogICAgICBzZXRQbGFpbihvbmUoYywgJ2gzJyksIGNvbC50aXRsZSk7CiAgICAgIGFsbChjLCAnbGknKS5mb3JFYWNoKGZ1bmN0aW9uIChsaSwgaykgewogICAgICAgIGlmICh0eXBlb2YgY29sLml0ZW1zW2tdID09PSAnc3RyaW5nJykgc2V0SHRtbChsaSwgY29sLml0ZW1zW2tdKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICB2YXIgZmwgPSBzZWMoc2NvcGUsICdmbG93Jyk7CiAgICBzZXRQbGFpbihvbmUoZmwsICcubGFiZWwnKSwgZC5mbG93LmxhYmVsKTsKICAgIHNldEh0bWwob25lKGZsLCAnLmgyJyksIGQuZmxvdy5oMik7CiAgICBhbGwoZmwsICcuZmxvdy1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICB2YXIgcyA9IGQuZmxvdy5pdGVtc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgIHNldFBsYWluKG9uZShmLCAnLmZsb3ctbnVtJyksIHMubnVtKTsKICAgICAgc2V0UGxhaW4ob25lKGYsICdoMycpLCBzLnRpdGxlKTsKICAgICAgc2V0UGxhaW4ob25lKGYsICdwJyksIHMudGV4dCk7CiAgICB9KTsKCiAgICB2YXIgZnEgPSBzZWMoc2NvcGUsICdmYXEnKTsKICAgIHNldFBsYWluKG9uZShmcSwgJy5sYWJlbCcpLCBkLmZhcS5sYWJlbCk7CiAgICBzZXRIdG1sKG9uZShmcSwgJy5oMicpLCBkLmZhcS5oMik7CiAgICBhbGwoZnEsICcuZmFxLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICB2YXIgcyA9IGQuZmFxLml0ZW1zW2ldOyBpZiAoIXMpIHJldHVybjsKICAgICAgc2V0VGV4dChvbmUoaXQsICcuZmFxLXEnKSwgcy5xKTsKICAgICAgc2V0SHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSwgcy5hKTsKICAgIH0pOwoKICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmN0YSAuaDInKSwgZC5jdGEudGl0bGUpOwogICAgYWxsKHNjb3BlLCAnLmN0YSAuYnRucyAuYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICB2YXIgcyA9IGQuY3RhLmJ1dHRvbnNbaV07IGlmICghcykgcmV0dXJuOwogICAgICBpZiAocy5ocmVmKSBiLnNldEF0dHJpYnV0ZSgnaHJlZicsIHMuaHJlZik7CiAgICAgIGFsbChiLCAnLmJ0bi1sYWJlbCA-IHNwYW4nKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHNldFBsYWluKHgsIHMudGV4dCk7IH0pOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBqc1N0cihzKSB7IHJldHVybiAiJyIgKyBTdHJpbmcocykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsgfQoKICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgIHZhciBvdXQgPSBzcmMsIG1pc3NlZCA9IFtdOwogICAgZnVuY3Rpb24gc3ViKHJlLCBtYWtlLCBuYW1lKSB7CiAgICAgIGlmICghcmUudGVzdChvdXQpKSB7IG1pc3NlZC5wdXNoKG5hbWUpOyByZXR1cm47IH0KICAgICAgb3V0ID0gb3V0LnJlcGxhY2UocmUsIG1ha2UpOwogICAgfQogICAgc3ViKC8odmFyIHRpdGxlID0gKScoPzpbXidcXF18XFwuKSonLywgZnVuY3Rpb24gKG0sIHAxKSB7IHJldHVybiBwMSArIGpzU3RyKGQubWV0YS50aXRsZSk7IH0sICfQt9Cw0LPQvtC70L7QstC-0LonKTsKICAgIHN1YigvKHZhciBkZXNjID0gKScoPzpbXidcXF18XFwuKSonLywgZnVuY3Rpb24gKG0sIHAxKSB7IHJldHVybiBwMSArIGpzU3RyKGQubWV0YS5kZXNjKTsgfSwgJ9C-0L_QuNGB0LDQvdC40LUnKTsKICAgIGlmIChkLnRpY2tlci5sZW5ndGgpIHsKICAgICAgc3ViKC8odmFyIGl0ZW1zID0gXFspW1xzXFNdKj8oXF07KS8sIGZ1bmN0aW9uIChtLCBwMSwgcDIpIHsKICAgICAgICB2YXIgYm9keSA9IGQudGlja2VyLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gJyAgICAgICcgKyBqc1N0cihzKTsgfSkuam9pbignLFxuJyk7CiAgICAgICAgcmV0dXJuIHAxICsgJ1xuJyArIGJvZHkgKyAnXG4gICAgJyArIHAyOwogICAgICB9LCAn0LHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwJyk7CiAgICB9CiAgICByZXR1cm4geyB0ZXh0OiBvdXQsIG1pc3NlZDogbWlzc2VkIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBidWlsZExkKGRvYywgc2NvcGUsIGQpIHsKICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIgbGQranNvbicgfTsKICAgIHZhciBvOwogICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ2xkK2pzb24g0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlIH07IH0KCiAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgc3luY0Nhbm9uKGcpOwogICAgZnVuY3Rpb24gbm9kZShwKSB7IHJldHVybiBnLmZpbHRlcihwKVswXTsgfQoKICAgIHZhciBwYWdlID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjd2VicGFnZScpID4gLTE7IH0pOwogICAgaWYgKHBhZ2UpIHsKICAgICAgaWYgKGQubWV0YS50aXRsZSkgcGFnZS5uYW1lID0gZC5tZXRhLnRpdGxlOwogICAgICBpZiAoZC5tZXRhLmRlc2MpIHBhZ2UuZGVzY3JpcHRpb24gPSBkLm1ldGEuZGVzYzsKICAgICAgLyog0LTQsNGC0LAg0LjQt9C80LXQvdC10L3QuNGPINC-0LHQvdC-0LLQu9GP0LXRgtGB0Y8g0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUg4oCUINC40L3QsNGH0LUg0L7QvdCwCiAgICAgICAgINGD0YHRgtCw0YDQtdC10YIg0Lgg0YHRgtCw0L3QtdGCINCy0YDQsNGC0Ywg0L_QvtC40YHQutC-0LLQuNC60YMg0L4g0YHQstC10LbQtdGB0YLQuCDRgdGC0YDQsNC90LjRhtGLICovCiAgICAgIHBhZ2UuZGF0ZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKICAgIH0KCiAgICAvKiDQktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0Ysg0LHQtdGA0ZHQvCDQuNC3INGD0LbQtSDRgdC-0LHRgNCw0L3QvdC-0Lkg0YDQsNC30LzQtdGC0LrQuCDRgdGC0YDQsNC90LjRhtGLIOKAlAogICAgICAg0YLQsNC6INGC0LXQutGB0YIg0LIgRkFRUGFnZSDQtNC-0YHQu9C-0LLQvdC-INGB0L7QstC_0LDQtNCw0LXRgiDRgSDQstC40LTQuNC80YvQvC4gKi8KICAgIHZhciBmYXEgPSBub2RlKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pOwogICAgaWYgKGZhcSkgewogICAgICBmYXEubWFpbkVudGl0eSA9IGFsbChzY29wZSwgJy5mYXEtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgJ0B0eXBlJzogJ1F1ZXN0aW9uJywKICAgICAgICAgIG5hbWU6IHQob25lKGl0LCAnLmZhcS1xJykpLAogICAgICAgICAgYWNjZXB0ZWRBbnN3ZXI6IHsgJ0B0eXBlJzogJ0Fuc3dlcicsIHRleHQ6IHQob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH0KICAgICAgICB9OwogICAgICB9KTsKICAgIH0KCiAgICB2YXIgbGlzdCA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdJdGVtTGlzdCc7IH0pOwogICAgaWYgKGxpc3QpIHsKICAgICAgdmFyIGNlbGxzID0gYWxsKHNjb3BlLCAnLmNlbGwnKTsKICAgICAgbGlzdC5udW1iZXJPZkl0ZW1zID0gY2VsbHMubGVuZ3RoOwogICAgICB2YXIgc3JjID0gQXJyYXkuaXNBcnJheShsaXN0Lml0ZW1MaXN0RWxlbWVudCkgPyBsaXN0Lml0ZW1MaXN0RWxlbWVudCA6IFtdOwogICAgICBsaXN0Lml0ZW1MaXN0RWxlbWVudCA9IGNlbGxzLm1hcChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciB3YXMgPSAoc3JjW2ldICYmIHNyY1tpXS5pdGVtKSB8fCB7fTsKICAgICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpLCB2aWQgPSBvbmUoYywgJ3ZpZGVvJyk7CiAgICAgICAgdmFyIGl0ZW07CiAgICAgICAgaWYgKHZpZCkgewogICAgICAgICAgaXRlbSA9IHsKICAgICAgICAgICAgJ0B0eXBlJzogJ1ZpZGVvT2JqZWN0JywKICAgICAgICAgICAgbmFtZTogdChvbmUoYywgJ2ZpZ2NhcHRpb24gYicpKSArICcg4oCUICcgKyB0KG9uZShjLCAnZmlnY2FwdGlvbiBzcGFuJykpLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogd2FzLmRlc2NyaXB0aW9uIHx8IHQob25lKGMsICdmaWdjYXB0aW9uIGInKSksCiAgICAgICAgICAgIHRodW1ibmFpbFVybDogdmlkLmdldEF0dHJpYnV0ZSgncG9zdGVyJykgfHwgJycsCiAgICAgICAgICAgIGNvbnRlbnRVcmw6IHZpZC5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8ICcnCiAgICAgICAgICB9OwogICAgICAgICAgLyog0LTQsNGC0YMg0L_Rg9Cx0LvQuNC60LDRhtC40Lgg0LHQtdGA0ZHQvCDQuNC3INC60L7QtNCwINGB0YLRgNCw0L3QuNGG0Ysg0Lgg0L3QuNC60L7Qs9C00LAg0L3QtQogICAgICAgICAgICAg0L_RgNC40LTRg9C80YvQstCw0LXQvDog0LLRi9C00YPQvNCw0L3QvdC-0LUg0YfQuNGB0LvQviDigJQg0Y3RgtC-INC70L7QttC90YvQuSDRhNCw0LrRggogICAgICAgICAgICAg0LIg0LTQsNC90L3Ri9GFINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyICovCiAgICAgICAgICBpZiAod2FzLnVwbG9hZERhdGUpIGl0ZW0udXBsb2FkRGF0ZSA9IHdhcy51cGxvYWREYXRlOwogICAgICAgICAgLyog0LTQu9C40YLQtdC70YzQvdC-0YHRgtGMIOKAlCDRgtCw0Log0LbQtSwg0LjQtyDQutC-0LTQsCDRgdGC0YDQsNC90LjRhtGLICh2Mi4xOiDRgNCw0L3RjNGI0LUg0YLQtdGA0Y_Qu9Cw0YHRjCDQv9GA0Lgg0YHQsdC-0YDQutC1KSAqLwogICAgICAgICAgaWYgKHdhcy5kdXJhdGlvbikgaXRlbS5kdXJhdGlvbiA9IHdhcy5kdXJhdGlvbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXRlbSA9IHsKICAgICAgICAgICAgJ0B0eXBlJzogJ0ltYWdlT2JqZWN0JywKICAgICAgICAgICAgbmFtZTogdChvbmUoYywgJ2ZpZ2NhcHRpb24gYicpKSArICcg4oCUICcgKyB0KG9uZShjLCAnZmlnY2FwdGlvbiBzcGFuJykpLAogICAgICAgICAgICBjYXB0aW9uOiBpbSA_IChpbS5nZXRBdHRyaWJ1dGUoJ2FsdCcpIHx8ICcnKSA6ICcnLAogICAgICAgICAgICB1cmw6IGltID8gKGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgJycpIDogJycKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiB7ICdAdHlwZSc6ICdMaXN0SXRlbScsIHBvc2l0aW9uOiBpICsgMSwgaXRlbTogaXRlbSB9OwogICAgICB9KTsKICAgIH0KCiAgICB2YXIgcHJpbWFyeSA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIFN0cmluZyhuWydAaWQnXSB8fCAnJykuaW5kZXhPZignI3ByaW1hcnlpbWFnZScpID4gLTE7IH0pOwogICAgdmFyIGZpcnN0SW1nID0gb25lKHNjb3BlLCAnLmNlbGwgaW1nJyk7CiAgICBpZiAocHJpbWFyeSAmJiBmaXJzdEltZykgewogICAgICBwcmltYXJ5LnVybCA9IGZpcnN0SW1nLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgcHJpbWFyeS51cmw7CiAgICAgIHByaW1hcnkuY2FwdGlvbiA9IGZpcnN0SW1nLmdldEF0dHJpYnV0ZSgnYWx0JykgfHwgcHJpbWFyeS5jYXB0aW9uOwogICAgfQoKICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBjb21tZW50cyhkb2MpIHsKICAgIHZhciBvdXQgPSBbXSwgdyA9IGRvYy5jcmVhdGVUcmVlV2Fsa2VyKGRvYy5ib2R5LCAxMjgsIG51bGwsIGZhbHNlKSwgbjsKICAgIHdoaWxlICgobiA9IHcubmV4dE5vZGUoKSkpIHsKICAgICAgdmFyIHYgPSBuLm5vZGVWYWx1ZSB8fCAnJzsKICAgICAgaWYgKHYuaW5kZXhPZignQVZBTlpBVE8uUlUnKSA-IC0xKSB7IG91dC5wdXNoKCc8IS0tJyArIHYgKyAnLS0-Jyk7IG91dC5wdXNoKCcnKTsgYnJlYWs7IH0KICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgdmFyIHNjb3BlID0gZG9jLmdldEVsZW1lbnRCeUlkKCdhdnotcGQnKTsKICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJyNhdnotcGQgLmJlbnRvJykgPiAtMTsgfSlbMF07CiAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3BkLXRpY2tlcicpID4gLTE7IH0pWzBdOwogICAgICB2YXIgZm9udExpbmsgPSBkb2MucXVlcnlTZWxlY3RvcignbGlua1tocmVmKj0iY3NzMj9mYW1pbHk9Il0nKTsKCiAgICAgIHZhciBtaXNzaW5nID0gW107CiAgICAgIGlmICghc2NvcGUpIG1pc3NpbmcucHVzaCgn0LHQu9C-0LogI2F2ei1wZCcpOwogICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICBpZiAoIXNjcmlwdCkgbWlzc2luZy5wdXNoKCc8c2NyaXB0PiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICB3cml0ZUFsbChzY29wZSwgZCk7CiAgICAgIHZhciBzYyA9IHBhdGNoU2NyaXB0KHNjcmlwdC50ZXh0Q29udGVudCwgZCk7CiAgICAgIHZhciBsZCA9IGJ1aWxkTGQoZG9jLCBzY29wZSwgZCk7CiAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICB2YXIgdGV4dCA9IGNvbW1lbnRzKGRvYykuY29uY2F0KFsKICAgICAgICAvKiB2Mjog0YjRgNC40YTRgtGLINCy0YjQuNGC0Ysg0LIg0YHRgtC40LvRjCDRgdGC0YDQsNC90LjRhtGLIOKAlCDRgdGB0YvQu9C-0Log0L3QsCBHb29nbGUg0L3QtdGCICovCiAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9pLndmb2xpby5ydSIgY3Jvc3NvcmlnaW4-JywKICAgICAgICAnJywKICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgc2NvcGUub3V0ZXJIVE1MLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0PicsCiAgICAgICAgc2MudGV4dCwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgbGQudGV4dCwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgIF0pLmpvaW4oJ1xuJyk7CgogICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBtaXNzZWQ6IHNjLm1pc3NlZCB9OwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDQtNCw0LbQtSDQuNC3INGC0LXRhSDQutGD0YHQutC-0LIsINC60L7RgtC-0YDRi9C1INC_0LDQvdC10LvRjCDQutC-0L_QuNGA0YPQtdGCCiAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgIHRleHQgPSBTdHJpbmcodGV4dCkucmVwbGFjZSgvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2csICcnKTsKICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2enEtb3V0Jyk7CiAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgdmFyIG9rID0gZmFsc2U7CiAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICB9CgogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enEtYnVpbGQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgaGFydmVzdCgpOwogICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgIGFzc2VtYmxlKGNmZykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0LogJyArIGxvY2F0aW9uLnBhdGhuYW1lICsgJyDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4nOwogICAgICBpZiAocmVzLm1pc3NlZC5sZW5ndGgpIG5vdGUgKz0gJyDQndC1INC90LDQudC00LXQvdC-INCyINGB0LrRgNC40L_RgtC1OiAnICsgcmVzLm1pc3NlZC5qb2luKCcsICcpICsgJy4nOwogICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRgdC-0LHRgNCw0L3QvjogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enEtdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgIHZhciBzbmFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5nZXRFbGVtZW50QnlJZCgnYXZ6LXBkJykpOwogICAgICB2YXIgc2MgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3BkLXRpY2tlcicpID4gLTE7IH0pWzBdOwogICAgICBpZiAoc2MpIHJlYWRTY3JpcHRCaXRzKHNjLnRleHRDb250ZW50LCBhZ2Fpbik7CiAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgZWxzZSB7CiAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgIH0KICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogIH07CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC_0YDQtdC00LzQtdGC0L3QvtC5INGB0YrRkdC80LrQuCDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoibWFsZSIsdGl0bGU6ItCf0LDQvdC10LvRjCDQvNGD0LbRgdC60L7QuSDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsc2hvcnQ6ItCc0YPQttGB0LrQsNGPIixoaW50OiLQv9Cw0LrQtdGC0YssINCy0L7Qv9GA0L7RgdGLLCDRgNCw0LHQvtGC0YssINGC0LXQutGB0YLRiyIscGFnZXM6WyIvbXV6aHNrYXlhLWZvdG9zZXNzaXlhLWthemFuIl0scnVuOmZ1bmN0aW9uKCl7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBVlogwrcg0J_QkNCd0JXQm9CsINCc0KPQltCh0JrQntCZINCk0J7QotCe0KHQldCh0KHQmNCYICB2Mi4xIOKAlCDQs9C10L3QtdGA0LDRgtC-0YAg0LrQvtC00LAKICAg0KDQsNCx0L7RgtCw0LXRgiDQvdCwIC9tdXpoc2theWEtZm90b3Nlc3NpeWEta2F6YW4KCiAgINCh0YXQtdC80LAg0L7RgdGC0LDQu9GM0L3Ri9GFINGB0YLRgNCw0L3QuNGGOiDRh9C40YLQsNC10YIg0LbQuNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCCiAgINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLLCDQstGL0LTQsNGR0YIg0LLQtdGB0Ywg0LHQu9C-0Log0YbQtdC70LjQutC-0LwuCgogICDQoNCw0LfQvNC10YLQutCwIEZBUVBhZ2Ug0YHQvtCx0LjRgNCw0LXRgtGB0Y8g0LjQtyDQstC40LTQuNC80L7Qs9C-INGC0LXQutGB0YLQsCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4g4oCUCiAgIEdvb2dsZSDQt9Cw0YHRh9C40YLRi9Cy0LDQtdGCINCy0L7Qv9GA0L7RgdGLINGC0L7Qu9GM0LrQviDQv9GA0Lgg0LTQvtGB0LvQvtCy0L3QvtC8INGB0L7QstC_0LDQtNC10L3QuNC4LgogICDQn9C-0Y3RgtC-0LzRgyDQv9C-0LvRjyDCq9C-0YLQstC10YIg0LTQu9GPINC_0L7QuNGB0LrQsMK7INC30LTQtdGB0Ywg0L3QtdGCOiDRgNCw0YHRhdC-0LTQuNGC0YzRgdGPINC90LXRh9C10LzRgy4KCiAgINCm0LXQvdGLINC90LAg0YHRgtGA0LDQvdC40YbQtSDQuCDQsiDRgNCw0LfQvNC10YLQutC1INC_0YDQsNCy0Y_RgtGB0Y8g0L7QtNC90LjQvCDQv9C-0LvQtdC8OiDRgNCw0L3RjNGI0LUKICAg0LIg0YDQsNC30LzQtdGC0LrQtSDQsdGL0LvQuCDQvtCx0YrRj9Cy0LvQtdC90Ysg0L_QsNC60LXRgtGLLCDQutC-0YLQvtGA0YvRhSDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0L3QtSDQsdGL0LvQvgogICDQstC-0LLRgdC1LiDQn9Cw0L3QtdC70Ywg0LTQtdGA0LbQuNGCINC40YUg0LLQvNC10YHRgtC1LgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qINCh0YHRi9C70LrQsCDQvdCwINGI0YDQuNGE0YLRiyDQsdC70L7QutCwIOKAlCDQutC-0L3RgdGC0LDQvdGC0LAsINCwINC90LUg0YLQviwg0YfRgtC-INC90LDRiNC70L7RgdGMINC90LAg0YHRgtGA0LDQvdC40YbQtS4KICAgICDQkiA8aGVhZD4gd2ZvbGlvINGB0LLQvtGPINGB0YHRi9C70LrQsCDQvdCwIEpvc3QvUnViaWsg0L7RgiDRgtC10LzRiywg0Lgg0L7QvdCwINGB0YLQvtC40YIg0KDQkNCd0KzQqNCVCiAgICAg0L3QsNGI0LXQuTog0L_QsNC90LXQu9GMINCx0YDQsNC70LAg0L_QtdGA0LLRg9GOINC_0L7QtNGF0L7QtNGP0YnRg9GOINC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60L7QuSDQv9C-0LTQvNC10L3Rj9C70LAKICAgICDQvdCw0YfQtdGA0YLQsNC90LjRjyDQsdC70L7QutCwINC90LAg0YLQtdC80LjQvdGLLiDQndCw0LHQvtGAINCy0LXRgdC-0LIg0LfQsNC00LDQvSBDU1Mg0LHQu9C-0LrQsCwg0L_QvtGN0YLQvtC80YMKICAgICDQtNC10YDQttC40Lwg0LXQs9C-INC30LTQtdGB0YwuINCc0LXQvdGP0LXRgtGB0Y8g0LTQuNC30LDQudC9IOKAlCDQvNC10L3Rj9C10YLRgdGPINGN0YLQsCDRgdGC0YDQvtC60LAuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMjAwOzMwMDs0MDA7NTAwOzYwMCcgKwogICAgJyZhbXA7ZmFtaWx5PVJ1YmlrOml0YWwsd2dodEAwLDEwMDswLDIwMDswLDMwMDsxLDEwMDsxLDIwMCcgKwogICAgJyZhbXA7ZmFtaWx5PU1hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREAyNCwzMDAsMCwwJyArCiAgICAnJmFtcDtkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI-JzsKCiAgLyogLS0tLS0tLS0tLSDQv9GA0L7QstC10YDQutCwIMKr0LTQvtC70LXRgtC10LvQviDQu9C4wrsgLS0tLS0tLS0tLQogICAgINCf0LDQvdC10LvRjCDQv9C40YjQtdGCINC30L3QsNGH0LXQvdC40Y8g0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YfQtdGA0LXQtyDRgdC10LvQtdC60YLQvtGA0YsuINCV0YHQu9C4INGB0LXQu9C10LrRgtC-0YAKICAgICDQvdC1INC90LDRiNGR0LvRgdGPINC40LvQuCDQv9C-0LTRgdGC0LDQvdC-0LLQutCwINC90LUg0YHQvtCy0L_QsNC70LAg4oCUINC30LDQv9C40YHRjCDQvNC-0LvRh9CwINC90LUg0L_RgNC-0LjRgdGF0L7QtNC40YIuCiAgICAg0JjQvNC10L3QvdC-INGC0LDQuiDRh9C40YHQu9C-INGB0YrRkdC80L7QuiDQt9Cw0YHRgtGA0Y_Qu9C-INC90LAgMTI1OiDQv9Cw0L3QtdC70Ywg0L_QvtGB0YfQuNGC0LDQu9CwIDEyNywKICAgICDQt9Cw0L_QuNGB0LDRgtGMINC90LUg0YHQvNC-0LPQu9CwLCDQsCDQv9GA0L7QstC10YDQutCwIMKr0YHQsdC-0YDQutCwINGB0L7QstC_0LDQtNCw0LXRgiDRgSDQuNGB0YXQvtC00L3QuNC60L7QvMK7CiAgICAg0YHRgNCw0LLQvdC40LLQsNC70LAg0L7QtNC40L3QsNC60L7QstC-INC90LXQv9GA0LDQstC40LvRjNC90L7QtSDRgSDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3Ri9C8LgoKICAgICDQn9C-0Y3RgtC-0LzRgyDQv9C-0YHQu9C1INGB0LHQvtGA0LrQuCDRh9C40YLQsNC10Lwg0YDQtdC30YPQu9GM0YLQsNGCINCe0JHQoNCQ0KLQndCeINC4INGB0LLQtdGA0Y_QtdC8INGBINGC0LXQvCwg0YfRgtC-CiAgICAg0LLQstGR0Lsg0YfQtdC70L7QstC10LouINCd0LXRgdC-0LLQv9Cw0LLRiNC40LUg0L_QvtC70Y8g0L_QsNC90LXQu9GMINC90LDQt9GL0LLQsNC10YIg0LLRgdC70YPRhS4gKi8KICBmdW5jdGlvbiBsYW5kZWQoZXhwZWN0ZWQsIGFjdHVhbCwgc2tpcCwgcGF0aCwgb3V0KSB7CiAgICBwYXRoID0gcGF0aCB8fCAnJzsgb3V0ID0gb3V0IHx8IFtdOwogICAgaWYgKGV4cGVjdGVkICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ29iamVjdCcgJiYgYWN0dWFsICYmIHR5cGVvZiBhY3R1YWwgPT09ICdvYmplY3QnKSB7CiAgICAgIE9iamVjdC5rZXlzKGV4cGVjdGVkKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7CiAgICAgICAgbGFuZGVkKGV4cGVjdGVkW2tdLCBhY3R1YWxba10sIHNraXAsIHBhdGggPyBwYXRoICsgJy4nICsgayA6IGssIG91dCk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChTdHJpbmcoZXhwZWN0ZWQgPT0gbnVsbCA_ICcnIDogZXhwZWN0ZWQpICE9PSBTdHJpbmcoYWN0dWFsID09IG51bGwgPyAnJyA6IGFjdHVhbCkpIHsKICAgICAgaWYgKCFza2lwIHx8ICFza2lwLnRlc3QocGF0aCkpIG91dC5wdXNoKHBhdGgpOwogICAgfQogICAgcmV0dXJuIG91dDsKICB9CgogIC8qIC0tLS0tLS0tLS0g0L7QsdGJ0LjQtSDQutCw0YDRgtC-0YfQutC4OiDQs9C70LDQstC90LDRjyDigJQg0LjRgdGC0L7Rh9C90LjQuiDQuNGB0YLQuNC90YsgLS0tLS0tLS0tLQogICAgINCj0LfQu9GLICNwaG90b2dyYXBoZXIsICNidXNpbmVzcyDQuCAjd2Vic2l0ZSDQvtC_0LjRgdGL0LLQsNGO0YIg0L7QtNC90L7Qs9C-INC4INGC0L7Qs9C-INC20LUKICAgICDRh9C10LvQvtCy0LXQutCwLCDQvtC00L3QviDQtNC10LvQviDQuCDQvtC00LjQvSDRgdCw0LnRgi4g0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0LkKICAgICDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40LoKICAgICDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4INCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQv9GA0L7RgdGC0L4KICAgICDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINC40YUg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUsCiAgICAg0L_QvtGN0YLQvtC80YMg0YDQsNGB0YXQvtC00LjRgtGM0YHRjyDQuNC8INCx0L7Qu9GM0YjQtSDQvdC10YfQtdC8LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMzAg0L7QutGC0Y_QsdGA0Y8gMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5LTAxLTAxIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICIxNDkwMC01NDkwMCIsCiAgICAgICJvcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICJkYXlPZldlZWsiOiBbCiAgICAgICAgICAgICJNb25kYXkiLAogICAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgICAiVGh1cnNkYXkiLAogICAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICAgIlN1bmRheSIKICAgICAgICAgIF0sCiAgICAgICAgICAib3BlbnMiOiAiMTA6MDAiLAogICAgICAgICAgImNsb3NlcyI6ICIyMDowMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2em0tcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIGxpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXYtbWFsZScpOwogIGlmICghbGl2ZSkgeyBhbGVydCgnQVZaOiDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0L3QtdGCINCx0LvQvtC60LAgLmF2LW1hbGUnKTsgcmV0dXJuOyB9CgogIGZ1bmN0aW9uIG9uZShlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBlbC5xdWVyeVNlbGVjdG9yKHNlbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfQogIGZ1bmN0aW9uIGFsbChlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBbXS5zbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKSk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9IH0KICBmdW5jdGlvbiB0KGVsKSB7IHJldHVybiBlbCA_IGVsLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gaHRtbChlbCkgeyByZXR1cm4gZWwgPyBlbC5pbm5lckhUTUwgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIG51bShzY29wZSwgbikgewogICAgcmV0dXJuIGFsbChzY29wZSwgJ3NlY3Rpb24ubnVtYmVyZWQnKS5maWx0ZXIoZnVuY3Rpb24gKHMpIHsKICAgICAgcmV0dXJuIHMuZ2V0QXR0cmlidXRlKCdkYXRhLW51bScpID09PSBuOwogICAgfSlbMF0gfHwgbnVsbDsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICB2YXIgczEgPSBudW0oc2NvcGUsICcwMScpLCBzMiA9IG51bShzY29wZSwgJzAyJyksIHMzID0gbnVtKHNjb3BlLCAnMDMnKTsKICAgIHZhciBzNCA9IG51bShzY29wZSwgJzA0JyksIHM1ID0gbnVtKHNjb3BlLCAnMDUnKSwgczYgPSBudW0oc2NvcGUsICcwNicpOwoKICAgIHJldHVybiB7CiAgICAgIGhlcm86IHsKICAgICAgICBleWVicm93OiBvd25UZXh0KG9uZShzY29wZSwgJy5leWVicm93JykpLAogICAgICAgIGxpbmUxOiB0KGxpbmVzWzBdKSwKICAgICAgICBsaW5lMjogbGluZXNbMV0gPyB0KG9uZShsaW5lc1sxXSwgJ2VtJykgfHwgbGluZXNbMV0pIDogJycsCiAgICAgICAgbGluZTM6IHQobGluZXNbMl0pCiAgICAgIH0sCiAgICAgIGxlZGU6IHQob25lKHNjb3BlLCAnLmxlZGUnKSksCiAgICAgIHRpY2tlcjogW10sCiAgICAgIGFib3V0OiB7CiAgICAgICAgbGFiZWw6IHQob25lKHMxLCAnLmFib3V0LXRleHQgLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShzMSwgJy5hYm91dC10ZXh0IC5oMicpKSwKICAgICAgICBwOiBhbGwoczEsICcuYWJvdXQtdGV4dCBwJykubWFwKGZ1bmN0aW9uIChwKSB7IHJldHVybiB0KHApOyB9KSwKICAgICAgICBjaGVja3M6IGFsbChzMSwgJy5jaGVjay1pdGVtJykubWFwKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICByZXR1cm4geyBsYWJlbDogdChvbmUoYywgJy5jaS1sYWJlbCcpKSwgdGV4dDogdChvbmUoYywgJy5jaS10ZXh0JykpIH07CiAgICAgICAgfSksCiAgICAgICAgc3RhdHM6IGFsbChzMSwgJy5zdGF0cyA-IGRpdicpLm1hcChmdW5jdGlvbiAoZCkgewogICAgICAgICAgdmFyIG4gPSBvbmUoZCwgJy5zdGF0LW51bScpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdGFyZ2V0OiBuID8gKG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpIHx8IHQobikpIDogJycsCiAgICAgICAgICAgIHN1ZmZpeDogbiA_IChuLmdldEF0dHJpYnV0ZSgnZGF0YS1zdWZmaXgnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgbGFiZWw6IHQob25lKGQsICcuc3RhdC1sYWJlbCcpKQogICAgICAgICAgfTsKICAgICAgICB9KSwKICAgICAgICB0YWc6IHQob25lKHMxLCAnLmFib3V0LXRhZycpKSwKICAgICAgICBpbWc6IG9uZShzMSwgJy5hYm91dC1tZWRpYSBpbWcnKSA_IG9uZShzMSwgJy5hYm91dC1tZWRpYSBpbWcnKS5nZXRBdHRyaWJ1dGUoJ3NyYycpIDogJycsCiAgICAgICAgYWx0OiBvbmUoczEsICcuYWJvdXQtbWVkaWEgaW1nJykgPyBvbmUoczEsICcuYWJvdXQtbWVkaWEgaW1nJykuZ2V0QXR0cmlidXRlKCdhbHQnKSA6ICcnCiAgICAgIH0sCiAgICAgIGFkdjogewogICAgICAgIGhlYWQ6IHQob25lKHMyLCAnLnNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgICAgbGFiZWw6IHQob25lKHMyLCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSksCiAgICAgICAgaDI6IGh0bWwob25lKHMyLCAnLnNlY3Rpb24taGVhZCAuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzMiwgJy5hZHYtaXRlbScpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgICAgcmV0dXJuIHsgdGl0bGU6IHQob25lKGEsICdoMycpKSwgdGV4dDogdChvbmUoYSwgJ3AnKSkgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBzdGVwczogewogICAgICAgIGhlYWQ6IHQob25lKHMzLCAnLnNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgICAgbGFiZWw6IHQob25lKHMzLCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSksCiAgICAgICAgaDI6IGh0bWwob25lKHMzLCAnLnNlY3Rpb24taGVhZCAuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzMywgJy5zdGVwJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICByZXR1cm4geyBudW06IHQob25lKGEsICcuc3RlcC1udW0nKSksIHRpdGxlOiB0KG9uZShhLCAnaDMnKSksIHRleHQ6IHQob25lKGEsICdwJykpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgd29ya3M6IHsKICAgICAgICBoZWFkOiB0KG9uZShzNCwgJy5zZWN0aW9uLWxhYmVsIGgyJykpLAogICAgICAgIGFzaWRlOiBvd25UZXh0KG9uZShzNCwgJy5zbC1hc2lkZScpKSwKICAgICAgICBpdGVtczogYWxsKHM0LCAnLmNlbGwnKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICAgIHZhciBpbSA9IG9uZShjLCAnaW1nJyk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBocmVmOiBjLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnLAogICAgICAgICAgICBsYWJlbDogYy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSB8fCAnJywKICAgICAgICAgICAgaW1nOiBpbSA_IChpbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8ICcnKSA6ICcnLAogICAgICAgICAgICBhbHQ6IGltID8gKGltLmdldEF0dHJpYnV0ZSgnYWx0JykgfHwgJycpIDogJycKICAgICAgICAgIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgcHJpY2U6IHsKICAgICAgICBoZWFkOiB0KG9uZShzNSwgJy5zZWN0aW9uLWxhYmVsIGgyJykpLAogICAgICAgIGxhYmVsOiB0KG9uZShzNSwgJy5zZWN0aW9uLWhlYWQgLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShzNSwgJy5zZWN0aW9uLWhlYWQgLmgyJykpLAogICAgICAgIG5vdGU6IGh0bWwob25lKHM1LCAnLnByaWNlLW5vdGUnKSksCiAgICAgICAgY2FyZHM6IGFsbChzNSwgJy5wcmljZS1jYXJkJykubWFwKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBuYW1lOiB0KG9uZShjLCAnLnBjLW5hbWUnKSksCiAgICAgICAgICAgIHByaWNlOiBvd25UZXh0KG9uZShjLCAnLnBjLXByaWNlJykpLAogICAgICAgICAgICBzdWI6IHQob25lKGMsICcucGMtcHJpY2Utc3ViJykpLAogICAgICAgICAgICBwb3A6IHQob25lKGMsICcucGMtcG9wJykpLAogICAgICAgICAgICBpdGVtczogYWxsKGMsICcucGMtbGlzdCBsaScpLm1hcChmdW5jdGlvbiAobGkpIHsgcmV0dXJuIHQob25lKGxpLCAnc3Bhbjpub3QoLmljb24pJykpOyB9KSwKICAgICAgICAgICAgYnRuOiB7IHRleHQ6IG93blRleHQob25lKGMsICcuYnRuLWNhcmQnKSksIGhyZWY6IG9uZShjLCAnLmJ0bi1jYXJkJykgPyBvbmUoYywgJy5idG4tY2FyZCcpLmdldEF0dHJpYnV0ZSgnaHJlZicpIDogJycgfQogICAgICAgICAgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBmYXE6IHsKICAgICAgICBoZWFkOiB0KG9uZShzNiwgJy5zZWN0aW9uLWxhYmVsIGgyJykpLAogICAgICAgIGxhYmVsOiB0KG9uZShzNiwgJy5zZWN0aW9uLWhlYWQgLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShzNiwgJy5zZWN0aW9uLWhlYWQgLmgyJykpLAogICAgICAgIGl0ZW1zOiBhbGwoczYsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICByZXR1cm4geyBxOiBvd25UZXh0KG9uZShpdCwgJy5mYXEtcScpKSwgYTogaHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSkgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBjdGE6IHsKICAgICAgICBoMjogaHRtbChvbmUoc2NvcGUsICcuY3RhIC5oMicpKSwKICAgICAgICBidXR0b25zOiBhbGwoc2NvcGUsICcuY3RhIC5idG5zIC5idG4nKS5tYXAoZnVuY3Rpb24gKGIpIHsKICAgICAgICAgIHJldHVybiB7IHRleHQ6IHQoYWxsKGIsICcuYnRuLWxhYmVsID4gc3BhbicpWzBdKSwgaHJlZjogYi5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGZvb3ROb3RlOiBodG1sKG9uZShzY29wZSwgJy5mb290LW5vdGUnKSksCiAgICAgIGZvb3RlcjogewogICAgICAgIGNvcHk6IHQob25lKHNjb3BlLCAnLmZvb3RlciAuY29weScpKSwKICAgICAgICBzb2NpYWxzOiBhbGwoc2NvcGUsICcuc29jaWFscyBhJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICByZXR1cm4geyBsYWJlbDogdChhKSwgaHJlZjogYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0KICAgIH07CiAgfQoKICAvKiDQl9C90LDRh9C10L3QuNGPINGH0LjRgtCw0LXQvCDQuNC3INCY0KHQpdCe0JTQndCe0JPQniDQutC-0LTQsCDRgdGC0YDQsNC90LjRhtGLLCDQsCDQvdC1INC40Lcg0LbQuNCy0L7Qs9C-IERPTS4KICAgICDQodC60YDQuNC_0YLRiyB3Zm9saW8g0L_RgNCw0LLRj9GCINGA0LDQt9C80LXRgtC60YMg0LIg0LHRgNCw0YPQt9C10YDQtSDigJQg0L3QsNC_0YDQuNC80LXRgCwg0LTQvtC_0LjRgdGL0LLQsNGO0YIKICAgICB0YXJnZXQ9Il9ibGFuayIg0LLQvdC10YjQvdC40Lwg0YHRgdGL0LvQutCw0LwuINCn0LjRgtCw0Y8g0LjQtyBET00sINC_0LDQvdC10LvRjCDQt9Cw0L_QtdC60LDQu9CwCiAgICAg0YfRg9C20LjQtSDQv9GA0LDQstC60Lgg0LIg0LLQsNGIINC60L7QtC4gKi8KICB2YXIgY2ZnID0gbnVsbDsKCiAgZnVuY3Rpb24gcmVhZFNjcmlwdEJpdHMoc3JjLCBjKSB7CiAgICB2YXIgbSA9IHNyYy5tYXRjaCgvdmFyIGl0ZW1zID0gXFsoW1xzXFNdKj8pXF07Lyk7CiAgICBpZiAobSkgewogICAgICBjLnRpY2tlciA9IChtWzFdLm1hdGNoKC8nKCg_OlteJ1xcXXxcXC4pKiknL2cpIHx8IFtdKS5tYXAoZnVuY3Rpb24gKHMpIHsKICAgICAgICByZXR1cm4gcy5zbGljZSgxLCAtMSkucmVwbGFjZSgvXFwnL2csICInIik7CiAgICAgIH0pOwogICAgfQogIH0KICAvKiB2Mi4xIMK3INGE0L7RgtC-INC-0LHQu9C-0LbQutC4INC4INGE0LjQvdCw0LvQsCDQttC40LLRg9GCINCyINGB0YLQuNC70LUg0YHRgtGA0LDQvdC40YbRiyAo0YTQvtC9INGA0LDQt9C00LXQu9C-0LIpLAogICAgINCwINC90LUg0LIg0YDQsNC30LzQtdGC0LrQtTog0YfQuNGC0LDQtdC8INC4INC_0LjRiNC10Lwg0LjRhSDRgtCw0LwuICovCiAgdmFyIFBIT1RPX1JFID0gewogICAgY292ZXI6IC8oXC5hdi1tYWxlIFwuaW50cm86OmJlZm9yZSBce1tefV0qP3VybFwoIikoW14iXSopKCIpLywKICAgIGZpbmFsOiAvKFwuYXYtbWFsZSBcLmN0YTo6YmVmb3JlIFx7W159XSo_dXJsXCgiKShbXiJdKikoIikvCiAgfTsKICBmdW5jdGlvbiByZWFkU3R5bGVCaXRzKHNyYywgYykgewogICAgYy5waG90b3MgPSB7fTsKICAgIE9iamVjdC5rZXlzKFBIT1RPX1JFKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7CiAgICAgIHZhciBtID0gc3JjLm1hdGNoKFBIT1RPX1JFW2tdKTsKICAgICAgaWYgKG0pIGMucGhvdG9zW2tdID0gbVsyXTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBwYXRjaFN0eWxlKHNyYywgZCkgewogICAgT2JqZWN0LmtleXMoUEhPVE9fUkUpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgdmFyIHYgPSBkLnBob3RvcyAmJiBkLnBob3Rvc1trXTsKICAgICAgaWYgKCF2KSByZXR1cm47CiAgICAgIHYgPSB2LnJlcGxhY2UoL1siXFxcc10vZywgJycpOwogICAgICBzcmMgPSBzcmMucmVwbGFjZShQSE9UT19SRVtrXSwgZnVuY3Rpb24gKF8sIGEsIG9sZCwgYikgeyByZXR1cm4gYSArIHYgKyBiOyB9KTsKICAgIH0pOwogICAgcmV0dXJuIHNyYzsKICB9CiAgZnVuY3Rpb24gc3R5bGVPZihkb2MpIHsKICAgIHJldHVybiBhbGwoZG9jLCAnc3R5bGUnKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2LW1hbGUgLmJlbnRvJykgPiAtMTsgfSlbMF07CiAgfQoKICAvKiAtLS0tLS0tLS0tINC-0LrQvdC-IC0tLS0tLS0tLS0gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6bS1yb290LCNhdnptLXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnptLXJvb3QgaW5wdXQsI2F2em0tcm9vdCB0ZXh0YXJlYXtiYWNrZ3JvdW5kOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7JywKICAgICdvcGFjaXR5OjEgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjEuNCAhaW1wb3J0YW50fScsCiAgICAnI2F2em0tcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1iLnB7YmFja2dyb3VuZDojMWQxZDFmICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiNmZmYgIWltcG9ydGFudH0nLAogICAgJyNhdnptLXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2em0td2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDk4MHB4LDEwMCUpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjM1KTtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6bS1oZWFke3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnptLWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0nLAogICAgJyNhdnptLWJvZHl7ZmxleDoxO292ZXJmbG93OmF1dG87cGFkZGluZzo4cHggMjBweCAyNHB4fScsCiAgICAnI2F2em0tZm9vdHtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6bS1yb290IC5hdnptLWJ7Zm9udDppbmhlcml0O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcn0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tYi5we2JvcmRlci1jb2xvcjojMWQxZDFmfScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tc2VjPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCOCAgIjtjb2xvcjojODY4NjhifScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1zZWNbb3Blbl0-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCRSAgIn0nLAogICAgJyNhdnptLXJvb3QgLmF2em0taW57cGFkZGluZzoxNHB4fScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1me21hcmdpbi1ib3R0b206MTJweH0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tZiBpbnB1dCwjYXZ6bS1yb290IC5hdnptLWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6bS1yb290IC5hdnptLWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0nLAogICAgJ0BtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsjYXZ6bS1yb290IC5hdnptLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnptLXdpbntib3JkZXItcmFkaXVzOjB9fScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnptLXJvb3QgLmF2em0tY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2em0tcm9vdCAuYXZ6bS1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9JywKICAgICcjYXZ6bS1yb290IC5hdnptLWltZz5pbWd7d2lkdGg6NzBweDtoZWlnaHQ6ODhweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6I2VjZWNlYztmbGV4Om5vbmV9JywKICAgICcjYXZ6bS1yb290IC5hdnptLWltZyAuZ3tmbGV4OjF9JywKICAgICcjYXZ6bS1yb290IC5hdnptLWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnptLW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnptLW1zZ3tmb250LXNpemU6MTNweH0nCiAgXS5qb2luKCcnKTsKCiAgZnVuY3Rpb24gZXNjKHMpIHsKICAgIHJldHVybiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKQogICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykKICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKICB9CiAgZnVuY3Rpb24gZmllbGQobGFiZWwsIHBhdGgsIHZhbCwgdHlwZSkgewogICAgLyog0LvQuNGI0L3QuNC5INC_0LXRgNC10L3QvtGBOiDQsdGA0LDRg9C30LXRgCDRgdGK0LXQtNCw0LXRgiDQv9C10YDQstGL0Lkg0L_QvtGB0LvQtSA8dGV4dGFyZWE-ICovCiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2em0tZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnptLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2em0tbXNnJyk7IGlmIChlKSBlLnRleHRDb250ZW50ID0gczsgfQoKICBmdW5jdGlvbiBwYWdlU291cmNlKCkgewogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz90PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KTsKICB9CgogIC8qINCS0YHRjyDRhNC-0YDQvNCwINGB0YLRgNC-0LjRgtGB0Y8g0YLQvtC70YzQutC-INC_0L7RgdC70LUg0YLQvtCz0L4sINC60LDQuiDQv9GA0L7Rh9C40YLQsNC9INC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0OgogICAgINC30L3QsNGH0LXQvdC40Y8g0LTQvtC70LbQvdGLINCx0YDQsNGC0YzRgdGPINC40Lcg0L3QtdCz0L4sINCwINC90LUg0LjQtyDQttC40LLQvtCz0L4gRE9NLiAqLwogIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnptLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnptLWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0LzRg9C20YHQutC-0Lkg0YTQvtGC0L7RgdC10YHRgdC40Lg8L2gyPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bS1iIiBpZD0iYXZ6bS1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnptLWJvZHkiPic7CgogICAgLyog0KTQntCi0J4g0J7QkdCb0J7QltCa0Jgg0Jgg0KTQmNCd0JDQm9CQICovCiAgICBmdW5jdGlvbiBwaG90byhsYWJlbCwga2V5KSB7CiAgICAgIHZhciB2ID0gY2ZnLnBob3Rvc1trZXldIHx8ICcnOwogICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2em0tZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPjxkaXYgY2xhc3M9ImF2em0taW1nIj4nICsKICAgICAgICAnPGltZyBzcmM9IicgKyBlc2ModikgKyAnIiBkYXRhLXByZXY9InBob3Rvcy4nICsga2V5ICsgJyI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPjxpbnB1dCBkYXRhLXA9InBob3Rvcy4nICsga2V5ICsgJyIgdmFsdWU9IicgKyBlc2ModikgKyAnIj48L2Rpdj48L2Rpdj48L2Rpdj4nICsKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bS1iIiBkYXRhLWNob29zZT0iJyArICdwaG90b3MuJyArIGtleSArICciIHN0eWxlPSJwYWRkaW5nOjRweCA5cHg7Zm9udC1zaXplOjEycHg7bWFyZ2luOjAgMCAxMnB4Ij7QktGL0LHRgNCw0YLRjCDQuNC3INCw0LvRjNCx0L7QvNCwPC9idXR0b24-JzsKICAgIH0KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnptLXNlYyIgb3Blbj48c3VtbWFyeT7QpNC-0YLQviDQvtCx0LvQvtC20LrQuCDQuCDRhNC40L3QsNC70LA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bS1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6bS1oaW50Ij7QkNC00YDQtdGBINGE0L7RgtC-INGBIHdmb2xpbyAoaS53Zm9saW8ucnUv4oCmKS4g0JTQu9GPINC-0LHQu9C-0LbQutC4INCx0LXRgNC40YLQtSDRiNC40YDQvtC60LjQuSDQutCw0LTRgCDigJQgJyArCiAgICAgICfQvdCwINGC0LXQu9C10YTQvtC90LUg0L_QvtC60LDQt9GL0LLQsNC10YLRgdGPINC10LPQviDRgdC10YDQtdC00LjQvdCwLiDQmtC90L7Qv9C60LAgwqvQktGL0LHRgNCw0YLRjCDQuNC3INCw0LvRjNCx0L7QvNCwwrsg0L_QvtC60LDQt9GL0LLQsNC10YIg0LrQsNC00YDRiyAnICsKICAgICAgJ9C70Y7QsdC-0Lkg0YHRgtGA0LDQvdC40YbRiyDRgdCw0LnRgtCwIOKAlCDQvdCw0LbQvNC40YLQtSDQvdCwINC90YPQttC90YvQuS48L3A-JyArCiAgICAgIHBob3RvKCfQntCx0LvQvtC20LrQsCDigJQg0L_QtdGA0LLRi9C5INGN0LrRgNCw0L0nLCAnY292ZXInKSArCiAgICAgIHBob3RvKCfQpNC40L3QsNC7IOKAlCDCq9CT0L7RgtC-0LLRiyDQvdCw0YfQsNGC0Ywg0YHRitGR0LzQutGDP8K7JywgJ2ZpbmFsJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0J_QkNCa0JXQotCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bS1zZWMiPjxzdW1tYXJ5PtCf0LDQutC10YLRiyDQuCDRhtC10L3RiyAoJyArIGNmZy5wcmljZS5jYXJkcy5sZW5ndGggKyAnKSDigJQg0L3QsCDRgdGC0YDQsNC90LjRhtC1INGB0LrRgNGL0YLRizwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnptLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnptLWhpbnQiPtChIHYyLjEg0YbQtdC90Ysg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC90LUg0L_QvtC60LDQt9GL0LLQsNGO0YLRgdGPICjQvtC90Lgg0LXRgdGC0Ywg0LIg0YDQsNC30LTQtdC70LUgwqvQn9GA0LDQudGBwrspLCAnICsKICAgICAgJ9C90L4g0L7RgdGC0LDRjtGC0YHRjyDQsiDRgNCw0LfQvNC10YLQutC1INC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyLiDQnNC10L3Rj9GO0YLRgdGPINGG0LXQvdGLINCyIC9wcmljZSDigJQg0L_QvtC_0YDQsNCy0YzRgtC1INC40YUg0Lgg0LfQtNC10YHRjC4gJyArCiAgICAgICfQodCy0LXRgNGP0LnRgtC10YHRjCDRgdC-INGB0YLRgNCw0L3QuNGG0LXQuSDRhtC10L0g4oCUINGC0LDQvCDRgtC1INC20LUg0L_QsNC60LXRgtGLLCDQuCDRgNCw0YHRhdC-0LTQuNGC0YzRgdGPINC40Lwg0L3QtdC70YzQt9GPLjwvcD4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2em0tcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINCyINC70LXQvdGC0LUnLCAncHJpY2UuaGVhZCcsIGNmZy5wcmljZS5oZWFkKSArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdwcmljZS5sYWJlbCcsIGNmZy5wcmljZS5sYWJlbCkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyDQuCAmbHQ7ZW0mZ3Q7KScsICdwcmljZS5oMicsIGNmZy5wcmljZS5oMik7CiAgICBjZmcucHJpY2UuY2FyZHMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnptLWNhcmQiPjxoND7Qn9Cw0LrQtdGCICcgKyAoaSArIDEpICsgKGMucG9wID8gJyDigJQg0YEg0L_Qu9Cw0YjQutC-0LkgwqsnICsgZXNjKGMucG9wKSArICfCuycgOiAnJykgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKyBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdwcmljZS5jYXJkcy4nICsgaSArICcubmFtZScsIGMubmFtZSkgKwogICAgICAgIGZpZWxkKCfQptC10L3QsCAo0LHQtdC3INC30L3QsNC60LAg4oK9KScsICdwcmljZS5jYXJkcy4nICsgaSArICcucHJpY2UnLCBjLnByaWNlKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQv9C-0LQg0YbQtdC90L7QuScsICdwcmljZS5jYXJkcy4nICsgaSArICcuc3ViJywgYy5zdWIpOwogICAgICBjLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGxpLCBrKSB7CiAgICAgICAgaCArPSBmaWVsZCgn0J_Rg9C90LrRgiAnICsgKGsgKyAxKSwgJ3ByaWNlLmNhcmRzLicgKyBpICsgJy5pdGVtcy4nICsgaywgbGkpOwogICAgICB9KTsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKyBmaWVsZCgn0JrQvdC-0L_QutCwIOKAlCDRgtC10LrRgdGCJywgJ3ByaWNlLmNhcmRzLicgKyBpICsgJy5idG4udGV4dCcsIGMuYnRuLnRleHQpICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwIOKAlCDQsNC00YDQtdGBJywgJ3ByaWNlLmNhcmRzLicgKyBpICsgJy5idG4uaHJlZicsIGMuYnRuLmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9Ch0L3QvtGB0LrQsCDQv9C-0LQg0L_QsNC60LXRgtCw0LzQuCAo0LzQvtC20L3QviBIVE1MKScsICdwcmljZS5ub3RlJywgY2ZnLnByaWNlLm5vdGUsICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JLQntCf0KDQntCh0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnptLXNlYyI-PHN1bW1hcnk-0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLICgnICsgY2ZnLmZhcS5pdGVtcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnptLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnptLWhpbnQiPtCe0YLQstC10YIg0L7QtNC40L06INC-0L0g0LbQtSDRg9GF0L7QtNC40YIg0LIg0YDQsNC30LzQtdGC0LrRgyDRgdC70L7QstC-INCyINGB0LvQvtCy0L4uICcgKwogICAgICAn0KLQsNC6INGC0YDQtdCx0YPQtdGCIEdvb2dsZSDigJQg0L_QtdGA0LXRgdC60LDQtyDRgdCy0L7QuNC80Lgg0YHQu9C-0LLQsNC80Lgg0L3QtSDQt9Cw0YHRh9C40YLRi9Cy0LDQtdGC0YHRjy48L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQsiDQu9C10L3RgtC1JywgJ2ZhcS5oZWFkJywgY2ZnLmZhcS5oZWFkKSArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdmYXEubGFiZWwnLCBjZmcuZmFxLmxhYmVsKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2ZhcS5oMicsIGNmZy5mYXEuaDIpOwogICAgY2ZnLmZhcS5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2em0tY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQktC-0L_RgNC-0YEnLCAnZmFxLml0ZW1zLicgKyBpICsgJy5xJywgZi5xKSArCiAgICAgICAgZmllbGQoJ9Ce0YLQstC10YIgKNC80L7QttC90L4gSFRNTCknLCAnZmFxLml0ZW1zLicgKyBpICsgJy5hJywgZi5hLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCg0JDQkdCe0KLQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2em0tc2VjIj48c3VtbWFyeT7Qn9C-0YDRgtGE0L7Qu9C40L4gKCcgKyBjZmcud29ya3MuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bS1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQsiDQu9C10L3RgtC1JywgJ3dvcmtzLmhlYWQnLCBjZmcud29ya3MuaGVhZCkgKwogICAgICBmaWVsZCgn0J_QvtC80LXRgtC60LAg0YHQv9GA0LDQstCwJywgJ3dvcmtzLmFzaWRlJywgY2ZnLndvcmtzLmFzaWRlKSArICc8L2Rpdj4nOwogICAgY2ZnLndvcmtzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHcsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1jYXJkIj48aDQ-0JrQsNC00YAgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bS1mIj48bGFiZWw-0KTQvtGC0L7Qs9GA0LDRhNC40Y88L2xhYmVsPjxkaXYgY2xhc3M9ImF2em0taW1nIj4nICsKICAgICAgICAnPGltZyBzcmM9IicgKyBlc2Mody5pbWcpICsgJyIgZGF0YS1wcmV2PSJ3b3Jrcy5pdGVtcy4nICsgaSArICcuaW1nIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iZyI-PGlucHV0IGRhdGEtcD0id29ya3MuaXRlbXMuJyArIGkgKyAnLmltZyIgdmFsdWU9IicgKyBlc2Mody5pbWcpICsgJyI-PC9kaXY-PC9kaXY-PC9kaXY-JyArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2em0tYiIgZGF0YS1jaG9vc2U9IicgKyAnd29ya3MuaXRlbXMuJyArIGkgKyAnLmltZycgKyAnIiBzdHlsZT0icGFkZGluZzo0cHggOXB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbjowIDAgMTJweCI-0JLRi9Cx0YDQsNGC0Ywg0LjQtyDQsNC70YzQsdC-0LzQsDwvYnV0dG9uPicgKwogICAgICAgIGZpZWxkKCdBbHQt0YLQtdC60YHRgiAo0LLQuNC00LXQvSDQv9C-0LjRgdC60L7QstC40LrQsNC8KScsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuYWx0Jywgdy5hbHQpICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKyBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0LTQu9GPINC00L7RgdGC0YPQv9C90L7RgdGC0LgnLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLmxhYmVsJywgdy5sYWJlbCkgKwogICAgICAgIGZpZWxkKCfQodGB0YvQu9C60LAnLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLmhyZWYnLCB3LmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCo0JDQn9Ca0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnptLXNlYyI-PHN1bW1hcnk-0KjQsNC_0LrQsDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnptLWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArIGZpZWxkKCfQodGC0YDQvtC60LAgMScsICdoZXJvLmxpbmUxJywgY2ZnLmhlcm8ubGluZTEpICsKICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAyICjQutGD0YDRgdC40LIpJywgJ2hlcm8ubGluZTInLCBjZmcuaGVyby5saW5lMikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMycsICdoZXJvLmxpbmUzJywgY2ZnLmhlcm8ubGluZTMpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC30LDQs9C-0LvQvtCy0L7QuicsICdsZWRlJywgY2ZnLmxlZGUsICdhcmVhJykgKwogICAgICBmaWVsZCgn0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwIOKAlCDRh9C10YDQtdC3INC30LDQv9GP0YLRg9GOICjQvdCwINGB0YLRgNCw0L3QuNGG0LUg0YHQutGA0YvRgtCwKScsICd0aWNrZXJMaW5lJywgY2ZnLnRpY2tlci5qb2luKCcsICcpLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCf0J7QlNCl0J7QlCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2em0tc2VjIj48c3VtbWFyeT7Qn9C-0LTRhdC-0LQ8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bS1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdhYm91dC5sYWJlbCcsIGNmZy5hYm91dC5sYWJlbCkgKwogICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0L3QsCDRhNC-0YLQvicsICdhYm91dC50YWcnLCBjZmcuYWJvdXQudGFnKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2Fib3V0LmgyJywgY2ZnLmFib3V0LmgyKTsKICAgIGNmZy5hYm91dC5wLmZvckVhY2goZnVuY3Rpb24gKHAsIGkpIHsKICAgICAgaCArPSBmaWVsZCgn0JDQsdC30LDRhiAnICsgKGkgKyAxKSwgJ2Fib3V0LnAuJyArIGksIHAsICdhcmVhJyk7CiAgICB9KTsKICAgIGNmZy5hYm91dC5jaGVja3MuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnptLWNhcmQiPjxoND7Qn9GD0L3QutGCICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdhYm91dC5jaGVja3MuJyArIGkgKyAnLmxhYmVsJywgYy5sYWJlbCkgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2Fib3V0LmNoZWNrcy4nICsgaSArICcudGV4dCcsIGMudGV4dCkgKyAnPC9kaXY-PC9kaXY-JzsKICAgIH0pOwogICAgY2ZnLmFib3V0LnN0YXRzLmZvckVhY2goZnVuY3Rpb24gKHMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1jYXJkIj48aDQ-0KbQuNGE0YDQsCAnICsgKGkgKyAxKSArICc8L2g0PjxkaXYgY2xhc3M9ImF2em0tcm93Ij4nICsKICAgICAgICBmaWVsZCgn0JfQvdCw0YfQtdC90LjQtScsICdhYm91dC5zdGF0cy4nICsgaSArICcudGFyZ2V0Jywgcy50YXJnZXQpICsKICAgICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0YwnLCAnYWJvdXQuc3RhdHMuJyArIGkgKyAnLmxhYmVsJywgcy5sYWJlbCkgKyAnPC9kaXY-PC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1mIj48bGFiZWw-0KTQvtGC0L7Qs9GA0LDRhNC40Y88L2xhYmVsPjxkaXYgY2xhc3M9ImF2em0taW1nIj4nICsKICAgICAgJzxpbWcgc3JjPSInICsgZXNjKGNmZy5hYm91dC5pbWcpICsgJyIgZGF0YS1wcmV2PSJhYm91dC5pbWciPicgKwogICAgICAnPGRpdiBjbGFzcz0iZyI-PGlucHV0IGRhdGEtcD0iYWJvdXQuaW1nIiB2YWx1ZT0iJyArIGVzYyhjZmcuYWJvdXQuaW1nKSArICciPjwvZGl2PjwvZGl2PjwvZGl2PicgKwogICAgICBmaWVsZCgnQWx0LdGC0LXQutGB0YInLCAnYWJvdXQuYWx0JywgY2ZnLmFib3V0LmFsdCkgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JrQntCc0KMg0J_QntCU0KXQntCU0JjQoiArINCo0JDQk9CYICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bS1zZWMiPjxzdW1tYXJ5PtCa0L7QvNGDINC_0L7QtNGF0L7QtNC40YIg0Lgg0LrQsNC6INC_0YDQvtGF0L7QtNC40YI8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bS1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnptLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQsiDQu9C10L3RgtC1JywgJ2Fkdi5oZWFkJywgY2ZnLmFkdi5oZWFkKSArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdhZHYubGFiZWwnLCBjZmcuYWR2LmxhYmVsKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2Fkdi5oMicsIGNmZy5hZHYuaDIpOwogICAgY2ZnLmFkdi5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2em0tY2FyZCI-PGg0PtCf0L7QstC-0LQgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6JywgJ2Fkdi5pdGVtcy4nICsgaSArICcudGl0bGUnLCBhLnRpdGxlKSArCiAgICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnYWR2Lml0ZW1zLicgKyBpICsgJy50ZXh0JywgYS50ZXh0LCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2em0tcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINCyINC70LXQvdGC0LUgKNGI0LDQs9C4KScsICdzdGVwcy5oZWFkJywgY2ZnLnN0ZXBzLmhlYWQpICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ3N0ZXBzLmxhYmVsJywgY2ZnLnN0ZXBzLmxhYmVsKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRiNCw0LPQvtCyICjQvNC-0LbQvdC-ICZsdDticiZndDsg0LggJmx0O2VtJmd0OyknLCAnc3RlcHMuaDInLCBjZmcuc3RlcHMuaDIpOwogICAgY2ZnLnN0ZXBzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1jYXJkIj48aDQ-0KjQsNCzICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2em0tcm93Ij4nICsgZmllbGQoJ9Cd0L7QvNC10YAnLCAnc3RlcHMuaXRlbXMuJyArIGkgKyAnLm51bScsIGEubnVtKSArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdzdGVwcy5pdGVtcy4nICsgaSArICcudGl0bGUnLCBhLnRpdGxlKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdzdGVwcy5pdGVtcy4nICsgaSArICcudGV4dCcsIGEudGV4dCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQn9Cg0JjQl9Cr0JIg0Jgg0KTQo9Ci0JXQoCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2em0tc2VjIj48c3VtbWFyeT7Qn9GA0LjQt9GL0LIg0Lgg0YTRg9GC0LXRgDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnptLWluIj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDQv9GA0LjQt9GL0LLQsCAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2N0YS5oMicsIGNmZy5jdGEuaDIpOwogICAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bS1jYXJkIj48aDQ-0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy50ZXh0JywgYi50ZXh0KSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEnLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLmhyZWYnLCBiLmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9Ch0YLRgNC-0LrQsCDQv9C-0LQg0LrQvdC-0L_QutCw0LzQuCAo0LzQvtC20L3QviBIVE1MKScsICdmb290Tm90ZScsIGNmZy5mb290Tm90ZSwgJ2FyZWEnKSArCiAgICAgIGZpZWxkKCfQmtC-0L_QuNGA0LDQudGCJywgJ2Zvb3Rlci5jb3B5JywgY2ZnLmZvb3Rlci5jb3B5KTsKICAgIGNmZy5mb290ZXIuc29jaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2em0tY2FyZCI-PGg0PtCh0L7RhtGB0LXRgtGMICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6bS1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ2Zvb3Rlci5zb2NpYWxzLicgKyBpICsgJy5sYWJlbCcsIHMubGFiZWwpICsKICAgICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICdmb290ZXIuc29jaWFscy4nICsgaSArICcuaHJlZicsIHMuaHJlZikgKyAnPC9kaXY-PC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPC9kaXY-PGRpdiBpZD0iYXZ6bS1mb290Ij4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2em0tYiBwIiBpZD0iYXZ6bS1idWlsZCI-0KHQvtCx0YDQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2em0tYiIgaWQ9ImF2em0tdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAgICc8c3BhbiBpZD0iYXZ6bS1tc2ciPjwvc3Bhbj48L2Rpdj4nICsKICAgICAgJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAyMHB4IDE4cHgiPjx0ZXh0YXJlYSBpZD0iYXZ6bS1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgICByb290LmlubmVySFRNTCA9IGg7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnptLWNsb3NlJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcm9vdC5yZW1vdmUoKTsgfTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGlmICghcCkgcmV0dXJuOwogICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gZS50YXJnZXQudmFsdWU7CiAgICB9KTsKCiAgICAvKiB2Mi4xIMK3INCy0YvQsdC-0YAg0LrQsNC00YDQsCDRgdC-INGB0YLRgNCw0L3QuNGG0Ysg0YHQsNC50YLQsCAo0LrQsNC6INCyINC_0LDQvdC10LvQuCDQvtCx0YPRh9C10L3QuNGPKSAqLwogICAgdmFyIE1BWFcgPSAxOTIwLCBsYXN0U3JjID0gJ2h0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uJzsKICAgIGZ1bmN0aW9uIGFicyh1KSB7CiAgICAgIGlmICghdSkgcmV0dXJuICcnOwogICAgICBpZiAodS5pbmRleE9mKCcvLycpID09PSAwKSByZXR1cm4gJ2h0dHBzOicgKyB1OwogICAgICBpZiAodS5pbmRleE9mKCcvJykgPT09IDApIHJldHVybiBsb2NhdGlvbi5vcmlnaW4gKyB1OwogICAgICByZXR1cm4gdTsKICAgIH0KICAgIGZ1bmN0aW9uIGZyb21TcmNzZXQoc2V0LCBzcmMpIHsKICAgICAgaWYgKCFzZXQpIHsgdmFyIHUgPSBhYnMoc3JjKTsgcmV0dXJuIHsgZnVsbDogdSwgc21hbGw6IHUgfTsgfQogICAgICB2YXIgbGlzdCA9IHNldC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoeCkgewogICAgICAgIHZhciBwID0geC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHJldHVybiB7IHU6IGFicyhwWzBdKSwgdzogcGFyc2VJbnQocFsxXSwgMTApIHx8IDAgfTsKICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLnU7IH0pOwogICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7IHZhciB2ID0gYWJzKHNyYyk7IHJldHVybiB7IGZ1bGw6IHYsIHNtYWxsOiB2IH07IH0KICAgICAgdmFyIGJpZyA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLncgLSBhLnc7IH0pOwogICAgICB2YXIgc21hbGwgPSBsaXN0LnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS53IC0gYi53OyB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICBmdWxsOiAoYmlnLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53IDw9IE1BWFc7IH0pWzBdIHx8IGJpZ1tiaWcubGVuZ3RoIC0gMV0pLnUsCiAgICAgICAgc21hbGw6IChzbWFsbC5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudyA-PSAyODA7IH0pWzBdIHx8IHNtYWxsWzBdKS51CiAgICAgIH07CiAgICB9CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNob29zZScpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgcGFuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwYW5lLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6NiU7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OjIxNDc0ODM2NDc7JyArCiAgICAgICAgJ3BhZGRpbmc6MTZweDtvdmVyZmxvdzphdXRvO2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuNCknOwogICAgICBwYW5lLmlubmVySFRNTCA9ICc8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4Ij7QkNC00YDQtdGBINGB0YLRgNCw0L3QuNGG0Ysg0YEg0LrQsNC00YDQsNC80LggKNCw0LvRjNCx0L7QvCwg0YDQsNC30LTQtdC7INC_0L7RgNGC0YTQvtC70LjQvik6PC9wPicgKwogICAgICAgICc8aW5wdXQgaWQ9ImF2em0tc3JjIiBzdHlsZT0id2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweCIgdmFsdWU9IicgKyBlc2MobGFzdFNyYykgKyAnIj4nICsKICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbjoxMHB4IDAiPjxidXR0b24gY2xhc3M9ImF2em0tYiBwIiBpZD0iYXZ6bS1sb2FkIj7Qn9C-0LrQsNC30LDRgtGMINC60LDQtNGA0Ys8L2J1dHRvbj4gJyArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2em0tYiIgaWQ9ImF2em0tY2FuY2VsIj7QntGC0LzQtdC90LA8L2J1dHRvbj48L3A-JyArCiAgICAgICAgJzxkaXYgaWQ9ImF2em0tZ3JpZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjEwcHgiPjwvZGl2Pic7CiAgICAgIHJvb3QuYXBwZW5kQ2hpbGQocGFuZSk7CiAgICAgIHBhbmUucXVlcnlTZWxlY3RvcignI2F2em0tY2FuY2VsJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcGFuZS5yZW1vdmUoKTsgfTsKICAgICAgcGFuZS5xdWVyeVNlbGVjdG9yKCcjYXZ6bS1sb2FkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgdXJsID0gcGFuZS5xdWVyeVNlbGVjdG9yKCcjYXZ6bS1zcmMnKS52YWx1ZS50cmltKCk7CiAgICAgICAgaWYgKCF1cmwpIHJldHVybjsKICAgICAgICBsYXN0U3JjID0gdXJsOwogICAgICAgIHZhciBoZWFkID0gcGFuZS5xdWVyeVNlbGVjdG9yKCdwJyk7CiAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQl9Cw0LPRgNGD0LbQsNGOICcgKyB1cmwgKyAn4oCmJzsKICAgICAgICBmZXRjaCh1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA-IC0xID8gJyYnIDogJz8nKSArICd0PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSkKICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgICAgIHZhciBzZWVuID0ge30sIG91dCA9IFtdOwogICAgICAgICAgICBhbGwoZG9jLCAnaW1nJykuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHsKICAgICAgICAgICAgICB2YXIgc2V0ID0gaW0uZ2V0QXR0cmlidXRlKCdzcmNzZXQnKSB8fCBpbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgJyc7CiAgICAgICAgICAgICAgdmFyIHMgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSB8fCAnJzsKICAgICAgICAgICAgICBpZiAoc2V0LmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwICYmIHMuaW5kZXhPZignaS53Zm9saW8ucnUnKSA8IDApIHJldHVybjsKICAgICAgICAgICAgICB2YXIgcGFpciA9IGZyb21TcmNzZXQoc2V0LCBzKTsKICAgICAgICAgICAgICBpZiAoIXBhaXIuZnVsbCB8fCBzZWVuW3BhaXIuZnVsbF0pIHJldHVybjsKICAgICAgICAgICAgICBzZWVuW3BhaXIuZnVsbF0gPSAxOyBvdXQucHVzaChwYWlyKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBncmlkID0gcGFuZS5xdWVyeVNlbGVjdG9yKCcjYXZ6bS1ncmlkJyk7CiAgICAgICAgICAgIGlmICghb3V0Lmxlbmd0aCkgeyBoZWFkLnRleHRDb250ZW50ID0gJ9Ca0LDQtNGA0L7QsiDQvdC1INC90LDRiNC70L7RgdGMIOKAlCDQv9GA0L7QstC10YDRjNGC0LUg0LDQtNGA0LXRgS4nOyByZXR1cm47IH0KICAgICAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQndCw0LbQvNC40YLQtSDQvdCwINC60LDQtNGAICgnICsgb3V0Lmxlbmd0aCArICcpJzsKICAgICAgICAgICAgZ3JpZC5zdHlsZS5kaXNwbGF5ID0gJ2dyaWQnOwogICAgICAgICAgICBvdXQuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgICAgICB2YXIgaW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgICAgICAgICAgICBpbS5zcmMgPSBpdC5zbWFsbDsgaW0ubG9hZGluZyA9ICdsYXp5JzsKICAgICAgICAgICAgICBpbS5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOjEwMCU7aGVpZ2h0OjEzMHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo4cHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jayc7CiAgICAgICAgICAgICAgLyog0L3QsCDRgdCw0LnRgtC1INGDINCy0YHQtdGFINC60LDRgNGC0LjQvdC-0LogcG9pbnRlci1ldmVudHM6bm9uZSAo0LfQsNGJ0LjRgtCwINC-0YIg0YHQvtGF0YDQsNC90LXQvdC40Y8pIOKAlAogICAgICAgICAgICAgICAgINCx0LXQtyDRjdGC0L7QuSDRgdGC0YDQvtC60Lgg0L3QsNC20LDRgtC40LUg0L3QsCDQutCw0LTRgCDQv9GA0L7RhdC-0LTQuNC70L4g0LzQuNC80L4g0Lgg0L7QutC90L4gwqvQt9Cw0LLQuNGB0LDQu9C-wrsgKi8KICAgICAgICAgICAgICBpbS5zdHlsZS5zZXRQcm9wZXJ0eSgncG9pbnRlci1ldmVudHMnLCAnYXV0bycsICdpbXBvcnRhbnQnKTsKICAgICAgICAgICAgICBpbS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIGlucCA9IHJvb3QucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS1wPSInICsgcCArICciXScpOwogICAgICAgICAgICAgICAgaWYgKGlucCkgaW5wLnZhbHVlID0gaXQuZnVsbDsKICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgcCArICciXScpOwogICAgICAgICAgICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gaXQuZnVsbDsKICAgICAgICAgICAgICAgIHBhbmUucmVtb3ZlKCk7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBncmlkLmFwcGVuZENoaWxkKGltKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IGhlYWQudGV4dENvbnRlbnQgPSAn0J3QtSDQvtGC0LrRgNGL0LvQvtGB0Yw6ICcgKyBlcnIubWVzc2FnZTsgfSk7CiAgICAgIH07CiAgICB9KTsKCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBzZXRQYXRoKG9iaiwgcGF0aCwgdmFsKSB7CiAgICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKSwgbyA9IG9iaiwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgICBvW3BhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXSA9IHZhbDsKICAgIH0KICAgIGZ1bmN0aW9uIGhhcnZlc3QoKSB7CiAgICAgIGFsbChyb290LCAnW2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICAgIHZhciBwID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgICBpZiAocCA9PT0gJ3RpY2tlckxpbmUnKSB7CiAgICAgICAgICBjZmcudGlja2VyID0gZWwudmFsdWUuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMudHJpbSgpOyB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHNldFBhdGgoY2ZnLCBwLCBlbC52YWx1ZSk7CiAgICAgIH0pOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMIC0tLS0tLS0tLS0gKi8KCiAgICAvKiDQn9C10YDQtdC_0LjRgdGL0LLQsNC10Lwg0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDRgtC10LrRgdGCINGN0LvQtdC80LXQvdGC0LAsINC90LUg0YLRgNC-0LPQsNGPINCy0LvQvtC20LXQvdC90YvQtQogICAgICAg0LfQvdCw0YfQutC4ICguaWNvbiwgLnZoLCAuYXJyLCAuY3VycmVuY3ksIC5zaWduKSDigJQg0L3QuCDQuNGFINC_0L7RgNGP0LTQvtC6LAogICAgICAg0L3QuCDQv9GA0L7QsdC10LvRiyDQstC-0LrRgNGD0LMuINCg0LDQvdGM0YjQtSDQt9C00LXRgdGMINCy0YHRkSDRgdC-0LTQtdGA0LbQuNC80L7QtSDRgdGC0LjRgNCw0LvQvtGB0YwsCiAgICAgICDQsCDRjdC70LXQvNC10L3RgtGLINCy0L7Qt9Cy0YDQsNGJ0LDQu9C40YHRjCDQsiDQutC-0L3QtdGGOiDQt9C90LDRh9C-0LosINGB0YLQvtGP0LLRiNC40Lkg0J_QldCg0JXQlAogICAgICAg0YLQtdC60YHRgtC-0LwsINC_0LXRgNC10LXQt9C20LDQuyDQt9CwINC90LXQs9C-LiAqLwogICAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgaWYgKCFlbCB8fCB0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgIHZhciB0ZXh0cyA9IFtdLCBpOwogICAgZm9yIChpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHRleHRzLnB1c2goZWwuY2hpbGROb2Rlc1tpXSk7CiAgICB9CiAgICBpZiAoIXRleHRzLmxlbmd0aCkgeyBlbC5hcHBlbmRDaGlsZChlbC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHYpKTsgcmV0dXJuOyB9CiAgICB2YXIgbWFpbiA9IG51bGw7CiAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG1haW4gPSB0ZXh0c1tpXTsgYnJlYWs7IH0KICAgIH0KICAgIGlmICghbWFpbikgbWFpbiA9IHRleHRzWzBdOwogICAgdmFyIHJhdyA9IG1haW4ubm9kZVZhbHVlOwogICAgdmFyIHByZSA9IChyYXcubWF0Y2goL15ccyovKSB8fCBbJyddKVswXTsKICAgIHZhciBwb3N0ID0gKHJhdy5tYXRjaCgvXHMqJC8pIHx8IFsnJ10pWzBdOwogICAgaWYgKHJhdy50cmltKCkgPT09ICcnKSB7IHByZSA9ICcnOyBwb3N0ID0gJyc7IH0KICAgIG1haW4ubm9kZVZhbHVlID0gcHJlICsgdiArIHBvc3Q7CiAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRleHRzW2ldICE9PSBtYWluICYmIHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgdGV4dHNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXh0c1tpXSk7CiAgICAgIH0KICAgIH0KICB9CiAgICBmdW5jdGlvbiBzZXRQbGFpbihlbCwgdikgeyBpZiAoZWwgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSBlbC50ZXh0Q29udGVudCA9IHY7IH0KICAgIGZ1bmN0aW9uIHNldEh0bWwoZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwuaW5uZXJIVE1MID0gdjsgfQoKICAgIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgICB2YXIgbGluZXMgPSBhbGwoc2NvcGUsICcuZGlzcGxheSAuaW5uZXInKTsKICAgICAgc2V0UGxhaW4obGluZXNbMF0sIGQuaGVyby5saW5lMSk7CiAgICAgIGlmIChsaW5lc1sxXSkgc2V0UGxhaW4ob25lKGxpbmVzWzFdLCAnZW0nKSB8fCBsaW5lc1sxXSwgZC5oZXJvLmxpbmUyKTsKICAgICAgc2V0UGxhaW4obGluZXNbMl0sIGQuaGVyby5saW5lMyk7CiAgICAgIHNldFBsYWluKG9uZShzY29wZSwgJy5sZWRlJyksIGQubGVkZSk7CgogICAgICB2YXIgczEgPSBudW0oc2NvcGUsICcwMScpOwogICAgICBzZXRQbGFpbihvbmUoczEsICcuYWJvdXQtdGV4dCAubGFiZWwnKSwgZC5hYm91dC5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHMxLCAnLmFib3V0LXRleHQgLmgyJyksIGQuYWJvdXQuaDIpOwogICAgICBhbGwoczEsICcuYWJvdXQtdGV4dCBwJykuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkgewogICAgICAgIGlmICh0eXBlb2YgZC5hYm91dC5wW2ldID09PSAnc3RyaW5nJykgc2V0UGxhaW4ocCwgZC5hYm91dC5wW2ldKTsKICAgICAgfSk7CiAgICAgIGFsbChzMSwgJy5jaGVjay1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciBzID0gZC5hYm91dC5jaGVja3NbaV07IGlmICghcykgcmV0dXJuOwogICAgICAgIHNldFBsYWluKG9uZShjLCAnLmNpLWxhYmVsJyksIHMubGFiZWwpOwogICAgICAgIHNldFBsYWluKG9uZShjLCAnLmNpLXRleHQnKSwgcy50ZXh0KTsKICAgICAgfSk7CiAgICAgIGFsbChzMSwgJy5zdGF0cyA-IGRpdicpLmZvckVhY2goZnVuY3Rpb24gKGR2LCBpKSB7CiAgICAgICAgdmFyIHMgPSBkLmFib3V0LnN0YXRzW2ldOyBpZiAoIXMpIHJldHVybjsKICAgICAgICB2YXIgbiA9IG9uZShkdiwgJy5zdGF0LW51bScpOwogICAgICAgIGlmIChuKSB7CiAgICAgICAgICBpZiAobi5oYXNBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0JykpIG4uc2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcsIHMudGFyZ2V0KTsKICAgICAgICAgIGVsc2Ugc2V0UGxhaW4obiwgcy50YXJnZXQpOwogICAgICAgIH0KICAgICAgICBzZXRQbGFpbihvbmUoZHYsICcuc3RhdC1sYWJlbCcpLCBzLmxhYmVsKTsKICAgICAgfSk7CiAgICAgIHNldFRleHQob25lKHMxLCAnLmFib3V0LXRhZycpLCBkLmFib3V0LnRhZyk7CiAgICAgIHZhciBhbSA9IG9uZShzMSwgJy5hYm91dC1tZWRpYSBpbWcnKTsKICAgICAgaWYgKGFtKSB7IGlmIChkLmFib3V0LmltZykgYW0uc2V0QXR0cmlidXRlKCdzcmMnLCBkLmFib3V0LmltZyk7IGFtLnNldEF0dHJpYnV0ZSgnYWx0JywgZC5hYm91dC5hbHQpOyB9CgogICAgICB2YXIgczIgPSBudW0oc2NvcGUsICcwMicpOwogICAgICBzZXRQbGFpbihvbmUoczIsICcuc2VjdGlvbi1sYWJlbCBoMicpLCBkLmFkdi5oZWFkKTsKICAgICAgc2V0UGxhaW4ob25lKHMyLCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSwgZC5hZHYubGFiZWwpOwogICAgICBzZXRIdG1sKG9uZShzMiwgJy5zZWN0aW9uLWhlYWQgLmgyJyksIGQuYWR2LmgyKTsKICAgICAgYWxsKHMyLCAnLmFkdi1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciBzID0gZC5hZHYuaXRlbXNbaV07IGlmICghcykgcmV0dXJuOwogICAgICAgIHNldFBsYWluKG9uZShhLCAnaDMnKSwgcy50aXRsZSk7CiAgICAgICAgc2V0UGxhaW4ob25lKGEsICdwJyksIHMudGV4dCk7CiAgICAgIH0pOwoKICAgICAgdmFyIHMzID0gbnVtKHNjb3BlLCAnMDMnKTsKICAgICAgc2V0UGxhaW4ob25lKHMzLCAnLnNlY3Rpb24tbGFiZWwgaDInKSwgZC5zdGVwcy5oZWFkKTsKICAgICAgc2V0UGxhaW4ob25lKHMzLCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSwgZC5zdGVwcy5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHMzLCAnLnNlY3Rpb24taGVhZCAuaDInKSwgZC5zdGVwcy5oMik7CiAgICAgIGFsbChzMywgJy5zdGVwJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciBzID0gZC5zdGVwcy5pdGVtc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgICAgc2V0UGxhaW4ob25lKGEsICcuc3RlcC1udW0nKSwgcy5udW0pOwogICAgICAgIHNldFBsYWluKG9uZShhLCAnaDMnKSwgcy50aXRsZSk7CiAgICAgICAgc2V0UGxhaW4ob25lKGEsICdwJyksIHMudGV4dCk7CiAgICAgIH0pOwoKICAgICAgdmFyIHM0ID0gbnVtKHNjb3BlLCAnMDQnKTsKICAgICAgc2V0UGxhaW4ob25lKHM0LCAnLnNlY3Rpb24tbGFiZWwgaDInKSwgZC53b3Jrcy5oZWFkKTsKICAgICAgc2V0VGV4dChvbmUoczQsICcuc2wtYXNpZGUnKSwgZC53b3Jrcy5hc2lkZSk7CiAgICAgIGFsbChzNCwgJy5jZWxsJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciB3ID0gZC53b3Jrcy5pdGVtc1tpXTsgaWYgKCF3KSByZXR1cm47CiAgICAgICAgaWYgKHcuaHJlZikgYy5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3LmhyZWYpOwogICAgICAgIGMuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdy5sYWJlbCk7CiAgICAgICAgdmFyIGltID0gb25lKGMsICdpbWcnKTsKICAgICAgICBpZiAoaW0pIHsgaWYgKHcuaW1nKSBpbS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHcuaW1nKTsgaW0uc2V0QXR0cmlidXRlKCdhbHQnLCB3LmFsdCk7IH0KICAgICAgfSk7CgogICAgICB2YXIgczUgPSBudW0oc2NvcGUsICcwNScpOwogICAgICBzZXRQbGFpbihvbmUoczUsICcuc2VjdGlvbi1sYWJlbCBoMicpLCBkLnByaWNlLmhlYWQpOwogICAgICBzZXRQbGFpbihvbmUoczUsICcuc2VjdGlvbi1oZWFkIC5sYWJlbCcpLCBkLnByaWNlLmxhYmVsKTsKICAgICAgc2V0SHRtbChvbmUoczUsICcuc2VjdGlvbi1oZWFkIC5oMicpLCBkLnByaWNlLmgyKTsKICAgICAgc2V0SHRtbChvbmUoczUsICcucHJpY2Utbm90ZScpLCBkLnByaWNlLm5vdGUpOwogICAgICBhbGwoczUsICcucHJpY2UtY2FyZCcpLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgICB2YXIgcyA9IGQucHJpY2UuY2FyZHNbaV07IGlmICghcykgcmV0dXJuOwogICAgICAgIHNldFBsYWluKG9uZShjLCAnLnBjLW5hbWUnKSwgcy5uYW1lKTsKICAgICAgICBzZXRUZXh0KG9uZShjLCAnLnBjLXByaWNlJyksIHMucHJpY2UpOwogICAgICAgIHNldFBsYWluKG9uZShjLCAnLnBjLXByaWNlLXN1YicpLCBzLnN1Yik7CiAgICAgICAgYWxsKGMsICcucGMtbGlzdCBsaScpLmZvckVhY2goZnVuY3Rpb24gKGxpLCBrKSB7CiAgICAgICAgICB2YXIgc3AgPSBhbGwobGksICdzcGFuJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmNsYXNzTmFtZS5pbmRleE9mKCdpY29uJykgPT09IC0xOyB9KVswXTsKICAgICAgICAgIGlmIChzcCAmJiB0eXBlb2Ygcy5pdGVtc1trXSA9PT0gJ3N0cmluZycpIHNldFBsYWluKHNwLCBzLml0ZW1zW2tdKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgYiA9IG9uZShjLCAnLmJ0bi1jYXJkJyk7CiAgICAgICAgaWYgKGIpIHsgaWYgKHMuYnRuLmhyZWYpIGIuc2V0QXR0cmlidXRlKCdocmVmJywgcy5idG4uaHJlZik7IHNldFRleHQoYiwgcy5idG4udGV4dCk7IH0KICAgICAgfSk7CgogICAgICB2YXIgczYgPSBudW0oc2NvcGUsICcwNicpOwogICAgICBzZXRQbGFpbihvbmUoczYsICcuc2VjdGlvbi1sYWJlbCBoMicpLCBkLmZhcS5oZWFkKTsKICAgICAgc2V0UGxhaW4ob25lKHM2LCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSwgZC5mYXEubGFiZWwpOwogICAgICBzZXRIdG1sKG9uZShzNiwgJy5zZWN0aW9uLWhlYWQgLmgyJyksIGQuZmFxLmgyKTsKICAgICAgYWxsKHM2LCAnLmZhcS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgcyA9IGQuZmFxLml0ZW1zW2ldOyBpZiAoIXMpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5mYXEtcScpLCBzLnEpOwogICAgICAgIHNldEh0bWwob25lKGl0LCAnLmZhcS1hLWlubmVyJyksIHMuYSk7CiAgICAgIH0pOwoKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuY3RhIC5oMicpLCBkLmN0YS5oMik7CiAgICAgIGFsbChzY29wZSwgJy5jdGEgLmJ0bnMgLmJ0bicpLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgICB2YXIgcyA9IGQuY3RhLmJ1dHRvbnNbaV07IGlmICghcykgcmV0dXJuOwogICAgICAgIGlmIChzLmhyZWYpIGIuc2V0QXR0cmlidXRlKCdocmVmJywgcy5ocmVmKTsKICAgICAgICBhbGwoYiwgJy5idG4tbGFiZWwgPiBzcGFuJykuZm9yRWFjaChmdW5jdGlvbiAoeCkgeyBzZXRQbGFpbih4LCBzLnRleHQpOyB9KTsKICAgICAgfSk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmZvb3Qtbm90ZScpLCBkLmZvb3ROb3RlKTsKICAgICAgc2V0UGxhaW4ob25lKHNjb3BlLCAnLmZvb3RlciAuY29weScpLCBkLmZvb3Rlci5jb3B5KTsKICAgICAgYWxsKHNjb3BlLCAnLnNvY2lhbHMgYScpLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICB2YXIgcyA9IGQuZm9vdGVyLnNvY2lhbHNbaV07IGlmICghcykgcmV0dXJuOwogICAgICAgIHNldFBsYWluKGEsIHMubGFiZWwpOwogICAgICAgIGlmIChzLmhyZWYpIGEuc2V0QXR0cmlidXRlKCdocmVmJywgcy5ocmVmKTsKICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24ganNTdHIocykgeyByZXR1cm4gIiciICsgU3RyaW5nKHMpLnJlcGxhY2UoL1xcL2csICdcXFxcJykucmVwbGFjZSgvJy9nLCAiXFwnIikgKyAiJyI7IH0KCiAgICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgICAgdmFyIG91dCA9IHNyYywgbWlzc2VkID0gW107CiAgICAgIGlmIChkLnRpY2tlci5sZW5ndGgpIHsKICAgICAgICBpZiAoIS92YXIgaXRlbXMgPSBcWy8udGVzdChvdXQpKSBtaXNzZWQucHVzaCgn0LHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBvdXQgPSBvdXQucmVwbGFjZSgvKHZhciBpdGVtcyA9IFxbKVtcc1xTXSo_KFxdOykvLCBmdW5jdGlvbiAobSwgcDEsIHAyKSB7CiAgICAgICAgICAgIHZhciBib2R5ID0gZC50aWNrZXIubWFwKGZ1bmN0aW9uIChzKSB7IHJldHVybiAnICAgICAgICAnICsganNTdHIocyk7IH0pLmpvaW4oJyxcbicpOwogICAgICAgICAgICByZXR1cm4gcDEgKyAnXG4nICsgYm9keSArICdcbiAgICAgICcgKyBwMjsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4geyB0ZXh0OiBvdXQsIG1pc3NlZDogbWlzc2VkIH07CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDRgNCw0LfQvNC10YLQutCwIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBkaWdpdHMocykgeyByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykucmVwbGFjZSgvW15cZF0vZywgJycpOyB9CgogICAgZnVuY3Rpb24gYnVpbGRMZChkb2MsIHNjb3BlLCBkKSB7CiAgICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJyB9OwogICAgICB2YXIgbzsKICAgICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAnbGQranNvbiDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQoKICAgICAgdmFyIGcgPSBvWydAZ3JhcGgnXSB8fCBbXTsKICAgICAgc3luY0Nhbm9uKGcpOwogICAgICBmdW5jdGlvbiBub2RlKHApIHsgcmV0dXJuIGcuZmlsdGVyKHApWzBdOyB9CgogICAgICB2YXIgcGFnZSA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIFN0cmluZyhuWydAaWQnXSB8fCAnJykuaW5kZXhPZignI3dlYnBhZ2UnKSA-IC0xOyB9KTsKICAgICAgaWYgKHBhZ2UpIHBhZ2UuZGF0ZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKCiAgICAgIC8qINCS0L7Qv9GA0L7RgdGLIOKAlCDQuNC3INGD0LbQtSDRgdC-0LHRgNCw0L3QvdC-0Lkg0YDQsNC30LzQtdGC0LrQuCwg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-ICovCiAgICAgIHZhciBmYXEgPSBub2RlKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pOwogICAgICBpZiAoZmFxKSB7CiAgICAgICAgZmFxLm1haW5FbnRpdHkgPSBhbGwoc2NvcGUsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnQHR5cGUnOiAnUXVlc3Rpb24nLAogICAgICAgICAgICBuYW1lOiB0KG9uZShpdCwgJy5mYXEtcScpKSwKICAgICAgICAgICAgYWNjZXB0ZWRBbnN3ZXI6IHsgJ0B0eXBlJzogJ0Fuc3dlcicsIHRleHQ6IHQob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH0KICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIC8qINCg0LDQsdC-0YLRiyDigJQg0LjQtyDRgdC10YLQutC4ICovCiAgICAgIHZhciBsaXN0ID0gbm9kZShmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0l0ZW1MaXN0JzsgfSk7CiAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgdmFyIGNlbGxzID0gYWxsKHNjb3BlLCAnLmNlbGwnKTsKICAgICAgICBsaXN0Lm51bWJlck9mSXRlbXMgPSBjZWxscy5sZW5ndGg7CiAgICAgICAgbGlzdC5pdGVtTGlzdEVsZW1lbnQgPSBjZWxscy5tYXAoZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgICAgIHZhciBpbSA9IG9uZShjLCAnaW1nJyk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLAogICAgICAgICAgICBwb3NpdGlvbjogaSArIDEsCiAgICAgICAgICAgIGl0ZW06IHsKICAgICAgICAgICAgICAnQHR5cGUnOiAnSW1hZ2VPYmplY3QnLAogICAgICAgICAgICAgIG5hbWU6IGMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgfHwgJycsCiAgICAgICAgICAgICAgY2FwdGlvbjogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgICBjb250ZW50VXJsOiBpbSA_IChpbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8ICcnKSA6ICcnLAogICAgICAgICAgICAgIHdpZHRoOiBpbSA_IE51bWJlcihpbS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJykpIDogdW5kZWZpbmVkLAogICAgICAgICAgICAgIGhlaWdodDogaW0gPyBOdW1iZXIoaW0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSkgOiB1bmRlZmluZWQKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyog0KbQtdC90Ysg4oCUINC40Lcg0LrQsNGA0YLQvtGH0LXQuiDQvdCwINGB0YLRgNCw0L3QuNGG0LUsINGH0YLQvtCx0Ysg0L3QtSDRgNCw0LfQvtGI0LvQuNGB0YwgKi8KICAgICAgdmFyIHNydiA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdTZXJ2aWNlJzsgfSk7CiAgICAgIGlmIChzcnYgJiYgQXJyYXkuaXNBcnJheShzcnYub2ZmZXJzKSkgewogICAgICAgIHZhciBjYXJkcyA9IGFsbChzY29wZSwgJy5wcmljZS1jYXJkJyk7CiAgICAgICAgc3J2Lm9mZmVycyA9IGNhcmRzLm1hcChmdW5jdGlvbiAoYywgaSkgewogICAgICAgICAgdmFyIHdhcyA9IHNydi5vZmZlcnNbaV0gfHwge307CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnQHR5cGUnOiAnT2ZmZXInLAogICAgICAgICAgICBuYW1lOiB0KG9uZShjLCAnLnBjLW5hbWUnKSksCiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0KG9uZShjLCAnLnBjLXByaWNlLXN1YicpKSwKICAgICAgICAgICAgcHJpY2U6IGRpZ2l0cyhvd25UZXh0KG9uZShjLCAnLnBjLXByaWNlJykpKSwKICAgICAgICAgICAgcHJpY2VDdXJyZW5jeTogd2FzLnByaWNlQ3VycmVuY3kgfHwgJ1JVQicsCiAgICAgICAgICAgIHByaWNlVmFsaWRVbnRpbDogd2FzLnByaWNlVmFsaWRVbnRpbCB8fCAnMjAyNi0xMi0zMScsCiAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UnCiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICB9CgogICAgICB2YXIgcHJpbWFyeSA9IG5vZGUoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIFN0cmluZyhuWydAaWQnXSB8fCAnJykuaW5kZXhPZignI3ByaW1hcnlpbWFnZScpID4gLTE7IH0pOwogICAgICB2YXIgZmlyc3RJbWcgPSBvbmUoc2NvcGUsICcuY2VsbCBpbWcnKTsKICAgICAgaWYgKHByaW1hcnkgJiYgZmlyc3RJbWcpIHsKICAgICAgICBwcmltYXJ5LnVybCA9IGZpcnN0SW1nLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgcHJpbWFyeS51cmw7CiAgICAgICAgcHJpbWFyeS5jYXB0aW9uID0gZmlyc3RJbWcuZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCBwcmltYXJ5LmNhcHRpb247CiAgICAgIH0KCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgoKICAgIGZ1bmN0aW9uIGNvbW1lbnRzKGRvYykgewogICAgICB2YXIgb3V0ID0gW10sIHcgPSBkb2MuY3JlYXRlVHJlZVdhbGtlcihkb2MuYm9keSwgMTI4LCBudWxsLCBmYWxzZSksIG47CiAgICAgIHdoaWxlICgobiA9IHcubmV4dE5vZGUoKSkpIHsKICAgICAgICB2YXIgdiA9IG4ubm9kZVZhbHVlIHx8ICcnOwogICAgICAgIGlmICh2LmluZGV4T2YoJ0FWQU5aQVRPLlJVJykgPiAtMSkgeyBvdXQucHVzaCgnPCEtLScgKyB2ICsgJy0tPicpOyBvdXQucHVzaCgnJyk7IGJyZWFrOyB9CiAgICAgIH0KICAgICAgcmV0dXJuIG91dDsKICAgIH0KCiAgICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICAgIHJldHVybiBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1tYWxlJyk7CiAgICAgICAgdmFyIHN0eWxlID0gc3R5bGVPZihkb2MpOwogICAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ2F2bS10aWNrZXInKSA-IC0xOyB9KVswXTsKCiAgICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6IC5hdi1tYWxlJyk7CiAgICAgICAgaWYgKCFzdHlsZSkgbWlzc2luZy5wdXNoKCc8c3R5bGU-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAoIXNjcmlwdCkgbWlzc2luZy5wdXNoKCc8c2NyaXB0PiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LUg0L3QsNC50LTQtdC90L46ICcgKyBtaXNzaW5nLmpvaW4oJywgJykpOwoKICAgICAgICB3cml0ZUFsbChzY29wZSwgZCk7CiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBwYXRjaFN0eWxlKHN0eWxlLnRleHRDb250ZW50LCBkKTsKICAgICAgICB2YXIgc2MgPSBwYXRjaFNjcmlwdChzY3JpcHQudGV4dENvbnRlbnQsIGQpOwogICAgICAgIHZhciBsZCA9IGJ1aWxkTGQoZG9jLCBzY29wZSwgZCk7CiAgICAgICAgaWYgKCFsZC50ZXh0KSB0aHJvdyBuZXcgRXJyb3IobGQuZXJyKTsKCiAgICAgICAgdmFyIHRleHQgPSBjb21tZW50cyhkb2MpLmNvbmNhdChbCiAgICAgICAgICAvKiB2Mjog0YjRgNC40YTRgtGLINC4INC30L3QsNGH0LrQuCDQstGI0LjRgtGLINCyINGB0YLQuNC70Ywg0YHRgtGA0LDQvdC40YbRiyDigJQg0YHRgdGL0LvQvtC6INC90LAgR29vZ2xlINC90LXRgiAqLwogICAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9pLndmb2xpby5ydSI-JywKICAgICAgICAgICcnLAogICAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgICc8c2NyaXB0PicsCiAgICAgICAgICBzYy50ZXh0LAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICAgIGxkLnRleHQsCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgICAgXSkuam9pbignXG4nKTsKCiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgbWlzc2VkOiBzYy5taXNzZWQgfTsKICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICAgINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINC00LDQttC1INC40Lcg0YLQtdGFINC60YPRgdC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L_QsNC90LXQu9GMINC60L7Qv9C40YDRg9C10YIKICAgICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgICAgdGV4dCA9IFN0cmluZyh0ZXh0KS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnptLW91dCcpOwogICAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgICB2YXIgb2sgPSBmYWxzZTsKICAgICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICAgIH0KCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnptLWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgaGFydmVzdCgpOwogICAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgICBhc3NlbWJsZShjZmcpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIC8qINGB0LLQtdGA0Y_QtdC8OiDQstGB0ZEg0LvQuCDQstCy0LXQtNGR0L3QvdC-0LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0L_QvtC_0LDQu9C-INCyINC60L7QtCAqLwogICAgICAgIHZhciBkb2MyID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jMi5xdWVyeVNlbGVjdG9yKCcuYXYtbWFsZScpKTsKICAgICAgICB2YXIgc3QzID0gc3R5bGVPZihkb2MyKTsKICAgICAgICBpZiAoYWdhaW4gJiYgc3QzKSByZWFkU3R5bGVCaXRzKHN0My50ZXh0Q29udGVudCwgYWdhaW4pOwogICAgICAgIHZhciBzYzMgPSBhbGwoZG9jMiwgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdhdm0tdGlja2VyJykgPiAtMTsgfSlbMF07CiAgICAgICAgaWYgKGFnYWluICYmIHNjMykgcmVhZFNjcmlwdEJpdHMoc2MzLnRleHRDb250ZW50LCBhZ2Fpbik7CiAgICAgICAgLyogdjIuMSDCtyDQt9C00LXRgdGMINGB0YLQvtGP0LvQviDCq2TCuyDigJQg0YLQsNC60L7QuSDQv9C10YDQtdC80LXQvdC90L7QuSDQvdC10YIsINC4INGB0LHQvtGA0LrQsCDQv9Cw0LTQsNC70LAKICAgICAgICAgICDRgSDCq2QgaXMgbm90IGRlZmluZWTCuzsg0YHQstC10YDRj9C10Lwg0YEg0YLQtdC8LCDRh9GC0L4g0YHQvtCx0YDQsNC90L4g0LjQtyDRhNC-0YDQvNGLICovCiAgICAgICAgdmFyIG5vdExhbmRlZCA9IGFnYWluID8gbGFuZGVkKGNmZywgYWdhaW4sIC9eJC8pIDogWyfRgdGC0YDQsNC90LjRhtCwINC90LUg0YDQsNC30L7QsdGA0LDQu9Cw0YHRjCddOwogICAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgICAn0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiDRgdGC0YDQsNC90LjRhtGLINC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLic7CiAgICAgICAgaWYgKHJlcy5taXNzZWQubGVuZ3RoKSBub3RlICs9ICcg0J3QtSDQvdCw0LnQtNC10L3QviDQsiDRgdC60YDQuNC_0YLQtTogJyArIHJlcy5taXNzZWQuam9pbignLCAnKSArICcuJzsKICAgICAgICBpZiAobm90TGFuZGVkLmxlbmd0aCkgbm90ZSArPSAnINCd0JUg0JfQkNCf0JjQodCQ0JvQntCh0Kwg0LIg0LrQvtC0OiAnICsgbm90TGFuZGVkLnNsaWNlKDAsIDYpLmpvaW4oJywgJykgKwogICAgICAgICAgKG5vdExhbmRlZC5sZW5ndGggPiA2ID8gJyDQuCDQtdGJ0ZEgJyArIChub3RMYW5kZWQubGVuZ3RoIC0gNikgOiAnJykgKyAnLic7CiAgICAgICAgY29weShyZXMudGV4dCwgbm90ZSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRgdC-0LHRgNCw0L3QvjogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnptLXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhc3NlbWJsZShzbmFwKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1tYWxlJykpOwogICAgICAgIHZhciBzYyA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignYXZtLXRpY2tlcicpID4gLTE7IH0pWzBdOwogICAgICAgIGlmIChzYykgcmVhZFNjcmlwdEJpdHMoc2MudGV4dENvbnRlbnQsIGFnYWluKTsKICAgICAgICB2YXIgc3QyID0gc3R5bGVPZihkb2MpOwogICAgICAgIGlmIChzdDIgJiYgYWdhaW4pIHJlYWRTdHlsZUJpdHMoc3QyLnRleHRDb250ZW50LCBhZ2Fpbik7CiAgICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShzbmFwKSwgYiA9IEpTT04uc3RyaW5naWZ5KGFnYWluKTsKICAgICAgICBpZiAoYSA9PT0gYikgbXNnKCfQodGF0L7QtNC40YLRgdGPOiDRgdCx0L7RgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QuiDQtNCw0ZHRgiDRgtC1INC20LUg0LfQvdCw0YfQtdC90LjRjyAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0LHRi9C70L4nLCBKU09OLnBhcnNlKGEpKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cf0YDQvtCy0LXRgNC60LAg0L3QtSDQv9GA0L7RiNC70LA6ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CgogIH0KCiAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2LW1hbGUnKTsKICAgIGlmICghc2NvcGUpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0LHQu9C-0LrQsCAuYXYtbWFsZScpOwogICAgY2ZnID0gcmVhZENmZyhzY29wZSk7CiAgICB2YXIgc2MgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ2F2bS10aWNrZXInKSA-IC0xOwogICAgfSlbMF07CiAgICBpZiAoc2MpIHJlYWRTY3JpcHRCaXRzKHNjLnRleHRDb250ZW50LCBjZmcpOwogICAgdmFyIHN0ID0gc3R5bGVPZihkb2MpOwogICAgcmVhZFN0eWxlQml0cyhzdCA_IHN0LnRleHRDb250ZW50IDogJycsIGNmZyk7CiAgICBzdGFydCgpOwogIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICByb290LmlubmVySFRNTCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2em0td2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2em0taGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQvNGD0LbRgdC60L7QuSDRhNC-0YLQvtGB0LXRgdGB0LjQuDwvaDI-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnptLWJvZHkiPjxwIGNsYXNzPSJhdnptLWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC80YPQttGB0LrQvtC5INGE0L7RgtC-0YHQtdGB0YHQuNC4INC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJpbnRlcmlvciIsdGl0bGU6ItCf0LDQvdC10LvRjCDQuNC90YLQtdGA0YzQtdGA0L3QvtC5INGB0YrRkdC80LrQuCIsc2hvcnQ6ItCY0L3RgtC10YDRjNC10YDRiyIsaGludDoi0YDQsNCx0L7RgtGLLCDQv9GA0LXQuNC80YPRidC10YHRgtCy0LAsINC60LvQuNC10L3RgtGLLCDRgNCw0LfQvNC10YLQutCwIixwYWdlczpbIi9pbnRlcmllcm5vZS1wb3J0Zm9saW8iXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0JjQndCi0JXQoNCs0JXQoNCd0J7QmSDQodCq0IHQnNCa0JggIHYyIOKAlCDQs9C10L3QtdGA0LDRgtC-0YAg0LrQvtC00LAKICAg0KDQsNCx0L7RgtCw0LXRgiDQvdCwIC9pbnRlcmllcm5vZS1wb3J0Zm9saW8KCiAgINCd0LjRh9C10LPQviDQvdC1INC_0YPQsdC70LjQutGD0LXRgi4g0KfQuNGC0LDQtdGCINCY0KHQpdCe0JTQndCr0Jkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YssINC_0L7QtNGB0YLQsNCy0LvRj9C10YIKICAg0LfQvdCw0YfQtdC90LjRjyDQuNC3INGE0L7RgNC80Ysg0Lgg0LLRi9C00LDRkdGCINCy0LXRgdGMINCx0LvQvtC6INGG0LXQu9C40LrQvtC8IOKAlCDQstGB0YLQsNCy0LvRj9C10YLRgdGPCiAgINC-0LTQvdC40Lwg0LrRg9GB0LrQvtC8INC_0L7QstC10YDRhSBIVE1MLdCx0LvQvtC60LAg0YHRgtGA0LDQvdC40YbRiy4KCiAgINCY0YHRhdC-0LTQvdC40LosINCwINC90LUg0LbQuNCy0L7QuSBET006INGB0LrRgNC40L_RgtGLIHdmb2xpbyDQtNC-0L_QuNGB0YvQstCw0Y7RgiDQstC90LXRiNC90LjQvAogICDRgdGB0YvQu9C60LDQvCB0YXJnZXQ9Il9ibGFuayIg0L_RgNGP0LzQviDQsiDQsdGA0LDRg9C30LXRgNC1LCDQuCDQv9Cw0L3QtdC70YwsINGH0LjRgtCw0Y7RidCw0Y8KICAg0LbQuNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDLCDQt9Cw0L_QtdC60LDQu9CwINCx0Ysg0Y3RgtC4INGH0YPQttC40LUg0L_RgNCw0LLQutC4INCyINCy0LDRiCDQutC-0LQuCiAgINCX0LTQtdGB0Ywg0YHRgdGL0LvQutC4INC90LAgVGVsZWdyYW0g0LggQmVoYW5jZSDQutCw0Log0YDQsNC3INCy0L3QtdGI0L3QuNC1LCDRgtCw0Log0YfRgtC-CiAgINCx0L7Qu9C10LfQvdGMINCx0YvQu9CwINCx0Ysg0L3QtSDRgtC10L7RgNC10YLQuNGH0LXRgdC60L7QuS4KCiAgINCn0YLQviDQv9Cw0L3QtdC70Ywg0LTQtdGA0LbQuNGCINCy0LzQtdGB0YLQtSwg0YfRgtC-0LHRiyDQvdC1INGA0LDQt9C-0YjQu9C-0YHRjDoKICAgICDCtyDQutCw0YDRgtC40L3QutCwIFNlcnZpY2Ug0LIg0YDQsNC30LzQtdGC0LrQtSDigJQg0LjQtyDQv9C10YDQstC-0Lkg0YDQsNCx0L7RgtGLINCz0LDQu9C10YDQtdC4OwogICAgIMK3INGG0LXQvdCwINCyINGA0LDQt9C80LXRgtC60LUg4oCUINC40Lcg0L_QtdGA0LLQvtCz0L4g0L_RgNC10LjQvNGD0YnQtdGB0YLQstCwLCDQs9C00LUg0L7QvdCwINC90LDQv9C40YHQsNC90LAKICAgICAgINC00LvRjyDQu9GO0LTQtdC5LiDQldGB0LvQuCDRhtC40YTRgNGDINC90LDQudGC0Lgg0L3QtSDRg9C00LDQu9C-0YHRjCwg0L_QsNC90LXQu9GMINCd0JUg0L_RgNC40LTRg9C80YvQstCw0LXRggogICAgICAg0LXRkSwg0LAg0L7RgdGC0LDQstC70Y_QtdGCINC_0YDQtdC20L3RjtGOINC4INC_0YDQtdC00YPQv9GA0LXQttC00LDQtdGCLgoKICAg0KDQsNCx0L7RgiDRgNC-0LLQvdC-IDExOiDQutC70LDRgdGB0YsgZzHigKZnMTEg0LfQsNC00LDRjtGCINCz0LXQvtC80LXRgtGA0LjRjiDQsdC10L3RgtC-LdGB0LXRgtC60LgsCiAgINC00LLQtdC90LDQtNGG0LDRgtCw0Y8g0YLRgNC10LHRg9C10YIg0L_RgNCw0LLQutC4IENTUy4g0J_QvtGN0YLQvtC80YMg0LTQvtCx0LDQstC70LXQvdC40Y8g0YDQsNCx0L7RgiDQt9C00LXRgdGMINC90LXRgi4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiDQodGB0YvQu9C60LAg0L3QsCDRiNGA0LjRhNGC0Ysg0LHQu9C-0LrQsCDigJQg0LrQvtC90YHRgtCw0L3RgtCwLCDQsCDQvdC1INGC0L4sINGH0YLQviDQvdCw0YjQu9C-0YHRjCDQvdCwINGB0YLRgNCw0L3QuNGG0LUuCiAgICAg0JIgPGhlYWQ-IHdmb2xpbyDRgdCy0L7RjyDRgdGB0YvQu9C60LAg0L3QsCBKb3N0L1J1YmlrINC-0YIg0YLQtdC80YssINC4INC-0L3QsCDRgdGC0L7QuNGCINCg0JDQndCs0KjQlQogICAgINC90LDRiNC10Lk6INC_0LDQvdC10LvRjCDQsdGA0LDQu9CwINC_0LXRgNCy0YPRjiDQv9C-0LTRhdC-0LTRj9GJ0YPRjiDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC-0Lkg0L_QvtC00LzQtdC90Y_Qu9CwCiAgICAg0L3QsNGH0LXRgNGC0LDQvdC40Y8g0LHQu9C-0LrQsCDQvdCwINGC0LXQvNC40L3Riy4g0J3QsNCx0L7RgCDQstC10YHQvtCyINC30LDQtNCw0L0gQ1NTINCx0LvQvtC60LAsINC_0L7RjdGC0L7QvNGDCiAgICAg0LTQtdGA0LbQuNC8INC10LPQviDQt9C00LXRgdGMLiDQnNC10L3Rj9C10YLRgdGPINC00LjQt9Cw0LnQvSDigJQg0LzQtdC90Y_QtdGC0YHRjyDRjdGC0LAg0YHRgtGA0L7QutCwLiAqLwogIHZhciBBVlpfRk9OVF9MSU5LID0gJzxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9Sm9zdDp3Z2h0QDEwMDsyMDA7MzAwOzQwMDs1MDA7NjAwJyArCiAgICAnJmFtcDtmYW1pbHk9UnViaWs6aXRhbCx3Z2h0QDAsMTAwOzAsMjAwOzAsMzAwOzEsMTAwOzEsMjAwJyArCiAgICAnJmFtcDtmYW1pbHk9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDIwLi40OCwxMDAuLjcwMCwwLi4xLC01MC4uMjAwJyArCiAgICAnJmFtcDtkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI-JzsKCiAgLyogLS0tLS0tLS0tLSDQv9GA0L7QstC10YDQutCwIMKr0LTQvtC70LXRgtC10LvQviDQu9C4wrsgLS0tLS0tLS0tLQogICAgINCf0LDQvdC10LvRjCDQv9C40YjQtdGCINC30L3QsNGH0LXQvdC40Y8g0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YfQtdGA0LXQtyDRgdC10LvQtdC60YLQvtGA0YsuINCV0YHQu9C4INGB0LXQu9C10LrRgtC-0YAKICAgICDQvdC1INC90LDRiNGR0LvRgdGPINC40LvQuCDQv9C-0LTRgdGC0LDQvdC-0LLQutCwINC90LUg0YHQvtCy0L_QsNC70LAg4oCUINC30LDQv9C40YHRjCDQvNC-0LvRh9CwINC90LUg0L_RgNC-0LjRgdGF0L7QtNC40YIuCiAgICAg0JjQvNC10L3QvdC-INGC0LDQuiDRh9C40YHQu9C-INGB0YrRkdC80L7QuiDQt9Cw0YHRgtGA0Y_Qu9C-INC90LAgMTI1OiDQv9Cw0L3QtdC70Ywg0L_QvtGB0YfQuNGC0LDQu9CwIDEyNywKICAgICDQt9Cw0L_QuNGB0LDRgtGMINC90LUg0YHQvNC-0LPQu9CwLCDQsCDQv9GA0L7QstC10YDQutCwIMKr0YHQsdC-0YDQutCwINGB0L7QstC_0LDQtNCw0LXRgiDRgSDQuNGB0YXQvtC00L3QuNC60L7QvMK7CiAgICAg0YHRgNCw0LLQvdC40LLQsNC70LAg0L7QtNC40L3QsNC60L7QstC-INC90LXQv9GA0LDQstC40LvRjNC90L7QtSDRgSDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3Ri9C8LgoKICAgICDQn9C-0Y3RgtC-0LzRgyDQv9C-0YHQu9C1INGB0LHQvtGA0LrQuCDRh9C40YLQsNC10Lwg0YDQtdC30YPQu9GM0YLQsNGCINCe0JHQoNCQ0KLQndCeINC4INGB0LLQtdGA0Y_QtdC8INGBINGC0LXQvCwg0YfRgtC-CiAgICAg0LLQstGR0Lsg0YfQtdC70L7QstC10LouINCd0LXRgdC-0LLQv9Cw0LLRiNC40LUg0L_QvtC70Y8g0L_QsNC90LXQu9GMINC90LDQt9GL0LLQsNC10YIg0LLRgdC70YPRhS4gKi8KICBmdW5jdGlvbiBsYW5kZWQoZXhwZWN0ZWQsIGFjdHVhbCwgc2tpcCwgcGF0aCwgb3V0KSB7CiAgICBwYXRoID0gcGF0aCB8fCAnJzsgb3V0ID0gb3V0IHx8IFtdOwogICAgaWYgKGV4cGVjdGVkICYmIHR5cGVvZiBleHBlY3RlZCA9PT0gJ29iamVjdCcgJiYgYWN0dWFsICYmIHR5cGVvZiBhY3R1YWwgPT09ICdvYmplY3QnKSB7CiAgICAgIE9iamVjdC5rZXlzKGV4cGVjdGVkKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7CiAgICAgICAgbGFuZGVkKGV4cGVjdGVkW2tdLCBhY3R1YWxba10sIHNraXAsIHBhdGggPyBwYXRoICsgJy4nICsgayA6IGssIG91dCk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChTdHJpbmcoZXhwZWN0ZWQgPT0gbnVsbCA_ICcnIDogZXhwZWN0ZWQpICE9PSBTdHJpbmcoYWN0dWFsID09IG51bGwgPyAnJyA6IGFjdHVhbCkpIHsKICAgICAgaWYgKCFza2lwIHx8ICFza2lwLnRlc3QocGF0aCkpIG91dC5wdXNoKHBhdGgpOwogICAgfQogICAgcmV0dXJuIG91dDsKICB9CgogIC8qIC0tLS0tLS0tLS0g0L7QsdGJ0LjQtSDQutCw0YDRgtC-0YfQutC4OiDQs9C70LDQstC90LDRjyDigJQg0LjRgdGC0L7Rh9C90LjQuiDQuNGB0YLQuNC90YsgLS0tLS0tLS0tLQogICAgINCe0LTQuNC9INC4INGC0L7RgiDQttC1IEBpZCwg0L7Qv9C40YHQsNC90L3Ri9C5INC_0L4t0YDQsNC30L3QvtC80YMg0L3QsCDRgNCw0LfQvdGL0YUg0YHRgtGA0LDQvdC40YbQsNGFLCDigJQKICAgICDQvNC-0LvRh9Cw0LvQuNCy0LDRjyDQv9C-0LvQvtC80LrQsDog0L_QvtC40YHQutC-0LLQuNC6INC4INCY0Jgg0LLRi9Cx0LjRgNCw0Y7RgiDRgdCw0LzQuCwg0LrQsNC60L7QuSDQstC10YDRgdC40LgKICAgICDQstC10YDQuNGC0YwsINC4INC90LDQs9GA0LDQtNGLINC80L7Qs9GD0YIg0L3QtSDQt9Cw0YHRh9C40YLQsNGC0YzRgdGPLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDRjdGC0Lgg0YPQt9C70YsKICAgICDQuiDRjdGC0LDQu9C-0L3RgyDQv9GA0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQtS4KCiAgICAg0K3RgtCw0LvQvtC9INGB0L3Rj9GCINGBINCz0LvQsNCy0L3QvtC5IDMwINC-0LrRgtGP0LHRgNGPIDIwMjYuINCV0YHQu9C4INCz0LvQsNCy0L3Rg9GOINC00L7Qv9C-0LvQvdGP0YIg4oCUCiAgICAg0L7QsdC90L7QstC40YLRjCDQt9C00LXRgdGMINC4INC_0LXRgNC10YHQvtCx0YDQsNGC0Ywg0L3QsNCx0L7RgDogcHl0aG9uMyBwYWNrLXRvb2xraXQucHkgKi8KICB2YXIgQVZaX0NBTk9OID0gewogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciI6IHsKICAgICAgIkB0eXBlIjogIlBlcnNvbiIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IiwKICAgICAgImFsdGVybmF0ZU5hbWUiOiAiQXZhbnphdG8iLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LguINCf0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3QsNGPINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINGBIDIwMTkg0LPQvtC00LAuINCR0L7Qu9C10LUgMjUwINGA0LXQsNC70LjQt9C-0LLQsNC90L3Ri9GFINC_0YDQvtC10LrRgtC-0LIuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogWwogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwLzBpT2ZMSWV2UE1wUTVfRkc2TUtEY092UEhZNFNjaVAyLzN2OHdjUGhsTmpvVUhKWV94MUY5QlBkNjJ4T3NNNU8xLzg1WldiNmRZRmdUOWIzM0gzSUcxbmcuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL3k4RG02SlpWQ25sNENVRnprZW94Y2h2UEkxd1ZkRENLLzctVW9MS0MyZ1FrcmdhWHhyclN5THFZdGFNR1J6X3UtL3BCWWdSWDVzUGJZeFhCT1BtRGxYRVEuanBlZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9vVzRxai1tTFN4T0dKTGZEbWJTRERhYmhwTlc4bmVLOC80bFZuTU04Wm5DekN5RWJnWEluSHpDdkNwclBHcXJKNi9IOXViVDBIOUlGQUNiYk9QeGVuRjdRLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9fUkJzYU1oRzBqR01NN182c2xveUVQc2RWLVpPVjNpdy81dHlPSDk2LTJSdU9VLXBfSUtCd1UwMER6NVhJOXJ0VC9BY29McjZ0RGhCQV8xc1Yzb2l0Q3JRLmpwZyIKICAgICAgXSwKICAgICAgImpvYlRpdGxlIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQiLAogICAgICAia25vd3NBYm91dCI6IFsKICAgICAgICAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8iLAogICAgICAgICLQnNGD0LbRgdC60L7QuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCW0LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JvQuNGH0L3Ri9C5INCx0YDQtdC90LQiLAogICAgICAgICLQoNC10L_QvtGA0YLQsNC20L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCf0YDQtdC00LzQtdGC0L3QsNGPINGB0YrRkdC80LrQsCDQtNC70Y8g0LzQsNGA0LrQtdGC0L_Qu9C10LnRgdC-0LIiLAogICAgICAgICLQmNC90YLQtdGA0YzQtdGA0L3QsNGPINC4INCw0YDRhdC40YLQtdC60YLRg9GA0L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCQ0LLRgtC-0LzQvtCx0LjQu9GM0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIKICAgICAgXSwKICAgICAgImF3YXJkIjogWwogICAgICAgICJQb3J0Zm9saW8gQXdhcmQgMjAyNCDigJQgMiDQvNC10YHRgtC-LCDRgdC10YDQuNGPINCg0LXQv9C-0YDRgtCw0LYiLAogICAgICAgICJUaGUgUGxhY2UgRWNvbm9teSBWb2wuMyBieSBIb3luZSAoQXVzdHJhbGlhKSIsCiAgICAgICAgIjUwMHB4IEF3YXJkcyIsCiAgICAgICAgIkFnb3JhIEF3YXJkcyIsCiAgICAgICAgIjM1YXdhcmRzIgogICAgICBdLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly8yMDI0LnBvcnRmb2xpb2F3YXJkLmNvbS8jc2VjdGlvbi0xOTAwNjE1NyIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIndvcmtMb2NhdGlvbiI6IHsKICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICB9CiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIjogewogICAgICAiQHR5cGUiOiAiUHJvZmVzc2lvbmFsU2VydmljZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiLAogICAgICAibmFtZSI6ICJBdmFuemF0byDigJQg0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C1INGE0L7RgtC-0YHQtdGB0YHQuNC4INCyINCa0LDQt9Cw0L3QuCDRgSAyMDE5INCz0L7QtNCwOiDRgdGC0YPQtNC40Y8g0Lgg0YPQu9C40YbQsCwg0LzRg9C20YHQutC-0Lkg0Lgg0LbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIsINGB0YrRkdC80LrQsCDQtNC70Y8g0LvQuNGH0L3QvtCz0L4g0LHRgNC10L3QtNCwLiAyNTArINC_0YDQvtC10LrRgtC-0LIsIDUg0LzQtdC20LTRg9C90LDRgNC-0LTQvdGL0YUg0L3QsNCz0YDQsNC0LiDQktGL0LXQt9C00Ysg0LIg0JzQvtGB0LrQstGDLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6ICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgImZvdW5kZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJmb3VuZGluZ0RhdGUiOiAiMjAxOS0wMS0wMSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgImFkZHJlc3MiOiB7CiAgICAgICAgIkB0eXBlIjogIlBvc3RhbEFkZHJlc3MiLAogICAgICAgICJhZGRyZXNzTG9jYWxpdHkiOiAi0JrQsNC30LDQvdGMIiwKICAgICAgICAiYWRkcmVzc1JlZ2lvbiI6ICLQoNC10YHQv9GD0LHQu9C40LrQsCDQotCw0YLQsNGA0YHRgtCw0L0iLAogICAgICAgICJhZGRyZXNzQ291bnRyeSI6ICJSVSIKICAgICAgfSwKICAgICAgImdlbyI6IHsKICAgICAgICAiQHR5cGUiOiAiR2VvQ29vcmRpbmF0ZXMiLAogICAgICAgICJsYXRpdHVkZSI6IDU1Ljc4ODcsCiAgICAgICAgImxvbmdpdHVkZSI6IDQ5LjEyMjEKICAgICAgfSwKICAgICAgImFyZWFTZXJ2ZWQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JzQvtGB0LrQstCwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInByaWNlUmFuZ2UiOiAiMTQ5MDAtNTQ5MDAiLAogICAgICAib3BlbmluZ0hvdXJzU3BlY2lmaWNhdGlvbiI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT3BlbmluZ0hvdXJzU3BlY2lmaWNhdGlvbiIsCiAgICAgICAgICAiZGF5T2ZXZWVrIjogWwogICAgICAgICAgICAiTW9uZGF5IiwKICAgICAgICAgICAgIlR1ZXNkYXkiLAogICAgICAgICAgICAiV2VkbmVzZGF5IiwKICAgICAgICAgICAgIlRodXJzZGF5IiwKICAgICAgICAgICAgIkZyaWRheSIsCiAgICAgICAgICAgICJTYXR1cmRheSIsCiAgICAgICAgICAgICJTdW5kYXkiCiAgICAgICAgICBdLAogICAgICAgICAgIm9wZW5zIjogIjEwOjAwIiwKICAgICAgICAgICJjbG9zZXMiOiAiMjA6MDAiCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIm1ha2VzT2ZmZXIiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICAgICAicHJpY2UiOiAiMTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0cmFpdC1waG90b3Nlc3Npb24iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1ICjQstGB0ZEg0LLQutC70Y7Rh9C10L3QvikiLAogICAgICAgICAgInByaWNlIjogIjU0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLRi9C10LfQtNC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcGhvdG9ncmFwaF9tb3Njb3ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCDigJQg0LTQvtC_0L7Qu9C90LXQvdC40LUg0Log0YTQvtGC0L7RgdC10YHRgdC40LgiLAogICAgICAgICAgInByaWNlIjogIjYwMDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4iCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAiY29udGFjdFBvaW50IjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDb250YWN0UG9pbnQiLAogICAgICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgICAgICJjb250YWN0VHlwZSI6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgICAgICJhcmVhU2VydmVkIjogIlJVIiwKICAgICAgICAgICJhdmFpbGFibGVMYW5ndWFnZSI6IFsKICAgICAgICAgICAgIlJ1c3NpYW4iLAogICAgICAgICAgICAiRW5nbGlzaCIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSI6IHsKICAgICAgIkB0eXBlIjogIldlYlNpdGUiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4g4oCUINCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4IiwKICAgICAgInB1Ymxpc2hlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImluTGFuZ3VhZ2UiOiAicnUtUlUiCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3luY0Nhbm9uKGdyYXBoKSB7CiAgICBpZiAoIWdyYXBoIHx8ICFncmFwaC5sZW5ndGgpIHJldHVybiBbXTsKICAgIHZhciBkb25lID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpZCA9IGdyYXBoW2ldICYmIGdyYXBoW2ldWydAaWQnXTsKICAgICAgaWYgKGlkICYmIEFWWl9DQU5PTltpZF0pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JhcGhbaV0pICE9PSBKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSkgewogICAgICAgICAgZG9uZS5wdXNoKFN0cmluZyhpZCkuc3BsaXQoJyMnKVsxXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2ldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdmFyIG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnppbi1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICB2YXIgTUFYVyA9IDEyNDA7IC8vINC_0YDQtdC00LXQuyDRiNC40YDQuNC90Ysg0LrQsNC00YDQsCwg0YHQvC4g0LjRgdGC0L7RgNC40Y4g0L_RgNC-0LXQutGC0LAKCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTC50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIGRpZ2l0cyhzKSB7IHJldHVybiBTdHJpbmcocyB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKTsgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLINCyINC60L7QvdGE0LjQsyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUpIHsKICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuaGVyby10aXRsZS1pbm5lcicpOwogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IHQob25lKHNjb3BlLCAnLmhlcm8tZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChpbm5lcnNbMF0pLAogICAgICAgIGxpbmUyOiBpbm5lcnNbMV0gPyB0KG9uZShpbm5lcnNbMV0sICdlbScpIHx8IGlubmVyc1sxXSkgOiAnJywKICAgICAgICBsaW5lMzogdChpbm5lcnNbMl0pLAogICAgICAgIHN1YjogdChvbmUoc2NvcGUsICcuaGVyby1zdWInKSksCiAgICAgICAgaGludDogb3duVGV4dChvbmUoc2NvcGUsICcuaGVyby1zY3JvbGwtaGludCcpKQogICAgICB9LAogICAgICBzZWN0aW9uTGFiZWw6IHQob25lKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgIHdvcmtzOiBhbGwoc2NvcGUsICcuZ2FsbGVyeS1pdGVtJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgdmFyIGltID0gb25lKGEsICdpbWcnKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaHJlZjogYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJywKICAgICAgICAgIGltZzogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiAnJywKICAgICAgICAgIGFsdDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgIC8qINC90LDRgdGC0L7Rj9GJ0LjQtSDRgNCw0LfQvNC10YDRiyDRhNCw0LnQu9CwOiDQvtC90Lgg0YPRhdC-0LTRj9GCINCyINGA0LDQt9C80LXRgtC60YMsINC4INCy0YDQsNGC0Ywg0LjQvCDQvdC10LvRjNC30Y8uCiAgICAgICAgICAgICDQn9GA0Lgg0LLRi9Cx0L7RgNC1INC90L7QstC-0LPQviDQutCw0LTRgNCwINC_0LDQvdC10LvRjCDQuNC30LzQtdGA0Y_QtdGCINC10LPQviDRgdCw0LzQsCwg0YHQvC4g0L3QuNC20LUuICovCiAgICAgICAgICB3OiBpbSA_IChpbS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJykgfHwgJycpIDogJycsCiAgICAgICAgICBoOiBpbSA_IChpbS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpIHx8ICcnKSA6ICcnLAogICAgICAgICAgdGl0bGU6IHQob25lKGEsICcub3ZlcmxheS10ZXh0IGgzJykpLAogICAgICAgICAgY2FwdGlvbjogdChvbmUoYSwgJy5vdmVybGF5LXRleHQgc3BhbicpKQogICAgICAgIH07CiAgICAgIH0pLAogICAgICBhZHY6IHsKICAgICAgICBoMjogdChvbmUoc2NvcGUsICcuYWR2YW50YWdlcy1oZWFkZXIgaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzY29wZSwgJy5hZHYtaXRlbScpLm1hcChmdW5jdGlvbiAoZCkgewogICAgICAgICAgcmV0dXJuIHsgdGl0bGU6IHQob25lKGQsICdoMycpKSwgdGV4dDogdChvbmUoZCwgJ3AnKSkgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBjbGllbnRzOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLmNsaWVudHMtaGVhZGVyIC5sYWJlbCcpKSwKICAgICAgICBoMjogdChvbmUoc2NvcGUsICcuY2xpZW50cy1oZWFkZXIgaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzY29wZSwgJy5jbGllbnQtaXRlbScpLm1hcChmdW5jdGlvbiAoYykgewogICAgICAgICAgcmV0dXJuIHsgbmFtZTogdChvbmUoYywgJy5jbGllbnQtbmFtZScpKSwgdHlwZTogdChvbmUoYywgJy5jbGllbnQtdHlwZScpKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGN0YTogewogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5jdGEgaDInKSksCiAgICAgICAgYnV0dG9uczogYWxsKHNjb3BlLCAnLmJ0bi1yb3cgYScpLm1hcChmdW5jdGlvbiAoYikgewogICAgICAgICAgcmV0dXJuIHsgdGV4dDogdChiKSwgaHJlZjogYi5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pLAogICAgICAgIHNvY2lhbHM6IGFsbChzY29wZSwgJy5jdGEtc29jaWFscyBhJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICByZXR1cm4geyBsYWJlbDogdChhKSwgaHJlZjogYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIHNlbzogeyBwYWdlTmFtZTogJycsIHBhZ2VEZXNjcmlwdGlvbjogJycsIG5hbWU6ICcnLCBkZXNjcmlwdGlvbjogJycsIHByaWNlOiAnJywgcHJpY2VWYWxpZFVudGlsOiAnJywgY2F0YWxvZzogW10gfQogICAgfTsKICB9CgogIC8qINGA0LDQt9C80LXRgtC60LA6INC40LzRjywg0L7Qv9C40YHQsNC90LjQtSwg0YbQtdC90LAg0Lgg0LrQsNGC0LDQu9C-0LMg0YPRgdC70YPQsyDQttC40LLRg9GCINGC0L7Qu9GM0LrQviDQsiBsZCtqc29uICovCiAgZnVuY3Rpb24gcmVhZExkKGRvYywgY2ZnKSB7CiAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJylbMF07CiAgICBpZiAoIXMpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgdmFyIHBhZ2UgPSAob1snQGdyYXBoJ10gfHwgW10pLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnOyB9KVswXTsKICAgICAgaWYgKHBhZ2UpIHsgY2ZnLnNlby5wYWdlTmFtZSA9IHBhZ2UubmFtZSB8fCAnJzsgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24gPSBwYWdlLmRlc2NyaXB0aW9uIHx8ICcnOyB9CiAgICAgIHZhciBzcnYgPSAob1snQGdyYXBoJ10gfHwgW10pLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ1NlcnZpY2UnOyB9KVswXTsKICAgICAgaWYgKCFzcnYpIHJldHVybjsKICAgICAgY2ZnLnNlby5uYW1lID0gc3J2Lm5hbWUgfHwgJyc7CiAgICAgIGNmZy5zZW8uZGVzY3JpcHRpb24gPSBzcnYuZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgIHZhciBvZmYgPSAoc3J2Lm9mZmVycyB8fCBbXSlbMF0gfHwge307CiAgICAgIGNmZy5zZW8ucHJpY2UgPSBvZmYucHJpY2UgfHwgJyc7CiAgICAgIGNmZy5zZW8ucHJpY2VWYWxpZFVudGlsID0gb2ZmLnByaWNlVmFsaWRVbnRpbCB8fCAnJzsKICAgICAgY2ZnLnNlby5jYXRhbG9nID0gKCgoc3J2Lmhhc09mZmVyQ2F0YWxvZyB8fCB7fSkuaXRlbUxpc3RFbGVtZW50KSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgIHJldHVybiAoKGl0Lml0ZW1PZmZlcmVkIHx8IHt9KS5uYW1lKSB8fCAnJzsKICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7IC8qINC_0L7Qu9GPINC-0YHRgtCw0L3Rg9GC0YHRjyDQv9GD0YHRgtGL0LzQuCwg0YHQsdC-0YDQutCwINC-0LEg0Y3RgtC-0Lwg0YHQutCw0LbQtdGCICovIH0KICB9CgogIC8qIC0tLS0tLS0tLS0g0LLRkdGA0YHRgtC60LAg0L_QsNC90LXQu9C4IC0tLS0tLS0tLS0KICAgICDQotC10LzQsCB3Zm9saW8g0LrRgNCw0YHQuNGCINC_0L7Qu9GPINCyINCx0LXQu9GL0Lkg0YLQtdC60YHRgiDQvdCwINCx0LXQu9C-0Lwg0YTQvtC90LUsINC_0L7RjdGC0L7QvNGDINGG0LLQtdGCLAogICAgINGI0YDQuNGE0YIg0LggLXdlYmtpdC10ZXh0LWZpbGwtY29sb3Ig0LfQsNC00LDRjtGC0YHRjyDRj9Cy0L3QviDQuCDRgSDQv9GA0LjQvtGA0LjRgtC10YLQvtC8LAogICAgINCwINCy0YHQtSDRh9Cw0YHRgtC90YvQtSDQv9GA0LDQstC40LvQsCDQvdCw0YfQuNC90LDRjtGC0YHRjyDRgSAjYXZ6aW4tcm9vdC4gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6aW4tcm9vdCwjYXZ6aW4tcm9vdCAqe2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmICFpbXBvcnRhbnQ7JywKICAgICdsZXR0ZXItc3BhY2luZzpub3JtYWwgIWltcG9ydGFudDt0ZXh0LXRyYW5zZm9ybTpub25lICFpbXBvcnRhbnQ7Ym94LXNpemluZzpib3JkZXItYm94fScsCiAgICAnI2F2emluLXJvb3QgaW5wdXQsI2F2emluLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnppbi1yb290IGJ1dHRvbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4tYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6aW4tcm9vdHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MjE0NzQ4MzY0NztiYWNrZ3JvdW5kOnJnYmEoMjAsMjAsMjIsLjU1KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjUgLWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjI0cHh9JywKICAgICcjYXZ6aW4td2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDk4MHB4LDEwMCUpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjM1KTtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6aW4taGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6aW4taGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2emluLWJvZHl7ZmxleDoxO292ZXJmbG93OmF1dG87cGFkZGluZzo4cHggMjBweCAyNHB4fScsCiAgICAnI2F2emluLWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWJ7Zm9udDppbmhlcml0O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcn0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCOCAgIjtjb2xvcjojODY4NjhifScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1me21hcmdpbi1ib3R0b206MTJweH0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWYgaW5wdXQsI2F2emluLXJvb3QgLmF2emluLWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4tZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2emluLXJvb3QgLmF2emluLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnppbi13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4taW1ne2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWltZz5pbWd7d2lkdGg6NzBweDtoZWlnaHQ6ODhweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6I2VjZWNlYztmbGV4Om5vbmV9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4taW1nPmltZy5iYWR7b3V0bGluZToycHggc29saWQgI2QzM30nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1pbWcgLmd7ZmxleDoxfScsCiAgICAnI2F2emluLXJvb3QgLmF2emluLWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnppbi1yb290IC5hdnppbi1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTQwcHgsMWZyKSk7Z2FwOjEwcHh9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4tZ3JpZCBmaWd1cmV7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6aW4tcm9vdCAuYXZ6aW4tZ3JpZCBpbWd7d2lkdGg6MTAwJTtoZWlnaHQ6MTIwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrfScsCiAgICAnI2F2emluLW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnppbi1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINC70LjRiNC90LjQuSDQv9C10YDQtdC90L7RgTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIg0L_QtdGA0LLRi9C5INC_0L7RgdC70LUgPHRleHRhcmVhPiAqLwogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnppbi1mIj48bGFiZWw-JyArIGxhYmVsICsgJzwvbGFiZWw-JyArIHRhZyArICc8L2Rpdj4nOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2emluLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emluLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgdmFyIGNmZyA9IG51bGw7CgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRhNC-0YDQvNCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2emluLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnppbi1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC40L3RgtC10YDRjNC10YDQvdC-0Lkg0YHRitGR0LzQutC4PC9oMj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emluLWIiIGlkPSJhdnppbi1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnppbi1ib2R5Ij4nOwoKICAgIC8qINCo0JDQn9Ca0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnppbi1zZWMiIG9wZW4-PHN1bW1hcnk-0KjQsNC_0LrQsCDRgdGC0YDQsNC90LjRhtGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emluLWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnppbi1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6IOKAlCDRgdGC0YDQvtC60LAgMScsICdoZXJvLmxpbmUxJywgY2ZnLmhlcm8ubGluZTEpICsKICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAyICjQutGD0YDRgdC40LIsINGB0LXRgNGL0LwpJywgJ2hlcm8ubGluZTInLCBjZmcuaGVyby5saW5lMikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log4oCUINGB0YLRgNC-0LrQsCAzJywgJ2hlcm8ubGluZTMnLCBjZmcuaGVyby5saW5lMykgKwogICAgICBmaWVsZCgn0JLRgdGC0YPQv9C40YLQtdC70YzQvdGL0Lkg0YLQtdC60YHRgicsICdoZXJvLnN1YicsIGNmZy5oZXJvLnN1YiwgJ2FyZWEnKSArCiAgICAgIGZpZWxkKCfQn9C-0LTRgdC60LDQt9C60LAg0YMg0L_QvtC70L7RgdGLINC_0YDQvtC60YDRg9GC0LrQuCcsICdoZXJvLmhpbnQnLCBjZmcuaGVyby5oaW50KSArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQvdCw0LQg0LPQsNC70LXRgNC10LXQuScsICdzZWN0aW9uTGFiZWwnLCBjZmcuc2VjdGlvbkxhYmVsKSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQoNCQ0JHQntCi0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnppbi1zZWMiPjxzdW1tYXJ5PtCg0LDQsdC-0YLRiyDQsiDQs9Cw0LvQtdGA0LXQtSAoJyArIGNmZy53b3Jrcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnppbi1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6aW4taGludCI-0KDQsNCx0L7RgiDRgNC-0LLQvdC-INC-0LTQuNC90L3QsNC00YbQsNGC0Yw6INC40YUg0YDQsNC30LzQtdGAINC4INC80LXRgdGC0L4g0LIg0YHQtdGC0LrQtSDQt9Cw0LTQsNC90YsgJyArCiAgICAgICfQutC70LDRgdGB0LDQvNC4IGcx4oCmZzExLCDQtNC-0LHQsNCy0LvQtdC90LjQtSDQtNCy0LXQvdCw0LTRhtCw0YLQvtC5INGC0YDQtdCx0YPQtdGCINC_0YDQsNCy0LrQuCBDU1MuINCf0L7RgNGP0LTQvtC6INCyINGE0L7RgNC80LUg4oCUICcgKwogICAgICAn0L_QvtGA0Y_QtNC-0Log0L3QsCDRgdGC0YDQsNC90LjRhtC1LiDQmtCw0YDRgtC40L3QutGDINC_0LXRgNCy0L7QuSDRgNCw0LHQvtGC0Ysg0L_QsNC90LXQu9GMINC30LDQvtC00L3QviDRgdGC0LDQstC40YIg0LIg0YDQsNC30LzQtdGC0LrRgyAnICsKICAgICAgJ9C60LDQuiDQs9C70LDQstC90L7QtSDQuNC30L7QsdGA0LDQttC10L3QuNC1INGB0YLRgNCw0L3QuNGG0YsuPC9wPic7CiAgICBjZmcud29ya3MuZm9yRWFjaChmdW5jdGlvbiAodywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnppbi1jYXJkIj48aDQ-0KDQsNCx0L7RgtCwICcgKyAoaSArIDEpICsgKGkgPT09IDAgPyAnIOKAlCDQutGA0YPQv9C90LDRjywg0L7QvdCwINC20LUg0LIg0YDQsNC30LzQtdGC0LrQtScgOiAnJykgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6aW4tcm93Ij4nICsgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMJywgJ3dvcmtzLicgKyBpICsgJy50aXRsZScsIHcudGl0bGUpICsKICAgICAgICBmaWVsZCgn0KPRgtC-0YfQvdC10L3QuNC1INC_0L7QtCDQv9C-0LTQv9C40YHRjNGOJywgJ3dvcmtzLicgKyBpICsgJy5jYXB0aW9uJywgdy5jYXB0aW9uKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0KHRgdGL0LvQutCwINC90LAg0LDQu9GM0LHQvtC8JywgJ3dvcmtzLicgKyBpICsgJy5ocmVmJywgdy5ocmVmKSArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emluLWltZyI-PGltZyBkYXRhLXByZXY9IndvcmtzLicgKyBpICsgJy5pbWciIHNyYz0iJyArIGVzYyh3LmltZykgKyAnIiBhbHQ9IiI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPicgKyBmaWVsZCgn0JDQtNGA0LXRgSDRhNC-0YLQvtCz0YDQsNGE0LjQuCcsICd3b3Jrcy4nICsgaSArICcuaW1nJywgdy5pbWcpICsKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6aW4tYiIgZGF0YS1jaG9vc2U9IndvcmtzLicgKyBpICsgJy5pbWciIGRhdGEtZnJvbT0iJyArIGVzYyh3LmhyZWYpICsgJyIgJyArCiAgICAgICAgJ3N0eWxlPSJwYWRkaW5nOjVweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206MTJweCI-0JLRi9Cx0YDQsNGC0Ywg0YHQviDRgdGC0YDQsNC90LjRhtGLINCw0LvRjNCx0L7QvNCwPC9idXR0b24-JyArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YTQvtGC0L7Qs9GA0LDRhNC40LggKGFsdCknLCAnd29ya3MuJyArIGkgKyAnLmFsdCcsIHcuYWx0KSArCiAgICAgICAgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGRhdGEtcD0id29ya3MuJyArIGkgKyAnLnciIHZhbHVlPSInICsgZXNjKHcudykgKyAnIj4nICsKICAgICAgICAnPGlucHV0IHR5cGU9ImhpZGRlbiIgZGF0YS1wPSJ3b3Jrcy4nICsgaSArICcuaCIgdmFsdWU9IicgKyBlc2Mody5oKSArICciPicgKwogICAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQn9Cg0JXQmNCc0KPQqdCV0KHQotCS0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnppbi1zZWMiPjxzdW1tYXJ5PtCf0YDQtdC40LzRg9GJ0LXRgdGC0LLQsCAoJyArIGNmZy5hZHYuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6aW4taW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emluLWhpbnQiPtCm0LXQvdCwLCDRgdGA0L7QuiDQuCDRh9C40YHQu9C-INGE0L7RgtC-0LPRgNCw0YTQuNC5IOKAlCDRjdGC0L4g0L7QsdC10YnQsNC90LjQtSDQutC70LjQtdC90YLRgy4gJyArCiAgICAgICfQodCy0LXRgNGP0LnRgtC10YHRjCDRgdC-INGB0YLRgNCw0L3QuNGG0LXQuSDRhtC10L06INGA0LDRgdGF0L7QtNC40YLRjNGB0Y8g0LjQvCDQvdC10LvRjNC30Y8uINCm0LjRhNGA0YMg0YbQtdC90Ysg0L_QsNC90LXQu9GMICcgKwogICAgICAn0L_QtdGA0LXQvdC-0YHQuNGCINC-0YLRgdGO0LTQsCDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyINGB0LDQvNCwLjwvcD4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCcsICdhZHYuaDInLCBjZmcuYWR2LmgyKTsKICAgIGNmZy5hZHYuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnppbi1jYXJkIj48aDQ-0J_Rg9C90LrRgiAnICsgKGkgKyAxKSArIChpID09PSAwID8gJyDigJQg0L7RgtGB0Y7QtNCwINCx0LXRgNGR0YLRgdGPINGG0LXQvdCwINC00LvRjyDRgNCw0LfQvNC10YLQutC4JyA6ICcnKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnYWR2Lml0ZW1zLicgKyBpICsgJy50aXRsZScsIGEudGl0bGUpICsKICAgICAgICBmaWVsZCgn0J_QvtGP0YHQvdC10L3QuNC1JywgJ2Fkdi5pdGVtcy4nICsgaSArICcudGV4dCcsIGEudGV4dCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQmtCb0JjQldCd0KLQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emluLXNlYyI-PHN1bW1hcnk-0JrQu9C40LXQvdGC0YsgKCcgKyBjZmcuY2xpZW50cy5pdGVtcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnppbi1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnppbi1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnY2xpZW50cy5sYWJlbCcsIGNmZy5jbGllbnRzLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LonLCAnY2xpZW50cy5oMicsIGNmZy5jbGllbnRzLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmNsaWVudHMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnppbi1yb3ciPicgKyBmaWVsZCgn0JrQu9C40LXQvdGCICcgKyAoaSArIDEpLCAnY2xpZW50cy5pdGVtcy4nICsgaSArICcubmFtZScsIGMubmFtZSkgKwogICAgICAgIGZpZWxkKCfQp9C10Lwg0LfQsNC90LjQvNCw0LXRgtGB0Y8nLCAnY2xpZW50cy5pdGVtcy4nICsgaSArICcudHlwZScsIGMudHlwZSkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0J_QoNCY0JfQq9CSICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6aW4tc2VjIj48c3VtbWFyeT7Qn9GA0LjQt9GL0LIg0Lgg0YHRgdGL0LvQutC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emluLWluIj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7KScsICdjdGEuaDInLCBjZmcuY3RhLmgyLCAnYXJlYScpOwogICAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6aW4tcm93Ij4nICsgZmllbGQoJ9Ca0L3QvtC_0LrQsCAnICsgKGkgKyAxKSArICcg4oCUINGC0LXQutGB0YInLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLnRleHQnLCBiLnRleHQpICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJyDigJQg0LDQtNGA0LXRgScsICdjdGEuYnV0dG9ucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgY2ZnLmN0YS5zb2NpYWxzLmZvckVhY2goZnVuY3Rpb24gKHMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6aW4tcm93Ij4nICsgZmllbGQoJ9Ch0L7RhtGB0LXRgtGMICcgKyAoaSArIDEpICsgJyDigJQg0L_QvtC00L_QuNGB0YwnLCAnY3RhLnNvY2lhbHMuJyArIGkgKyAnLmxhYmVsJywgcy5sYWJlbCkgKwogICAgICAgIGZpZWxkKCfQodC-0YbRgdC10YLRjCAnICsgKGkgKyAxKSArICcg4oCUINCw0LTRgNC10YEnLCAnY3RhLnNvY2lhbHMuJyArIGkgKyAnLmhyZWYnLCBzLmhyZWYpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCg0JDQl9Cc0JXQotCa0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnppbi1zZWMiPjxzdW1tYXJ5PtCg0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LI8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6aW4taW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emluLWhpbnQiPtCt0YLQviDQvdC10LLQuNC00LjQvNCw0Y8g0YfQsNGB0YLRjCDRgdGC0YDQsNC90LjRhtGLIOKAlCDQtdGRINGH0LjRgtCw0Y7RgiDQv9C-0LjRgdC60L7QstC40LrQuCAnICsKICAgICAgJ9C4INCY0Jgt0L_QvtC80L7RidC90LjQutC4LiDQndC1INC_0LjRiNC40YLQtSDQt9C00LXRgdGMINGC0L7Qs9C-LCDRh9C10LPQviDQvdC10YIg0L3QsCDRgdCw0LzQvtC5INGB0YLRgNCw0L3QuNGG0LUuPC9wPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlTmFtZScsIGNmZy5zZW8ucGFnZU5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsICdzZW8ucGFnZURlc2NyaXB0aW9uJywgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCAnc2VvLm5hbWUnLCBjZmcuc2VvLm5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YPRgdC70YPQs9C4JywgJ3Nlby5kZXNjcmlwdGlvbicsIGNmZy5zZW8uZGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6aW4tcm93Ij4nICsKICAgICAgZmllbGQoJ9Cm0LXQvdCwLCDRgtC-0LvRjNC60L4g0YbQuNGE0YDRiyAo0L_QvtC00YHRgtCw0LLQuNGC0YHRjyDQuNC3INC_0YDQtdC40LzRg9GJ0LXRgdGC0LIpJywgJ3Nlby5wcmljZScsIGNmZy5zZW8ucHJpY2UpICsKICAgICAgZmllbGQoJ9Cm0LXQvdCwINC00LXQudGB0YLQstGD0LXRgiDQtNC-ICjQk9CT0JPQky3QnNCcLdCU0JQpJywgJ3Nlby5wcmljZVZhbGlkVW50aWwnLCBjZmcuc2VvLnByaWNlVmFsaWRVbnRpbCkgKyAnPC9kaXY-JzsKICAgIGNmZy5zZW8uY2F0YWxvZy5mb3JFYWNoKGZ1bmN0aW9uIChuLCBpKSB7CiAgICAgIGggKz0gZmllbGQoJ9Cj0YHQu9GD0LPQsCDQsiDQutCw0YLQsNC70L7Qs9C1ICcgKyAoaSArIDEpLCAnc2VvLmNhdGFsb2cuJyArIGksIG4pOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8L2Rpdj48ZGl2IGlkPSJhdnppbi1mb290Ij4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emluLWIgcCIgaWQ9ImF2emluLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6aW4tYiIgaWQ9ImF2emluLXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2emluLW1zZyI-PC9zcGFuPjwvZGl2PicgKwogICAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnppbi1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgICByb290LmlubmVySFRNTCA9IGg7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnppbi1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgIGlmIChwcmV2KSB7IHByZXYuY2xhc3NMaXN0LnJlbW92ZSgnYmFkJyk7IHByZXYuc3JjID0gZS50YXJnZXQudmFsdWU7IG1lYXN1cmUocCwgZS50YXJnZXQudmFsdWUpOyB9CiAgICB9KTsKCiAgICAvKiDQoNCw0LfQvNC10YDRiyDQvdC-0LLQvtCz0L4g0LrQsNC00YDQsCDQv9Cw0L3QtdC70Ywg0LjQt9C80LXRgNGP0LXRgiDRgdCw0LzQsCDQuCDQvdC1INC00LDRkdGCINC40Lwg0YPRgdGC0LDRgNC10YLRjDoKICAgICAgINCyINGA0LDQt9C80LXRgtC60LUg0L7QvdC4INC-0LHRj9C30LDQvdGLINGB0L7QstC_0LDQtNCw0YLRjCDRgSDQvdCw0YHRgtC-0Y_RidC40Lwg0YTQsNC50LvQvtC8LiAqLwogICAgZnVuY3Rpb24gbWVhc3VyZShwYXRoLCB1cmwpIHsKICAgICAgaWYgKCF1cmwpIHJldHVybjsKICAgICAgdmFyIGJhc2UgPSBwYXRoLnJlcGxhY2UoL1wuaW1nJC8sICcnKTsKICAgICAgdmFyIGltID0gbmV3IEltYWdlKCk7CiAgICAgIGltLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZncgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy53Il0nKTsKICAgICAgICB2YXIgZmggPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy5oIl0nKTsKICAgICAgICBpZiAoZncpIGZ3LnZhbHVlID0gaW0ubmF0dXJhbFdpZHRoOwogICAgICAgIGlmIChmaCkgZmgudmFsdWUgPSBpbS5uYXR1cmFsSGVpZ2h0OwogICAgICB9OwogICAgICBpbS5zcmMgPSB1cmw7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINC60LDQtNGA0LAg0YHQviDRgdGC0YDQsNC90LjRhtGLINCw0LvRjNCx0L7QvNCwIC0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc2hvdENhY2hlID0ge307CgogICAgZnVuY3Rpb24gYWJzKHUpIHsKICAgICAgaWYgKCF1KSByZXR1cm4gJyc7CiAgICAgIGlmICh1LmluZGV4T2YoJy8vJykgPT09IDApIHJldHVybiAnaHR0cHM6JyArIHU7CiAgICAgIGlmICh1LmluZGV4T2YoJy8nKSA9PT0gMCkgcmV0dXJuIGxvY2F0aW9uLm9yaWdpbiArIHU7CiAgICAgIHJldHVybiB1OwogICAgfQoKICAgIGZ1bmN0aW9uIGZyb21TcmNzZXQoc2V0LCBzcmMpIHsKICAgICAgaWYgKCFzZXQpIHsgdmFyIHUgPSBhYnMoc3JjKTsgcmV0dXJuIHsgZnVsbDogdSwgc21hbGw6IHUgfTsgfQogICAgICB2YXIgbGlzdCA9IHNldC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoeCkgewogICAgICAgIHZhciBwID0geC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHJldHVybiB7IHU6IGFicyhwWzBdKSwgdzogcGFyc2VJbnQocFsxXSwgMTApIHx8IDAgfTsKICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLnU7IH0pOwogICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7IHZhciB2ID0gYWJzKHNyYyk7IHJldHVybiB7IGZ1bGw6IHYsIHNtYWxsOiB2IH07IH0KICAgICAgdmFyIGJpZyA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLncgLSBhLnc7IH0pOwogICAgICB2YXIgc21hbGwgPSBsaXN0LnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS53IC0gYi53OyB9KTsKICAgICAgcmV0dXJuIHsKICAgICAgICBmdWxsOiAoYmlnLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53IDw9IE1BWFc7IH0pWzBdIHx8IGJpZ1tiaWcubGVuZ3RoIC0gMV0pLnUsCiAgICAgICAgc21hbGw6IChzbWFsbC5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudyA-PSAyODA7IH0pWzBdIHx8IHNtYWxsWzBdKS51CiAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gc2hvdHNGcm9tKHVybCkgewogICAgICBpZiAoc2hvdENhY2hlW3VybF0pIHJldHVybiBQcm9taXNlLnJlc29sdmUoc2hvdENhY2hlW3VybF0pOwogICAgICByZXR1cm4gZmV0Y2godXJsICsgKHVybC5pbmRleE9mKCc_JykgPiAtMSA_ICcmJyA6ICc_JykgKyAndD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgICAgdmFyIHNlZW4gPSB7fSwgb3V0ID0gW107CiAgICAgICAgICBhbGwoZG9jLCAnaW1nJykuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHsKICAgICAgICAgICAgdmFyIHNldCA9IGltLmdldEF0dHJpYnV0ZSgnc3Jjc2V0JykgfHwgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyY3NldCcpIHx8ICcnOwogICAgICAgICAgICB2YXIgcyA9IGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpIHx8ICcnOwogICAgICAgICAgICBpZiAoc2V0LmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwICYmIHMuaW5kZXhPZignaS53Zm9saW8ucnUnKSA8IDApIHJldHVybjsKICAgICAgICAgICAgdmFyIHBhaXIgPSBmcm9tU3Jjc2V0KHNldCwgcyk7CiAgICAgICAgICAgIGlmICghcGFpci5mdWxsIHx8IHNlZW5bcGFpci5mdWxsXSkgcmV0dXJuOwogICAgICAgICAgICBzZWVuW3BhaXIuZnVsbF0gPSAxOwogICAgICAgICAgICBvdXQucHVzaChwYWlyKTsKICAgICAgICAgIH0pOwogICAgICAgICAgc2hvdENhY2hlW3VybF0gPSBvdXQ7CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0pOwogICAgfQoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2hvb3NlJyk7CiAgICAgIGlmICghcCkgcmV0dXJuOwogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAvKiDQsNC00YDQtdGBINCx0LXRgNGR0Lwg0LjQtyDQv9C-0LvRjyDRgdGB0YvQu9C60LgsINCwINC90LUg0LjQtyDQuNGB0YXQvtC00L3QvtCz0L4g0LrQvtC90YTQuNCz0LA6CiAgICAgICAgINC10YHQu9C4INGA0LDQsdC-0YLRgyDRgtC-0LvRjNC60L4g0YfRgtC-INC_0LXRgNC10L3QsNC_0YDQsNCy0LjQu9C4LCDQutCw0LTRgNGLINC90YPQttC90Ysg0YEg0L3QvtCy0L7QuSDRgdGC0YDQsNC90LjRhtGLICovCiAgICAgIHZhciBpZHggPSBwLnNwbGl0KCcuJylbMV07CiAgICAgIHZhciBocmVmSW5wdXQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtcD0id29ya3MuJyArIGlkeCArICcuaHJlZiJdJyk7CiAgICAgIHZhciB1cmwgPSAoaHJlZklucHV0ICYmIGhyZWZJbnB1dC52YWx1ZS50cmltKCkpIHx8IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1mcm9tJyk7CiAgICAgIGlmICghdXJsKSB7IG1zZygn0KMg0YDQsNCx0L7RgtGLINC90LUg0YPQutCw0LfQsNC90LAg0YHRgdGL0LvQutCwIOKAlCDQstGL0LHQuNGA0LDRgtGMINC90LUg0LjQtyDRh9C10LPQvi4nKTsgcmV0dXJuOyB9CgogICAgICB2YXIgcGFuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwYW5lLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246Zml4ZWQ7aW5zZXQ6OCU7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTJweDt6LWluZGV4OjIxNDc0ODM2NDc7JyArCiAgICAgICAgJ3BhZGRpbmc6MTZweDtvdmVyZmxvdzphdXRvO2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuNCknOwogICAgICBwYW5lLmlubmVySFRNTCA9ICc8cCBzdHlsZT0ibWFyZ2luOjAgMCAxMHB4Ij7Ql9Cw0LPRgNGD0LbQsNGOINGB0L3QuNC80LrQuCDRgdC-INGB0YLRgNCw0L3QuNGG0YsgJyArIGVzYyh1cmwpICsgJ-KApjwvcD4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6aW4tZ3JpZCIgc3R5bGU9ImRpc3BsYXk6bm9uZSI-PC9kaXY-JzsKICAgICAgdmFyIGNsb3NlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgIGNsb3NlQnRuLmNsYXNzTmFtZSA9ICdhdnppbi1iJzsKICAgICAgY2xvc2VCdG4udGV4dENvbnRlbnQgPSAn0J7RgtC80LXQvdCwJzsKICAgICAgY2xvc2VCdG4uc3R5bGUubWFyZ2luVG9wID0gJzEycHgnOwogICAgICBjbG9zZUJ0bi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBwYW5lLnJlbW92ZSgpOyB9OwogICAgICBwYW5lLmFwcGVuZENoaWxkKGNsb3NlQnRuKTsKICAgICAgcm9vdC5hcHBlbmRDaGlsZChwYW5lKTsKCiAgICAgIHNob3RzRnJvbSh1cmwpLnRoZW4oZnVuY3Rpb24gKHNob3RzKSB7CiAgICAgICAgdmFyIGhlYWQgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJ3AnKTsKICAgICAgICB2YXIgZ3JpZCA9IHBhbmUucXVlcnlTZWxlY3RvcignLmF2emluLWdyaWQnKTsKICAgICAgICBpZiAoIXNob3RzLmxlbmd0aCkgeyBoZWFkLnRleHRDb250ZW50ID0gJ9Cd0LAg0YHRgtGA0LDQvdC40YbQtSAnICsgdXJsICsgJyDRgdC90LjQvNC60L7QsiDQvdC1INC90LDRiNC70L7RgdGMLiDQktGB0YLQsNCy0YzRgtC1INCw0LTRgNC10YEg0LLRgNGD0YfQvdGD0Y4uJzsgcmV0dXJuOyB9CiAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQktGL0LHQtdGA0LjRgtC1INGB0L3QuNC80L7QuiAoJyArIHNob3RzLmxlbmd0aCArICcpJzsKICAgICAgICBncmlkLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWd1cmUnKTsKICAgICAgICAgIHZhciBpbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgICAgICAgaW0uc3JjID0gaXQuc21hbGw7CiAgICAgICAgICBpbS5sb2FkaW5nID0gJ2xhenknOwogICAgICAgICAgZi5hcHBlbmRDaGlsZChpbSk7CiAgICAgICAgICBmLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBpbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtcD0iJyArIHAgKyAnIl0nKTsKICAgICAgICAgICAgaW5wLnZhbHVlID0gaXQuZnVsbDsKICAgICAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICAgIGlmIChwcmV2KSB7IHByZXYuY2xhc3NMaXN0LnJlbW92ZSgnYmFkJyk7IHByZXYuc3JjID0gaXQuZnVsbDsgfQogICAgICAgICAgICBtZWFzdXJlKHAsIGl0LmZ1bGwpOwogICAgICAgICAgICBwYW5lLnJlbW92ZSgpOwogICAgICAgICAgfTsKICAgICAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoZik7CiAgICAgICAgfSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICBwYW5lLnF1ZXJ5U2VsZWN0b3IoJ3AnKS50ZXh0Q29udGVudCA9ICfQodGC0YDQsNC90LjRhtCwICcgKyB1cmwgKyAnINC90LUg0L7RgtC60YDRi9C70LDRgdGMOiAnICsgZXJyLm1lc3NhZ2UgKwogICAgICAgICAgJy4g0JLRgdGC0LDQstGM0YLQtSDQsNC00YDQtdGBINGB0L3QuNC80LrQsCDQstGA0YPRh9C90YPRji4nOwogICAgICB9KTsKICAgIH0pOwoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAg0LfQvdCw0YfQtdC90LjQuSDQuNC3INGE0L7RgNC80YsgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQogICAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgICAgdmFyIGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICBzZXRQYXRoKGQsIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyksIGVsLnZhbHVlKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMINCyINGA0LDQt9C80LXRgtC60YMgLS0tLS0tLS0tLQogICAgICAg0J_QtdGA0LXQv9C40YHRi9Cy0LDQtdC8INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0YLQtdC60YHRgiDRjdC70LXQvNC10L3RgtCwLCDQvdC1INGC0YDQvtCz0LDRjyDQstC70L7QttC10L3QvdGL0LUKICAgICAgINC30L3QsNGH0LrQuCDQuCDQvdC1INGC0LXRgNGP0Y8g0L_RgNC-0LHQtdC70L7QsiDQstC-0LrRgNGD0LMg0L3QuNGFOiDQvtGI0LjQsdC60LAsINGB0YLQvtC40LLRiNCw0Y8KICAgICAgINGC0YDRkdGFINC_0YDQsNCy0L7QuiDQvdCwINC00YDRg9Cz0LjRhSDRgdGC0YDQsNC90LjRhtCw0YUuICovCiAgICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICAgIHZhciB0ZXh0cyA9IFtdLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB0ZXh0cy5wdXNoKGVsLmNoaWxkTm9kZXNbaV0pOwogICAgICB9CiAgICAgIGlmICghdGV4dHMubGVuZ3RoKSB7IGVsLmFwcGVuZENoaWxkKGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodikpOyByZXR1cm47IH0KICAgICAgdmFyIG1haW4gPSBudWxsOwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsgbWFpbiA9IHRleHRzW2ldOyBicmVhazsgfQogICAgICB9CiAgICAgIGlmICghbWFpbikgbWFpbiA9IHRleHRzWzBdOwogICAgICB2YXIgcmF3ID0gbWFpbi5ub2RlVmFsdWU7CiAgICAgIHZhciBwcmUgPSAocmF3Lm1hdGNoKC9eXHMqLykgfHwgWycnXSlbMF07CiAgICAgIHZhciBwb3N0ID0gKHJhdy5tYXRjaCgvXHMqJC8pIHx8IFsnJ10pWzBdOwogICAgICBpZiAocmF3LnRyaW0oKSA9PT0gJycpIHsgcHJlID0gJyc7IHBvc3QgPSAnJzsgfQogICAgICBtYWluLm5vZGVWYWx1ZSA9IHByZSArIHYgKyBwb3N0OwogICAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGV4dHNbaV0gIT09IG1haW4gJiYgdGV4dHNbaV0ubm9kZVZhbHVlLnRyaW0oKSAhPT0gJycpIHsKICAgICAgICAgIHRleHRzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dHNbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuaGVyby10aXRsZS1pbm5lcicpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5oZXJvLWV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgICBpZiAoaW5uZXJzWzBdKSBzZXRUZXh0KGlubmVyc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgICAgaWYgKGlubmVyc1sxXSkgc2V0VGV4dChvbmUoaW5uZXJzWzFdLCAnZW0nKSB8fCBpbm5lcnNbMV0sIGQuaGVyby5saW5lMik7CiAgICAgIGlmIChpbm5lcnNbMl0pIHNldFRleHQoaW5uZXJzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5oZXJvLXN1YicpLCBkLmhlcm8uc3ViKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaGVyby1zY3JvbGwtaGludCcpLCBkLmhlcm8uaGludCk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwgaDInKSwgZC5zZWN0aW9uTGFiZWwpOwoKICAgICAgYWxsKHNjb3BlLCAnLmdhbGxlcnktaXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICB2YXIgdyA9IGQud29ya3NbaV07IGlmICghdykgcmV0dXJuOwogICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdy5ocmVmKTsKICAgICAgICB2YXIgaW0gPSBvbmUoYSwgJ2ltZycpOwogICAgICAgIGlmIChpbSkgewogICAgICAgICAgaW0uc2V0QXR0cmlidXRlKCdzcmMnLCB3LmltZyk7CiAgICAgICAgICBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHcuYWx0KTsKICAgICAgICAgIGlmICh3LncpIGltLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3LncpOwogICAgICAgICAgaWYgKHcuaCkgaW0uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB3LmgpOwogICAgICAgICAgLyogc3Jjc2V0INC40Lcg0YjQsNCx0LvQvtC90LAgd2ZvbGlvINC_0LXRgNC10LHQuNC7INCx0Ysg0L3QsNGIIHNyYyAqLwogICAgICAgICAgaW0ucmVtb3ZlQXR0cmlidXRlKCdzcmNzZXQnKTsKICAgICAgICB9CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5vdmVybGF5LXRleHQgaDMnKSwgdy50aXRsZSk7CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5vdmVybGF5LXRleHQgc3BhbicpLCB3LmNhcHRpb24pOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmFkdmFudGFnZXMtaGVhZGVyIGgyJyksIGQuYWR2LmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmFkdi1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoZWwsIGkpIHsKICAgICAgICB2YXIgYSA9IGQuYWR2Lml0ZW1zW2ldOyBpZiAoIWEpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShlbCwgJ2gzJyksIGEudGl0bGUpOwogICAgICAgIHNldFRleHQob25lKGVsLCAncCcpLCBhLnRleHQpOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmNsaWVudHMtaGVhZGVyIC5sYWJlbCcpLCBkLmNsaWVudHMubGFiZWwpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5jbGllbnRzLWhlYWRlciBoMicpLCBkLmNsaWVudHMuaDIpOwogICAgICBhbGwoc2NvcGUsICcuY2xpZW50LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaSkgewogICAgICAgIHZhciBjID0gZC5jbGllbnRzLml0ZW1zW2ldOyBpZiAoIWMpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShlbCwgJy5jbGllbnQtbmFtZScpLCBjLm5hbWUpOwogICAgICAgIHNldFRleHQob25lKGVsLCAnLmNsaWVudC10eXBlJyksIGMudHlwZSk7CiAgICAgIH0pOwoKICAgICAgdmFyIGN0YUgyID0gb25lKHNjb3BlLCAnLmN0YSBoMicpOwogICAgICBpZiAoY3RhSDIpIGN0YUgyLmlubmVySFRNTCA9IGQuY3RhLmgyOwogICAgICBhbGwoc2NvcGUsICcuYnRuLXJvdyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuYnV0dG9uc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChiLCB2LnRleHQpOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgfSk7CiAgICAgIGFsbChzY29wZSwgJy5jdGEtc29jaWFscyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuc29jaWFsc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChhLCB2LmxhYmVsKTsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgIH0pOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYnVpbGRMZChkb2MsIHNjb3BlLCBkKSB7CiAgICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJywgd2FybjogW10gfTsKICAgICAgdmFyIG87CiAgICAgIHRyeSB7IG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOyB9CiAgICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ2xkK2pzb24g0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlLCB3YXJuOiBbXSB9OyB9CgogICAgICB2YXIgd2FybiA9IFtdOwogICAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgICBzeW5jQ2Fub24oZyk7CiAgICAgIGZ1bmN0aW9uIG5vZGUodHkpIHsgcmV0dXJuIGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSB0eTsgfSlbMF07IH0KCiAgICAgIHZhciBzcnYgPSBub2RlKCdTZXJ2aWNlJyk7CiAgICAgIGlmICghc3J2KSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDRgNCw0LfQvNC10YLQutC1INC90LXRgiDRg9C30LvQsCBTZXJ2aWNlJywgd2FybjogW10gfTsKCiAgICAgIC8qINCj0LfQtdC7INGB0YLRgNCw0L3QuNGG0Ys6INC90LDQt9Cy0LDQvdC40LUsINC-0L_QuNGB0LDQvdC40LUg0Lgg0LTQsNGC0LAg0L_QvtGB0LvQtdC00L3QtdC5INC_0YDQsNCy0LrQuC4KICAgICAgICAg0JTQsNGC0YMg0L7QsdC90L7QstC70Y_QtdC8INCy0YHQtdCz0LTQsCDigJQg0LjQvdCw0YfQtSDQvtC90LAg0YHQvtCy0YDRkdGCINC-INGB0LLQtdC20LXRgdGC0Lgg0YHRgtGA0LDQvdC40YbRiy4gKi8KICAgICAgdmFyIHBhZ2UgPSBub2RlKCdXZWJQYWdlJyk7CiAgICAgIGlmIChwYWdlKSB7CiAgICAgICAgcGFnZS5uYW1lID0gZC5zZW8ucGFnZU5hbWU7CiAgICAgICAgcGFnZS5kZXNjcmlwdGlvbiA9IGQuc2VvLnBhZ2VEZXNjcmlwdGlvbjsKICAgICAgICBwYWdlLmRhdGVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgIH0KCiAgICAgIC8qINCg0LDQsdC-0YLRizog0YHQv9C40YHQvtC6INC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyINGB0L7QsdC40YDQsNC10YLRgdGPINC40Lcg0YHQsNC80L7QuSDRgdC10YLQutC4LAogICAgICAgICDQv9C-0Y3RgtC-0LzRgyDRgNCw0LfQvtC50YLQuNGB0Ywg0YEg0LLQuNC00LjQvNC-0Lkg0LPQsNC70LXRgNC10LXQuSDQtdC80YMg0L3QtdGH0LXQvC4gKi8KICAgICAgdmFyIGNlbGxzID0gYWxsKHNjb3BlLCAnLmdhbGxlcnktaXRlbScpOwogICAgICB2YXIgbGlzdCA9IG5vZGUoJ0l0ZW1MaXN0Jyk7CiAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgbGlzdC5udW1iZXJPZkl0ZW1zID0gY2VsbHMubGVuZ3RoOwogICAgICAgIGxpc3QuaXRlbUxpc3RFbGVtZW50ID0gY2VsbHMubWFwKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgICB2YXIgaW0gPSBvbmUoYywgJ2ltZycpOwogICAgICAgICAgdmFyIGNhcCA9IG9uZShjLCAnLm92ZXJsYXktdGV4dCBzcGFuJyksIHR0bCA9IG9uZShjLCAnLm92ZXJsYXktdGV4dCBoMycpOwogICAgICAgICAgdmFyIGl0ZW0gPSB7CiAgICAgICAgICAgICdAdHlwZSc6ICdJbWFnZU9iamVjdCcsCiAgICAgICAgICAgIG5hbWU6IHQoY2FwKSArICcg4oCUICcgKyB0KHR0bCkudG9Mb3dlckNhc2UoKSwKICAgICAgICAgICAgY2FwdGlvbjogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgY29udGVudFVybDogaW0gPyAoaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSB8fCAnJykgOiAnJywKICAgICAgICAgICAgdXJsOiBjLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHcgPSBpbSAmJiBpbS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIGhoID0gaW0gJiYgaW0uZ2V0QXR0cmlidXRlKCdoZWlnaHQnKTsKICAgICAgICAgIGlmICh3KSBpdGVtLndpZHRoID0gTnVtYmVyKHcpOwogICAgICAgICAgaWYgKGhoKSBpdGVtLmhlaWdodCA9IE51bWJlcihoaCk7CiAgICAgICAgICByZXR1cm4geyAnQHR5cGUnOiAnTGlzdEl0ZW0nLCBwb3NpdGlvbjogaSArIDEsIGl0ZW06IGl0ZW0gfTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyog0JPQu9Cw0LLQvdC-0LUg0LjQt9C-0LHRgNCw0LbQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLIOKAlCDQv9C10YDQstCw0Y8g0YDQsNCx0L7RgtCwINCz0LDQu9C10YDQtdC4ICovCiAgICAgIHZhciBwcmltYXJ5ID0gbm9kZSgnSW1hZ2VPYmplY3QnKTsKICAgICAgdmFyIGZpcnN0Q2VsbCA9IGNlbGxzWzBdLCBmaXJzdEltID0gZmlyc3RDZWxsICYmIG9uZShmaXJzdENlbGwsICdpbWcnKTsKICAgICAgaWYgKHByaW1hcnkgJiYgZmlyc3RJbSkgewogICAgICAgIHByaW1hcnkudXJsID0gZmlyc3RJbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8IHByaW1hcnkudXJsOwogICAgICAgIHByaW1hcnkuY2FwdGlvbiA9IGZpcnN0SW0uZ2V0QXR0cmlidXRlKCdhbHQnKSB8fCBwcmltYXJ5LmNhcHRpb247CiAgICAgICAgdmFyIHB3ID0gZmlyc3RJbS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIHBoID0gZmlyc3RJbS5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpOwogICAgICAgIGlmIChwdykgcHJpbWFyeS53aWR0aCA9IE51bWJlcihwdyk7CiAgICAgICAgaWYgKHBoKSBwcmltYXJ5LmhlaWdodCA9IE51bWJlcihwaCk7CiAgICAgIH0KCiAgICAgIHNydi5uYW1lID0gZC5zZW8ubmFtZTsKICAgICAgc3J2LmRlc2NyaXB0aW9uID0gZC5zZW8uZGVzY3JpcHRpb247CgogICAgICAvKiDQptC10L3QsDog0LHQtdGA0ZHQvCDRhtC40YTRgNGDINC40Lcg0L_QtdGA0LLQvtCz0L4g0L_RgNC10LjQvNGD0YnQtdGB0YLQstCwLCDQs9C00LUg0L7QvdCwINC90LDQv9C40YHQsNC90LAKICAgICAgICAg0LTQu9GPINC70Y7QtNC10LkuINCV0YHQu9C4INC10ZEg0YLQsNC8INC90LXRgiDigJQg0J3QlSDQv9GA0LjQtNGD0LzRi9Cy0LDQtdC8LCDQvtGB0YLQsNCy0LvRj9C10Lwg0L_QvtC70LUKICAgICAgICAg0LrQsNC6INCx0YvQu9C-INC4INCz0L7QstC-0YDQuNC8INC-0LEg0Y3RgtC-0Lwg0LLRgdC70YPRhS4gKi8KICAgICAgdmFyIGh1bWFuID0gKGQuYWR2Lml0ZW1zWzBdIHx8IHt9KS50aXRsZSB8fCAnJzsKICAgICAgdmFyIGZyb21IdW1hbiA9IGRpZ2l0cyhodW1hbik7CiAgICAgIHZhciBwcmljZSA9IGQuc2VvLnByaWNlOwogICAgICBpZiAoZnJvbUh1bWFuKSB7CiAgICAgICAgaWYgKGZyb21IdW1hbiAhPT0gZC5zZW8ucHJpY2UpIHdhcm4ucHVzaCgn0YbQtdC90LAg0LIg0YDQsNC30LzQtdGC0LrQtSDQstC30Y_RgtCwINC40Lcg0L_RgNC10LjQvNGD0YnQtdGB0YLQsjogJyArIGZyb21IdW1hbik7CiAgICAgICAgcHJpY2UgPSBmcm9tSHVtYW47CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2Fybi5wdXNoKCfQsiDQv9C10YDQstC-0Lwg0L_RgNC10LjQvNGD0YnQtdGB0YLQstC1INC90LXRgiDRhtC40YTRgNGLINGG0LXQvdGLIOKAlCDQsiDRgNCw0LfQvNC10YLQutC1INC-0YHRgtCw0LvQsNGB0Ywg0L_RgNC10LbQvdGP0Y8g0YbQtdC90LAnKTsKICAgICAgfQoKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3J2Lm9mZmVycykgJiYgc3J2Lm9mZmVyc1swXSkgewogICAgICAgIHNydi5vZmZlcnNbMF0ucHJpY2UgPSBwcmljZTsKICAgICAgICBpZiAoZC5zZW8ucHJpY2VWYWxpZFVudGlsKSBzcnYub2ZmZXJzWzBdLnByaWNlVmFsaWRVbnRpbCA9IGQuc2VvLnByaWNlVmFsaWRVbnRpbDsKICAgICAgICBlbHNlIGRlbGV0ZSBzcnYub2ZmZXJzWzBdLnByaWNlVmFsaWRVbnRpbDsKICAgICAgfQoKICAgICAgdmFyIGNhdCA9ICgoc3J2Lmhhc09mZmVyQ2F0YWxvZyB8fCB7fSkuaXRlbUxpc3RFbGVtZW50KSB8fCBbXTsKICAgICAgY2F0LmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgICAgaWYgKGl0Lml0ZW1PZmZlcmVkICYmIHR5cGVvZiBkLnNlby5jYXRhbG9nW2ldID09PSAnc3RyaW5nJykgewogICAgICAgICAgaXQuaXRlbU9mZmVyZWQubmFtZSA9IGQuc2VvLmNhdGFsb2dbaV07CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8qINCz0LvQsNCy0L3QvtC1INC40LfQvtCx0YDQsNC20LXQvdC40LUg4oCUINC40Lcg0L_QtdGA0LLQvtC5INGA0LDQsdC-0YLRiyDQs9Cw0LvQtdGA0LXQuCAqLwogICAgICB2YXIgZmlyc3RJbWcgPSBvbmUoc2NvcGUsICcuZ2FsbGVyeS1pdGVtIGltZycpOwogICAgICBpZiAoZmlyc3RJbWcgJiYgZmlyc3RJbWcuZ2V0QXR0cmlidXRlKCdzcmMnKSkgc3J2LmltYWdlID0gZmlyc3RJbWcuZ2V0QXR0cmlidXRlKCdzcmMnKTsKCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwsIHdhcm46IHdhcm4gfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcuYXZ6LWludGVyaW9yJyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcuYXZ6LWludGVyaW9yIC5nYWxsZXJ5LWdyaWQnKSA-IC0xOwogICAgICAgIH0pWzBdOwogICAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcuYXZ6LWludGVyaW9yJykgPiAtMSAmJiB4LnRleHRDb250ZW50LmluZGV4T2YoJ3dhaXRGb3JET00nKSA-IC0xOwogICAgICAgIH0pWzBdOwogICAgICAgIC8qINGB0YLRgNC-0LrRgyDRiNGA0LjRhNGC0L7QsiDQsdC10YDRkdC8INC40Lcg0LjRgdGF0L7QtNC90LjQutCwINCh0KvQoNCr0Jwg0YLQtdC60YHRgtC-0Lw6INGH0LXRgNC10Lcgb3V0ZXJIVE1MCiAgICAgICAgICAg0LHRgNCw0YPQt9C10YAg0LfQsNC_0LjRgdCw0Lsg0LHRiyDQsNC80L_QtdGA0YHQsNC90LTRiyDQutCw0LogJmFtcDsg4oCUINGA0LDQsdC-0YLQsNC10YIg0YLQsNC6INC20LUsINC90L4KICAgICAgICAgICDQt9Cw0YHQvtGA0Y_QtdGCINGB0YDQsNCy0L3QtdC90LjQtSDRgSDQuNGB0YXQvtC00L3Ri9C8INC60L7QtNC-0Lwg0LvQuNGI0L3QuNC80Lgg0L7RgtC70LjRh9C40Y_QvNC4ICovCiAgICAgICAgdmFyIGZvbnRSYXcgPSAoc3JjLm1hdGNoKC88bGluayBocmVmPSJodHRwczpcL1wvZm9udHNcLmdvb2dsZWFwaXNcLmNvbVwvY3NzMltePl0qPi8pIHx8IFtudWxsXSlbMF07CiAgICAgICAgdmFyIGZvbnRMaW5rID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJyk7CgogICAgICAgIHZhciBtaXNzaW5nID0gW107CiAgICAgICAgaWYgKCFzY29wZSkgbWlzc2luZy5wdXNoKCfQsdC70L7QuiAuYXZ6LWludGVyaW9yJyk7CiAgICAgICAgaWYgKCFzdHlsZSkgbWlzc2luZy5wdXNoKCc8c3R5bGU-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAoIXNjcmlwdCkgbWlzc2luZy5wdXNoKCc8c2NyaXB0PiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LUg0L3QsNC50LTQtdC90L46ICcgKyBtaXNzaW5nLmpvaW4oJywgJykpOwoKICAgICAgICB3cml0ZUFsbChzY29wZSwgZCk7CiAgICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgICAvKiDQodC_0LjRgdC-0Log0YHRgtGA0L7QuiA8aGVhZD4g0LfQsNGF0LDRgNC00LrQvtC20LXQvSDQuCDRgdCy0LXRgNC10L0g0YEg0YDQtdCw0LvRjNC90YvQvCDQsdC70L7QutC-0Lw6CiAgICAgICAgICAg0YMg0LjQvdGC0LXRgNGM0LXRgNC90L7QuSDQvtC9INGB0LLQvtC5IOKAlCDRgSBkbnMtcHJlZmV0Y2gsINC60L7RgtC-0YDQvtCz0L4g0L3QtdGCCiAgICAgICAgICAg0L3QsCDQv9GA0LDQudGB0LUg0Lgg0L_QvtGA0YLRhNC-0LvQuNC-LiDQn9GA0LjQtNGD0LzRi9Cy0LDRgtGMINGB0Y7QtNCwINC70LjRiNC90LjQtSDRgdGC0YDQvtC60Lgg0L3QtdC70YzQt9GPLiAqLwogICAgICAgIHZhciB0ZXh0ID0gWwogICAgICAgICAgLyogdjI6INGI0YDQuNGE0YLRiyDQuCDQt9C90LDRh9C60Lgg0LLRiNC40YLRiyDQsiDRgdGC0LjQu9GMINGB0YLRgNCw0L3QuNGG0Ysg4oCUINGB0YHRi9C70L7QuiDQvdCwIEdvb2dsZSDQvdC10YIgKi8KICAgICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vaS53Zm9saW8ucnUiPicsCiAgICAgICAgICAnPGxpbmsgcmVsPSJkbnMtcHJlZmV0Y2giIGhyZWY9Imh0dHBzOi8vaS53Zm9saW8ucnUiPicsCiAgICAgICAgICAnJywKICAgICAgICAgIHN0eWxlLm91dGVySFRNTCwKICAgICAgICAgICcnLAogICAgICAgICAgc2NvcGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdD4nLAogICAgICAgICAgc2NyaXB0LnRleHRDb250ZW50LnRyaW0oKSwKICAgICAgICAgICc8JyArICcvc2NyaXB0PicsCiAgICAgICAgICAnJywKICAgICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgICBsZC50ZXh0LAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JwogICAgICAgIF0uam9pbignXG4nKTsKCiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgd2FybjogbGQud2FybiB9OwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emluLW91dCcpOwogICAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgICB2YXIgb2sgPSBmYWxzZTsKICAgICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICAgIH0KCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnppbi1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBkID0gY29sbGVjdCgpOwogICAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgICBhc3NlbWJsZShkKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAvKiDRgdCy0LXRgNGP0LXQvDog0LLRgdGRINC70Lgg0LLQstC10LTRkdC90L3QvtC1INC00LXQudGB0YLQstC40YLQtdC70YzQvdC-INC_0L7Qv9Cw0LvQviDQsiDQutC-0LQgKi8KICAgICAgICB2YXIgZG9jMiA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocmVzLnRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYzIucXVlcnlTZWxlY3RvcignLmF2ei1pbnRlcmlvcicpKTsKICAgICAgICBpZiAoYWdhaW4pIHJlYWRMZChkb2MyLCBhZ2Fpbik7CiAgICAgICAgdmFyIG5vdExhbmRlZCA9IGFnYWluID8gbGFuZGVkKGQsIGFnYWluLCAvXiQvKSA6IFsn0YHRgtGA0LDQvdC40YbQsCDQvdC1INGA0LDQt9C-0LHRgNCw0LvQsNGB0YwnXTsKICAgICAgICB2YXIgbm90ZSA9ICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuICcgKwogICAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0Log0YHRgtGA0LDQvdC40YbRiyDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4nOwogICAgICAgIHZhciB3MiA9IHJlcy53YXJuLnNsaWNlKCk7CiAgICAgICAgaWYgKG5vdExhbmRlZC5sZW5ndGgpIHcyLnB1c2goJ9Cd0JUg0JfQkNCf0JjQodCQ0JvQntCh0Kwg0LIg0LrQvtC0OiAnICsgbm90TGFuZGVkLnNsaWNlKDAsIDYpLmpvaW4oJywgJykgKwogICAgICAgICAgKG5vdExhbmRlZC5sZW5ndGggPiA2ID8gJyDQuCDQtdGJ0ZEgJyArIChub3RMYW5kZWQubGVuZ3RoIC0gNikgOiAnJykpOwogICAgICAgIGlmICh3Mi5sZW5ndGgpIG5vdGUgKz0gJyDQktC90LjQvNCw0L3QuNC1OiAnICsgdzIuam9pbignOyAnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emluLXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhc3NlbWJsZShzbmFwKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdnotaW50ZXJpb3InKSk7CiAgICAgICAgcmVhZExkKGRvYywgYWdhaW4pOwogICAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgICAgaWYgKGEgPT09IGIpIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLicpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INCx0YvQu9C-JywgSlNPTi5wYXJzZShhKSk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0YHRgtCw0LvQvicsIEpTT04ucGFyc2UoYikpOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwogIH0KCiAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2ei1pbnRlcmlvcicpOwogICAgaWYgKCFzY29wZSkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiDQsdC70L7QutCwIC5hdnotaW50ZXJpb3InKTsKICAgIGNmZyA9IHJlYWRDZmcoc2NvcGUpOwogICAgcmVhZExkKGRvYywgY2ZnKTsKICAgIHN0YXJ0KCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgIHJvb3QuaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6aW4td2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2emluLWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0LjQvdGC0LXRgNGM0LXRgNC90L7QuSDRgdGK0ZHQvNC60Lg8L2gyPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6aW4tYm9keSI-PHAgY2xhc3M9ImF2emluLWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC40L3RgtC10YDRjNC10YDQvdC-0Lkg0YHRitGR0LzQutC4INC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJwcmVzZXRzIix0aXRsZToi0J_QsNC90LXQu9GMINC_0YDQtdGB0LXRgtC-0LIiLHNob3J0OiLQn9GA0LXRgdC10YLRiyIsaGludDoi0L_RgNC40LzQtdGA0Ysg0LTQvi_Qv9C-0YHQu9C1LCDQvdCw0LHQvtGA0YssINGG0LXQvdGLLCDQstC-0L_RgNC-0YHRiyIscGFnZXM6WyIvcHJlc2V0cyJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQn9Cg0JXQodCV0KLQntCSICB2MiDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvcHJlc2V0cyAo0YHRgtGA0LDQvdC40YbQsCB2Mi4xOSDQuCB2My54IOKAlCDQttGD0YDQvdCw0LssINCx0LXQtyBHb29nbGUgRm9udHMpCgogICB2MiwgMTYuMDkuMjAyNjog0LrQsNGA0YLQvtGH0LrQsCDQutC-0LvQu9C10LrRhtC40Lgg0YHQv9GA0LDQstCwINC-0YIg0L_RgNC40LzQtdGA0LAgKNGB0YLRgNCw0L3QuNGG0LAKICAgdjIuMTcrKSDigJQg0YLRgNC4INGB0YLRgNC-0LrQuCDQuCDQv9C-0LTQv9C40YHRjCDQv9C-0LQg0LrQvdC-0L_QutC-0Lkg0L_RgNCw0LLRj9GC0YHRjyDQsiDRhNC-0YDQvNC1OwogICDRgyDRgNCw0LfQvNC10YLQutC4INC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyINGB0L7RhdGA0LDQvdGP0LXRgtGB0Y8gaWQ9ImF2cC1zY2hlbWEiIOKAlCDQsdC10Lcg0L3QtdCz0L4KICAg0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvtCx0L3QvtCy0LvRj9C10YIg0YHRgNC-0Log0LTQtdC50YHRgtCy0LjRjyDRhtC10L0uCgogICDQp9C40YLQsNC10YIg0JjQodCl0J7QlNCd0KvQmSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiywg0L_QvtC00YHRgtCw0LLQu9GP0LXRgiDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiwogICDQuCDQstGL0LTQsNGR0YIg0LLQtdGB0Ywg0LHQu9C-0Log0YbQtdC70LjQutC-0Lwg4oCUINCy0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0L7QtNC90LjQvCDQutGD0YHQutC-0LwuCgogICDQk9Cb0JDQktCd0J7QlSDQn9Cg0JDQktCY0JvQniDQrdCi0J7QmSDQodCi0KDQkNCd0JjQptCrOiDRhNC-0YDQvNCwINC30LDQutCw0LfQsCDQvdC10L_RgNC40LrQvtGB0L3QvtCy0LXQvdC90LAuCiAgINCc0L7QtNCw0LvRjNC90L7QtSDQvtC60L3Qviwg0L7RgtC_0YDQsNCy0LrQsCDQt9Cw0Y_QstC60Lgg0LIgWWFuZGV4IENsb3VkLCDRg9Cy0LXQtNC-0LzQu9C10L3QuNC1CiAgINCyIFRlbGVncmFtLCDQv9GA0L7QstC10YDQutCwINC90LjQutCwLCDQt9Cw0YnQuNGC0LAg0L7RgiDQtNCy0L7QudC90L7QuSDQvtGC0L_RgNCw0LLQutC4IOKAlAogICDQstGB0ZEg0Y3RgtC-INC_0LDQvdC10LvRjCDQv9C10YDQtdC90L7RgdC40YIg0LIg0YDQtdC30YPQu9GM0YLQsNGCINCU0J7QodCb0J7QktCd0J4sINGB0LjQvNCy0L7QuyDQsiDRgdC40LzQstC-0LssCiAgINC4INC_0YDQuCDRgdCx0L7RgNC60LUg0L_RgNC-0LLQtdGA0Y_QtdGCLCDRh9GC0L4g0L7QvdC-INC90LAg0LzQtdGB0YLQtS4g0JXRgdC70Lgg0YXQvtGC0Ywg0L7QtNC40L0KICAg0LrRg9GB0L7QuiDRhNC-0YDQvNGLINC90LUg0L3QsNC50LTQtdC9IOKAlCDRgdCx0L7RgNC60LAg0L7RgtC80LXQvdGP0LXRgtGB0Y8g0YEg0L7RiNC40LHQutC-0LksINCwINC90LUKICAg0LLRi9C00LDRkdGCINC_0L7QutCw0LvQtdGH0LXQvdC90YvQuSDQutC-0LQuINCa0LvQuNC10L3RgtGLINC_0LjRiNGD0YIg0YfQtdGA0LXQtyDRjdGC0YMg0YTQvtGA0LzRgy4KCiAgINCf0LDQvdC10LvRjCDQv9GA0LDQstC40YIg0YLQvtC70YzQutC-OgogICAgIMK3INC00LLQsCDQvNCw0YHRgdC40LLQsCDQsiDRgdC60YDQuNC_0YLQtSDigJQgUFJFU0VUUyAo0L_RgNC40LzQtdGA0Ysg0LTQvi_Qv9C-0YHQu9C1KQogICAgICAg0LggQ09MTEVDVElPTlMgKNC90LDQsdC-0YDRiywg0YbQtdC90YssINC-0LHQu9C-0LbQutC4KTsKICAgICDCtyDQstC40LTQuNC80YvQtSDRgtC10LrRgdGC0Ysg0LIg0YDQsNC30LzQtdGC0LrQtTsKICAgICDCtyDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyLgoKICAg0KHQu9Cw0LnQtNC10YAg0YHRgNCw0LLQvdC10L3QuNGPLCDRgtC40LrQtdGALCDRgNCw0YHQutGA0YvRgtC40LUg0LjQvdGB0YLRgNGD0LrRhtC40Lgg0Lgg0LLQvtC_0YDQvtGB0L7QsgogICDRgtC-0LbQtSDQvdC1INGC0YDQvtCz0LDRjtGC0YHRjzog0L_QsNC90LXQu9GMINC90LUg0L_QtdGA0LXQv9C40YHRi9Cy0LDQtdGCINGB0LrRgNC40L_Rgiwg0LAg0LzQtdC90Y_QtdGCCiAgINCyINC90ZHQvCDRgNC-0LLQvdC-INC00LLQsCDQu9C40YLQtdGA0LDQu9CwLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qIC0tLS0tLS0tLS0g0L7QsdGJ0LjQtSDQutCw0YDRgtC-0YfQutC4OiDQs9C70LDQstC90LDRjyDigJQg0LjRgdGC0L7Rh9C90LjQuiDQuNGB0YLQuNC90YsgLS0tLS0tLS0tLQogICAgINCj0LfQu9GLICNwaG90b2dyYXBoZXIsICNidXNpbmVzcyDQuCAjd2Vic2l0ZSDQvtC_0LjRgdGL0LLQsNGO0YIg0L7QtNC90L7Qs9C-INC4INGC0L7Qs9C-INC20LUKICAgICDRh9C10LvQvtCy0LXQutCwLCDQvtC00L3QviDQtNC10LvQviDQuCDQvtC00LjQvSDRgdCw0LnRgi4g0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0LkKICAgICDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40LoKICAgICDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4INCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQv9GA0L7RgdGC0L4KICAgICDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINC40YUg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUsCiAgICAg0L_QvtGN0YLQvtC80YMg0YDQsNGB0YXQvtC00LjRgtGM0YHRjyDQuNC8INCx0L7Qu9GM0YjQtSDQvdC10YfQtdC8LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMzAg0L7QutGC0Y_QsdGA0Y8gMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5LTAxLTAxIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICIxNDkwMC01NDkwMCIsCiAgICAgICJvcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICJkYXlPZldlZWsiOiBbCiAgICAgICAgICAgICJNb25kYXkiLAogICAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgICAiVGh1cnNkYXkiLAogICAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICAgIlN1bmRheSIKICAgICAgICAgIF0sCiAgICAgICAgICAib3BlbnMiOiAiMTA6MDAiLAogICAgICAgICAgImNsb3NlcyI6ICIyMDowMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enAtcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIE1BWFcgPSAxMjQwOyAvLyDQv9GA0LXQtNC10Lsg0YjQuNGA0LjQvdGLINC60LDQtNGA0LAsINGB0LwuINC40YHRgtC-0YDQuNGOINC_0YDQvtC10LrRgtCwCgogIGZ1bmN0aW9uIG9uZShlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBlbC5xdWVyeVNlbGVjdG9yKHNlbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfQogIGZ1bmN0aW9uIGFsbChlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBbXS5zbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKSk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9IH0KICBmdW5jdGlvbiB0KGVsKSB7IHJldHVybiBlbCA_IGVsLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gaHRtbChlbCkgeyByZXR1cm4gZWwgPyBlbC5pbm5lckhUTUwudHJpbSgpIDogJyc7IH0KCiAgLyog0KLQtdC60YHRgiDQtNC70Y8g0YDQsNC30LzQtdGC0LrQuDogPGJyPiDRgdCw0Lwg0L_QviDRgdC10LHQtSDQv9GA0L7QsdC10LvQsCDQvdC1INC00LDRkdGCLCDQuAogICAgIMKrUHJlbWllcmUgUHJvLjxicj7Qn9GA0L7RidC1wrsg0L_RgNC10LLRgNCw0YnQsNC70L7RgdGMINCyIMKrUHJlbWllcmUgUHJvLtCf0YDQvtGJ0LXCuyDigJQKICAgICDRgdC70LjQv9GI0LjQtdGB0Y8g0YHQu9C-0LLQsCDQsiDQvtGC0LLQtdGC0LUg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutCwLiDQotC-0YIg0LbQtSDQtNC10YTQtdC60YIg0YPQttC1INGH0LjQvdC40LvQuAogICAgINCyINC_0LDQvdC10LvQuCDQvtCx0YPRh9C10L3QuNGPLiDQl9Cw0LzQtdC90Y_QtdC8INC_0LXRgNC10L3QvtGB0Ysg0L_RgNC-0LHQtdC70L7QvCDQtNC-INGC0L7Qs9C-LCDQutCw0Log0LHRgNCw0YLRjCDRgtC10LrRgdGCLiAqLwogIGZ1bmN0aW9uIHRleHRXaXRoQnJlYWtzKGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgYyA9IGVsLmNsb25lTm9kZSh0cnVlKTsKICAgIGFsbChjLCAnYnInKS5mb3JFYWNoKGZ1bmN0aW9uIChicikgewogICAgICBici5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSwgYnIpOwogICAgfSk7CiAgICByZXR1cm4gYy50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIGRpZ2l0cyhzKSB7IHJldHVybiBTdHJpbmcocyB8fCAnJykucmVwbGFjZSgvW14wLTldL2csICcnKTsgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSDQvNCw0YHRgdC40LLQvtCyINC40Lcg0YHQutGA0LjQv9GC0LAgLS0tLS0tLS0tLQogICAgINCg0LDQt9Cx0LjRgNCw0LXQvCDRgtC10LrRgdGC0L7QvCwg0L3QtSDQstGL0L_QvtC70L3Rj9GPINC60L7QtDog0LLRi9C_0L7Qu9C90Y_RgtGMINGH0YPQttC-0Lkg0YHQutGA0LjQv9GCCiAgICAg0YDQsNC00Lgg0YfRgtC10L3QuNGPIOKAlCDQv9C70L7RhdCw0Y8g0LjQtNC10Y8uICovCgogIGZ1bmN0aW9uIHJlYWRQcmVzZXRzKHNyYykgewogICAgdmFyIG91dCA9IHsgc3RyZWV0OiBbXSwgZmlsbTogW10gfTsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgUFJFU0VUUyA9IFx7KFtcc1xTXSo_KVxuXHN7NH1cfTsvKTsKICAgIGlmICghbSkgcmV0dXJuIG91dDsKICAgIFsnc3RyZWV0JywgJ2ZpbG0nXS5mb3JFYWNoKGZ1bmN0aW9uIChjb2wpIHsKICAgICAgdmFyIGIgPSBtWzFdLm1hdGNoKG5ldyBSZWdFeHAoY29sICsgJzpcXHMqXFxbKFtcXHNcXFNdKj8pXFxuXFxzKlxcXScpKTsKICAgICAgaWYgKCFiKSByZXR1cm47CiAgICAgIHZhciByZSA9IC9ce1xzKmlkOlxzKicoW14nXSopJ1xzKixccypuYW1lOlxzKicoW14nXSopJ1xzKixccypkZXNjOlxzKicoW14nXSopJ1xzKixccypiZWZvcmU6XHMqJyhbXiddKiknXHMqLFxzKmFmdGVyOlxzKicoW14nXSopJ1xzKlx9L2c7CiAgICAgIHZhciBoaXQ7CiAgICAgIHdoaWxlICgoaGl0ID0gcmUuZXhlYyhiWzFdKSkpIHsKICAgICAgICBvdXRbY29sXS5wdXNoKHsgaWQ6IGhpdFsxXSwgbmFtZTogaGl0WzJdLCBkZXNjOiBoaXRbM10sIGJlZm9yZTogaGl0WzRdLCBhZnRlcjogaGl0WzVdIH0pOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBvdXQ7CiAgfQoKICBmdW5jdGlvbiByZWFkQ29sbGVjdGlvbnMoc3JjKSB7CiAgICB2YXIgb3V0ID0gW107CiAgICB2YXIgbSA9IHNyYy5tYXRjaCgvdmFyIENPTExFQ1RJT05TID0gXFsoW1xzXFNdKj8pXG5cc3s0fVxdOy8pOwogICAgaWYgKCFtKSByZXR1cm4gb3V0OwogICAgdmFyIHJlID0gL1×7XHMqa2V5OlxzKicoW14nXSopJ1xzKixccypuYW1lOlxzKicoW14nXSopJ1xzKixccyplbTpccyonKFteJ10qKSdccyosXHMqZGVzYzpccyonKFteJ10qKSdccyosXHMqcHJpY2U6XHMqJyhbXiddKiknXHMqLFxzKm9sZFByaWNlOlxzKihudWxsfCdbXiddKicpXHMqLFxzKmltZzpccyonKFteJ10qKSdccyosXHMqaW1nQWx0OlxzKicoW14nXSopJ1xzKigsXHMqZmVhdHVyZWQ6XHMqdHJ1ZVxzKik_XH0vZzsKICAgIHZhciBoaXQ7CiAgICB3aGlsZSAoKGhpdCA9IHJlLmV4ZWMobVsxXSkpKSB7CiAgICAgIG91dC5wdXNoKHsKICAgICAgICBrZXk6IGhpdFsxXSwgbmFtZTogaGl0WzJdLCBlbTogaGl0WzNdLCBkZXNjOiBoaXRbNF0sCiAgICAgICAgcHJpY2U6IGhpdFs1XSwKICAgICAgICBvbGRQcmljZTogaGl0WzZdID09PSAnbnVsbCcgPyAnJyA6IGhpdFs2XS5zbGljZSgxLCAtMSksCiAgICAgICAgaW1nOiBoaXRbN10sIGltZ0FsdDogaGl0WzhdLAogICAgICAgIGZlYXR1cmVkOiAhIWhpdFs5XQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC60LDRgNGC0L7Rh9C60LAg0YMg0L_RgNC40LzQtdGA0LAgKNGB0YLRgNCw0L3QuNGG0LAgdjIuMTcrKSAtLS0tLS0tLS0tCiAgICAg0KHRgtGA0L7QutC4INC60LDRgNGC0L7Rh9C60Lgg0LbQuNCy0YPRgiDQsiDRgdC60YDQuNC_0YLQtSDQutCw0Log0YHRgtGA0L7QutC-0LLRi9C1INC70LjRgtC10YDQsNC70YsuINCn0LjRgtCw0LXQvAogICAgINC4INC_0LjRiNC10Lwg0LjRhSDRgtC10LrRgdGC0L7QvCwg0L3QtSDQstGL0L_QvtC70L3Rj9GPINC60L7QtC4g0J3QtdGCINC60LDRgNGC0L7Rh9C60Lgg4oCUINC_0YPRgdGC0YvQtQogICAgINC30L3QsNGH0LXQvdC40Y8sINC4INC_0LDQvdC10LvRjCDQtdGRINC_0YDQvtGB0YLQviDQvdC1INC_0L7QutCw0LfRi9Cy0LDQtdGCLiAqLwoKICB2YXIgQ0FSRF9ST1dfUkUgPSAvJzxkaXYgY2xhc3M9InZhLXJvdyI-PHNwYW4-KCg_OltePCdcXF18XFwuKSopPFwvc3Bhbj48c3Bhbj4oKD86W148J1xcXXxcXC4pKik8XC9zcGFuPjxcL2Rpdj4nL2c7CiAgdmFyIENBUkRfTk9URV9SRSA9IC8nPHAgY2xhc3M9InZhLW5vdGUiPigoPzpbXjwnXFxdfFxcLikqKSg_OicgXCsgJygoPzpbXjwnXFxdfFxcLikqKSk_PGEgaHJlZj0iI2F2cC1jb2xscyI-LzsKCiAgZnVuY3Rpb24gbGl0VG9UZXh0KHMpIHsKICAgIHJldHVybiBTdHJpbmcocyB8fCAnJykucmVwbGFjZSgvXFwoLikvZywgJyQxJykKICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKS5yZXBsYWNlKC8mZ3Q7L2csICc-JykucmVwbGFjZSgvJmFtcDsvZywgJyYnKTsKICB9CiAgZnVuY3Rpb24gdGV4dFRvTGl0KHMpIHsKICAgIHJldHVybiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKQogICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpCiAgICAgIC5yZXBsYWNlKC9cXC9nLCAnXFxcXCcpLnJlcGxhY2UoLycvZywgIlxcJyIpLnJlcGxhY2UoL1tcclxuXSsvZywgJyAnKTsKICB9CgogIGZ1bmN0aW9uIHJlYWRDYXJkKHNyYykgewogICAgdmFyIHJvd3MgPSBbXSwgaGl0OwogICAgQ0FSRF9ST1dfUkUubGFzdEluZGV4ID0gMDsKICAgIHdoaWxlICgoaGl0ID0gQ0FSRF9ST1dfUkUuZXhlYyhzcmMpKSkgcm93cy5wdXNoKHsgbGVmdDogbGl0VG9UZXh0KGhpdFsxXSksIHJpZ2h0OiBsaXRUb1RleHQoaGl0WzJdKSB9KTsKICAgIHZhciBuID0gc3JjLm1hdGNoKENBUkRfTk9URV9SRSk7CiAgICByZXR1cm4geyByb3dzOiByb3dzLCBub3RlOiBuID8gbGl0VG9UZXh0KG5bMV0gKyAoblsyXSB8fCAnJykpIDogJycsIGhhc05vdGU6ICEhbiB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUsIHNyYykgewogICAgdmFyIGlubmVycyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgdmFyIGxhYmVscyA9IGFsbChzY29wZSwgJy5zZWN0aW9uLWxhYmVsJyk7CiAgICB2YXIgYmxvY2tzID0gYWxsKHNjb3BlLCAnLmhtLWJsb2NrJyk7CiAgICB2YXIgZ3JvdXBzID0gYWxsKHNjb3BlLCAnLmluc3RhbGwtZ3JvdXAnKTsKCiAgICBmdW5jdGlvbiBsYWIoaSkgewogICAgICByZXR1cm4gewogICAgICAgIGgyOiB0KG9uZShsYWJlbHNbaV0sICdoMicpKSwKICAgICAgICBhc2lkZTogbGFiZWxzW2ldICYmIG9uZShsYWJlbHNbaV0sICcuc2wtYXNpZGUnKSA_IG93blRleHQob25lKGxhYmVsc1tpXSwgJy5zbC1hc2lkZScpKSA6ICcnCiAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IG93blRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSksCiAgICAgICAgbGluZTE6IHQoaW5uZXJzWzBdKSwKICAgICAgICBsaW5lMjogdChpbm5lcnNbMV0pLAogICAgICAgIGxpbmUzOiBpbm5lcnNbMl0gPyBodG1sKGlubmVyc1syXSkgOiAnJywKICAgICAgICBsZWRlOiB0KG9uZShzY29wZSwgJy5sZWRlJykpCiAgICAgIH0sCiAgICAgIGxhYmVsczogW2xhYigwKSwgbGFiKDEpLCBsYWIoMiksIGxhYigzKV0sCiAgICAgIGFib3V0OiB7CiAgICAgICAgdGV4dDogeyBsYWJlbDogdChvbmUoYmxvY2tzWzBdLCAnLmhtLWxhYmVsJykpLCBib2R5OiBodG1sKG9uZShibG9ja3NbMF0sICdwJykpIH0sCiAgICAgICAgc3RhdHM6IHsKICAgICAgICAgIGxhYmVsOiB0KG9uZShibG9ja3NbMV0sICcuaG0tbGFiZWwnKSksCiAgICAgICAgICBpdGVtczogYWxsKGJsb2Nrc1sxXSwgJy5obS1zdGF0JykubWFwKGZ1bmN0aW9uIChzKSB7CiAgICAgICAgICAgIHZhciBuID0gb25lKHMsICcuaG0tc3RhdC1udW0nKTsKICAgICAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiBuID8gKG4uZ2V0QXR0cmlidXRlKCdkYXRhLXRhcmdldCcpIHx8ICcnKSA6ICcnLCBsYWJlbDogdChvbmUocywgJy5obS1zdGF0LWxibCcpKSB9OwogICAgICAgICAgfSkKICAgICAgICB9LAogICAgICAgIGNvbXBhdDogewogICAgICAgICAgbGFiZWw6IHQob25lKGJsb2Nrc1syXSwgJy5obS1sYWJlbCcpKSwKICAgICAgICAgIHJvd3M6IGFsbChibG9ja3NbMl0sICcuaG0tbGlzdCAucm93JykubWFwKGZ1bmN0aW9uIChyKSB7CiAgICAgICAgICAgIHZhciBzcCA9IGFsbChyLCAnc3BhbicpOwogICAgICAgICAgICByZXR1cm4geyBsZWZ0OiB0KHNwWzBdKSwgcmlnaHQ6IHQoc3BbMV0pIH07CiAgICAgICAgICB9KQogICAgICAgIH0KICAgICAgfSwKICAgICAgY29sbEhlYWQ6IHsgbGFiZWw6IHQob25lKHNjb3BlLCAnLnNlY3Rpb24taGVhZCAubGFiZWwnKSksIGgyOiBodG1sKG9uZShzY29wZSwgJy5zZWN0aW9uLWhlYWQgLmgyJykpIH0sCiAgICAgIHByZXNldHM6IHJlYWRQcmVzZXRzKHNyYyksCiAgICAgIGNvbGxzOiByZWFkQ29sbGVjdGlvbnMoc3JjKSwKICAgICAgY2FyZDogcmVhZENhcmQoc3JjKSwKICAgICAgaW5zdGFsbDogewogICAgICAgIGJ0bjogdChvbmUoc2NvcGUsICcjYXZwLWluc3RhbGwtYnRuIHNwYW46bm90KC5pY29uKScpKSwKICAgICAgICBncm91cHM6IGdyb3Vwcy5tYXAoZnVuY3Rpb24gKGcpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRhZzogdChvbmUoZywgJy5wbGF0Zm9ybS10YWcnKSksCiAgICAgICAgICAgIGg0OiB0KG9uZShnLCAnaDQnKSksCiAgICAgICAgICAgIHN0ZXBzOiBhbGwoZywgJy5pbnN0YWxsLXN0ZXAnKS5tYXAoZnVuY3Rpb24gKHMpIHsKICAgICAgICAgICAgICByZXR1cm4geyBuOiBzLmdldEF0dHJpYnV0ZSgnZGF0YS1uJykgfHwgJycsIGh0bWw6IGh0bWwocykgfTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIG5vdGU6IGh0bWwob25lKGcsICcuaW5zdGFsbC1ub3RlJykpCiAgICAgICAgICB9OwogICAgICAgIH0pLAogICAgICAgIGZvb3RlcjogaHRtbChvbmUoc2NvcGUsICcuaW5zdGFsbC1mb290ZXInKSkKICAgICAgfSwKICAgICAgZmFxOiBhbGwoc2NvcGUsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgcmV0dXJuIHsgcTogdChvbmUoaXQsICcuZmFxLXEtdGV4dCcpKSwgYTogaHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSkgfTsKICAgICAgfSksCiAgICAgIGN0YTogewogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5jdGEgLmgyJykpLAogICAgICAgIGJ0bjogdChvbmUoc2NvcGUsICcuY3RhIC5idG4gLmJ0bi1sYWJlbCBzcGFuJykpCiAgICAgIH0sCiAgICAgIGZvb3ROb3RlOiBodG1sKG9uZShzY29wZSwgJy5mb290LW5vdGUnKSksCiAgICAgIHNlbzogeyBwYWdlTmFtZTogJycsIHBhZ2VEZXNjcmlwdGlvbjogJycsIHByb2R1Y3RzOiB7fSB9CiAgICB9OwogIH0KCiAgLyog0KHQstC-0Y8g0YDQsNC30LzQtdGC0LrQsCDigJQg0L_QviBpZDsg0L_Qu9Cw0YLRhNC-0YDQvNCwINC80L7QttC10YIg0LTQvtCx0LDQstC40YLRjCDRgdCy0L7RjiBsZCtqc29uINGA0LDQvdGM0YjQtSAqLwogIGZ1bmN0aW9uIG93bkxkKGRvYykgewogICAgcmV0dXJuIG9uZShkb2MsICdzY3JpcHQjYXZwLXNjaGVtYVt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKSB8fAogICAgICBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogIH0KCiAgZnVuY3Rpb24gcmVhZExkKGRvYywgY2ZnKSB7CiAgICB2YXIgcyA9IG93bkxkKGRvYyk7CiAgICBpZiAoIXMpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgKG9bJ0BncmFwaCddIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdXZWJQYWdlJykgewogICAgICAgICAgY2ZnLnNlby5wYWdlTmFtZSA9IG4ubmFtZSB8fCAnJzsKICAgICAgICAgIGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdQcm9kdWN0JykgewogICAgICAgICAgdmFyIGtleSA9IFN0cmluZyhuWydAaWQnXSkuc3BsaXQoJyNwcm9kdWN0LScpWzFdOwogICAgICAgICAgaWYgKGtleSkgY2ZnLnNlby5wcm9kdWN0c1trZXldID0geyBuYW1lOiBuLm5hbWUgfHwgJycsIGRlc2NyaXB0aW9uOiBuLmRlc2NyaXB0aW9uIHx8ICcnIH07CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsgLyog0YHQsdC-0YDQutCwINGB0L7QvtCx0YnQuNGCICovIH0KICB9CgogIC8qIC0tLS0tLS0tLS0g0L_QsNC90LXQu9GMIC0tLS0tLS0tLS0gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6cC1yb290LCNhdnpwLXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnpwLXJvb3QgaW5wdXQsI2F2enAtcm9vdCB0ZXh0YXJlYXtiYWNrZ3JvdW5kOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7JywKICAgICdvcGFjaXR5OjEgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjEuNCAhaW1wb3J0YW50fScsCiAgICAnI2F2enAtcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1iLnB7YmFja2dyb3VuZDojMWQxZDFmICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiNmZmYgIWltcG9ydGFudH0nLAogICAgJyNhdnpwLXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2enAtd2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDEwNDBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enAtaGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6cC1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9JywKICAgICcjYXZ6cC1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnpwLWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtc2VjPnN1bW1hcnl7cGFkZGluZzoxMnB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZhZmFmYTtsaXN0LXN0eWxlOm5vbmV9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QkUgICJ9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWYgaW5wdXQsI2F2enAtcm9vdCAuYXZ6cC1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NzBweDtyZXNpemU6dmVydGljYWx9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2enAtcm9vdCAuYXZ6cC1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6cC13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWNhcmQgaDR7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtcGFpcntkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtaW1nPmltZ3t3aWR0aDo2NHB4O2hlaWdodDo4MHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtaW1nIC5ne2ZsZXg6MTttaW4td2lkdGg6MH0nLAogICAgJyNhdnpwLXJvb3QgLmF2enAtaGludHtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC13YXJue2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4YTZkMDAgIWltcG9ydGFudDtiYWNrZ3JvdW5kOiNmZmY4ZTE7Ym9yZGVyOjFweCBzb2xpZCAjZjBlMGEwOycsCiAgICAnYm9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDEycHg7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTQwcHgsMWZyKSk7Z2FwOjEwcHh9JywKICAgICcjYXZ6cC1yb290IC5hdnpwLWdyaWQgZmlndXJle21hcmdpbjowO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2enAtcm9vdCAuYXZ6cC1ncmlkIGltZ3t3aWR0aDoxMDAlO2hlaWdodDoxMjBweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6OHB4O2Rpc3BsYXk6YmxvY2t9JywKICAgICcjYXZ6cC1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6cC1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIHZhciB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyAnPHRleHRhcmVhIGRhdGEtcD0iJyArIHBhdGggKyAnIj5cbicgKyBlc2ModmFsKSArICc8L3RleHRhcmVhPicKICAgICAgOiAnPGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6cC1mIj48bGFiZWw-JyArIGxhYmVsICsgJzwvbGFiZWw-JyArIHRhZyArICc8L2Rpdj4nOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2enAtcm9vdCc7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290KTsKCiAgLyogLS0tLS0tLS0tLSDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70YsgLS0tLS0tLS0tLQogICAgINCg0LXQtNCw0LrRgtC-0YAgd2ZvbGlvINC4INC10LPQviDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQstGB0YLQsNCy0LvRj9GO0YIg0LIg0LTQu9C40L3QvdGL0LUKICAgICDRgdGC0YDQvtC60LggwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IOKAlCBVKzIwMEIg0Lgg0YDQvtC00L3Rjy4g0J3QsCDRjdC60YDQsNC90LUg0LjRhSDQvdC1INCy0LjQtNC90L4sCiAgICAg0LAg0LIg0LDQtNGA0LXRgdC1INGE0LDQudC70LAg0L7QvdC4INC70L7QvNCw0Y7RgiDRgdGB0YvQu9C60YM6INCx0YDQsNGD0LfQtdGAINC-0YLQstC10YfQsNC10YIgwqtGb3JtYXQgZXJyb3LCuywKICAgICDQutCw0YDRgtC40L3QutCwINC40LvQuCDQstC40LTQtdC-INC90LUg0LPRgNGD0LfRj9GC0YHRjy4g0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjAogICAgINC90LXRh9C10LPQviwg0L_QvtGN0YLQvtC80YMg0LLRi9GH0LjRidCw0LXQvCDQuNGFINC4INC_0YDQuCDQstCy0L7QtNC1LCDQuCDRgdC_0LvQvtGI0L3Ri9C8INC_0YDQvtGF0L7QtNC-0Lwg0L_QtdGA0LXQtAogICAgINGB0LHQvtGA0LrQvtC5IOKAlCDQt9C90LDRh9C10L3QuNC1INC80L7Qs9C70L4g0L_QvtC_0LDRgdGC0Ywg0LIg0L_QvtC70LUg0LzQuNC80L4g0YHQvtCx0YvRgtC40Lkg0LLQstC-0LTQsC4gKi8KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIFpXID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwogICAgZnVuY3Rpb24gc2NydWIoZWwpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gMDsKICAgICAgdmFyIHYgPSBlbC52YWx1ZS5yZXBsYWNlKFpXLCAnJyk7CiAgICAgIGlmICh2ID09PSBlbC52YWx1ZSkgcmV0dXJuIDA7CiAgICAgIGVsLnZhbHVlID0gdjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsgc2NydWIoZS50YXJnZXQpOyB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNjcnViKGVsKTsgfSwgMCk7CiAgICB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBlbHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHRleHRhcmVhJyksIG4gPSAwLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSBuICs9IHNjcnViKGVsc1tpXSk7CiAgICAgIGlmIChuKSBjb25zb2xlLndhcm4oJ0FWWjog0YPQsdGA0LDQvdGLINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyDRgNC10LTQsNC60YLQvtGA0LAsINC_0L7Qu9C10Lk6ICcgKyBuKTsKICAgIH0sIHRydWUpOwogIH0pKCk7CgogIGZ1bmN0aW9uIG1zZyhzKSB7IHZhciBlID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cC1tc2cnKTsgaWYgKGUpIGUudGV4dENvbnRlbnQgPSBzOyB9CgogIHZhciBjZmcgPSBudWxsOwoKICBmdW5jdGlvbiBwYWdlU291cmNlKCkgewogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz90PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YTQvtGA0LzQsCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgdmFyIENPTE5BTUVTID0geyBzdHJlZXQ6ICdTVFJFRVQnLCBmaWxtOiAnRklMTScgfTsKCiAgICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2enAtd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enAtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQv9GA0LXRgdC10YLQvtCyPC9oMj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enAtYiIgaWQ9ImF2enAtY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-PC9kaXY-PGRpdiBpZD0iYXZ6cC1ib2R5Ij4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpwLWhpbnQiPtCk0L7RgNC80LAg0LfQsNC60LDQt9CwLCDRgdC70LDQudC00LXRgCDRgdGA0LDQstC90LXQvdC40Y8g0Lgg0L7RgtC_0YDQsNCy0LrQsCDQt9Cw0Y_QstC-0Log0L_QsNC90LXQu9GM0Y4g0L3QtSDQv9GA0LDQstGP0YLRgdGPICcgKwogICAgICAn0Lgg0L_QtdGA0LXQvdC-0YHRj9GC0YHRjyDQsiDRgNC10LfRg9C70YzRgtCw0YIg0LTQvtGB0LvQvtCy0L3Qvi4g0J_QtdGA0LXQtCDQstGL0LTQsNGH0LXQuSDQutC-0LTQsCDQv9Cw0L3QtdC70Ywg0L_RgNC-0LLQtdGA0Y_QtdGCLCDRh9GC0L4g0LLRgdC1INGH0LDRgdGC0LggJyArCiAgICAgICfRhNC-0YDQvNGLINC90LAg0LzQtdGB0YLQtSwg0Lgg0L7RgtC80LXQvdGP0LXRgiDRgdCx0L7RgNC60YMsINC10YHQu9C4INGH0LXQs9C-LdGC0L4g0L3QtSDRhdCy0LDRgtCw0LXRgi48L3A-JzsKCiAgICAvKiDQn9Cg0JXQodCV0KLQqyDigJQg0LPQu9Cw0LLQvdC-0LUgKi8KICAgIFsnc3RyZWV0JywgJ2ZpbG0nXS5mb3JFYWNoKGZ1bmN0aW9uIChjb2wpIHsKICAgICAgdmFyIGxpc3QgPSBjZmcucHJlc2V0c1tjb2xdOwogICAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiJyArIChjb2wgPT09ICdzdHJlZXQnID8gJyBvcGVuJyA6ICcnKSArICc-PHN1bW1hcnk-0J_RgNC40LzQtdGA0Ysg0LTQviAvINC_0L7RgdC70LUg4oCUICcgKwogICAgICAgIENPTE5BTUVTW2NvbF0gKyAnICgnICsgbGlzdC5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4nICsKICAgICAgICAnPHAgY2xhc3M9ImF2enAtaGludCI-0JrQsNC00YAgwqvQtNC-wrsg4oCUINC40YHRhdC-0LTQvdC40LosIMKr0L_QvtGB0LvQtcK7IOKAlCDRgSDQv9GA0LjQvNC10L3RkdC90L3Ri9C8INC_0YDQtdGB0LXRgtC-0LwuICcgKwogICAgICAgICfQntCx0LAg0LDQtNGA0LXRgdCwINC80L7QttC90L4g0LLQv9C40YHQsNGC0Ywg0LLRgNGD0YfQvdGD0Y4g0LjQu9C4INCy0YvQsdGA0LDRgtGMINGB0L4g0YHRgtGA0LDQvdC40YbRiyDQsNC70YzQsdC-0LzQsC4gJyArCiAgICAgICAgJ9Cn0LjRgdC70L4g0L_RgNC10YHQtdGC0L7QsiDQv9Cw0L3QtdC70Ywg0YHQsNC80LAg0L_RgNC-0YHRgtCw0LLQuNGCINCyINGB0YfRkdGC0YfQuNC6INC90LDQtCDQv9GA0L7RgdC80L7RgtGA0L7QvC48L3A-JzsKICAgICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7CiAgICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cC1jYXJkIj48aDQ-JyArIENPTE5BTUVTW2NvbF0gKyAnIMK3ICcgKyBTdHJpbmcoaSArIDEpICsgJyAoJyArIGVzYyhwLmlkKSArICcpPC9oND4nICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JyArIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ3ByZXNldHMuJyArIGNvbCArICcuJyArIGkgKyAnLm5hbWUnLCBwLm5hbWUpICsKICAgICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1JywgJ3ByZXNldHMuJyArIGNvbCArICcuJyArIGkgKyAnLmRlc2MnLCBwLmRlc2MpICsgJzwvZGl2PicgKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImF2enAtcGFpciI-JyArCiAgICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6cC1pbWciPjxpbWcgZGF0YS1wcmV2PSJwcmVzZXRzLicgKyBjb2wgKyAnLicgKyBpICsgJy5iZWZvcmUiIHNyYz0iJyArIGVzYyhwLmJlZm9yZSkgKyAnIiBhbHQ9IiI-JyArCiAgICAgICAgICAnPGRpdiBjbGFzcz0iZyI-JyArIGZpZWxkKCfQmtCw0LTRgCDCq9C00L7CuycsICdwcmVzZXRzLicgKyBjb2wgKyAnLicgKyBpICsgJy5iZWZvcmUnLCBwLmJlZm9yZSkgKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2enAtYiIgZGF0YS1jaG9vc2U9InByZXNldHMuJyArIGNvbCArICcuJyArIGkgKyAnLmJlZm9yZSIgc3R5bGU9InBhZGRpbmc6NHB4IDlweDtmb250LXNpemU6MTJweCI-0JLRi9Cx0YDQsNGC0Ywg0LjQtyDQsNC70YzQsdC-0LzQsDwvYnV0dG9uPjwvZGl2PjwvZGl2PicgKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImF2enAtaW1nIj48aW1nIGRhdGEtcHJldj0icHJlc2V0cy4nICsgY29sICsgJy4nICsgaSArICcuYWZ0ZXIiIHNyYz0iJyArIGVzYyhwLmFmdGVyKSArICciIGFsdD0iIj4nICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsgZmllbGQoJ9Ca0LDQtNGAIMKr0L_QvtGB0LvQtcK7JywgJ3ByZXNldHMuJyArIGNvbCArICcuJyArIGkgKyAnLmFmdGVyJywgcC5hZnRlcikgKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2enAtYiIgZGF0YS1jaG9vc2U9InByZXNldHMuJyArIGNvbCArICcuJyArIGkgKyAnLmFmdGVyIiBzdHlsZT0icGFkZGluZzo0cHggOXB4O2ZvbnQtc2l6ZToxMnB4Ij7QktGL0LHRgNCw0YLRjCDQuNC3INCw0LvRjNCx0L7QvNCwPC9idXR0b24-PC9kaXY-PC9kaXY-JyArCiAgICAgICAgICAnPC9kaXY-PC9kaXY-JzsKICAgICAgfSk7CiAgICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwogICAgfSk7CgogICAgLyog0J3QkNCR0J7QoNCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCd0LDQsdC-0YDRiyDQuCDRhtC10L3RiyAoJyArIGNmZy5jb2xscy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpwLWhpbnQiPtCm0LXQvdCwINC_0YDQsNCy0LjRgtGB0Y8g0L7QtNC40L0g0YDQsNC3OiDQvtC90LAg0LbQtSDRg9GF0L7QtNC40YIg0LIg0YDQsNC30LzQtdGC0LrRgyDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi4gJyArCiAgICAgICfQodGC0LDRgNGD0Y4g0YbQtdC90YMg0L7RgdGC0LDQstGM0YLQtSDQv9GD0YHRgtC-0LksINC10YHQu9C4INGB0LrQuNC00LrQuCDQvdC10YIuPC9wPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6cC1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0L3QsNC0INC30LDQs9C-0LvQvtCy0LrQvtC8JywgJ2NvbGxIZWFkLmxhYmVsJywgY2ZnLmNvbGxIZWFkLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OyDQuCAmbHQ7ZW0mZ3Q7KScsICdjb2xsSGVhZC5oMicsIGNmZy5jb2xsSGVhZC5oMikgKyAnPC9kaXY-JzsKICAgIGNmZy5jb2xscy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgIHZhciBzZW8gPSBjZmcuc2VvLnByb2R1Y3RzW2Mua2V5XSB8fCB7IG5hbWU6ICcnLCBkZXNjcmlwdGlvbjogJycgfTsKICAgICAgY2ZnLmNvbGxzW2ldLnNlb05hbWUgPSBzZW8ubmFtZTsKICAgICAgY2ZnLmNvbGxzW2ldLnNlb0Rlc2MgPSBzZW8uZGVzY3JpcHRpb247CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enAtY2FyZCI-PGg0PtCd0LDQsdC-0YAgJyArIChpICsgMSkgKyAnIOKAlCAnICsgZXNjKGMubmFtZSkgKyAoYy5mZWF0dXJlZCA_ICcgKNCy0YvQtNC10LvQtdC90L3Ri9C5KScgOiAnJykgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6cC1yb3ciPicgKyBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdjb2xscy4nICsgaSArICcubmFtZScsIGMubmFtZSkgKwogICAgICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCDRgNGP0LTQvtC8INGBINC90LDQt9Cy0LDQvdC40LXQvCcsICdjb2xscy4nICsgaSArICcuZW0nLCBjLmVtKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQvdCwINC60LDRgNGC0L7Rh9C60LUnLCAnY29sbHMuJyArIGkgKyAnLmRlc2MnLCBjLmRlc2MsICdhcmVhJykgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JyArIGZpZWxkKCfQptC10L3QsCwg0YLQvtC70YzQutC-INGG0LjRhNGA0YsnLCAnY29sbHMuJyArIGkgKyAnLnByaWNlJywgYy5wcmljZSkgKwogICAgICAgIGZpZWxkKCfQodGC0LDRgNCw0Y8g0YbQtdC90LAgKNC_0YPRgdGC0L4g4oCUINC10YHQu9C4INC90LXRgiknLCAnY29sbHMuJyArIGkgKyAnLm9sZFByaWNlJywgYy5vbGRQcmljZSkgKyAnPC9kaXY-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enAtaW1nIj48aW1nIGRhdGEtcHJldj0iY29sbHMuJyArIGkgKyAnLmltZyIgc3JjPSInICsgZXNjKGMuaW1nKSArICciIGFsdD0iIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iZyI-JyArIGZpZWxkKCfQntCx0LvQvtC20LrQsCDQvdCw0LHQvtGA0LAnLCAnY29sbHMuJyArIGkgKyAnLmltZycsIGMuaW1nKSArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2enAtYiIgZGF0YS1jaG9vc2U9ImNvbGxzLicgKyBpICsgJy5pbWciIHN0eWxlPSJwYWRkaW5nOjRweCA5cHg7Zm9udC1zaXplOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4Ij7QktGL0LHRgNCw0YLRjCDQuNC3INCw0LvRjNCx0L7QvNCwPC9idXR0b24-JyArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0L7QsdC70L7QttC60LggKGFsdCknLCAnY29sbHMuJyArIGkgKyAnLmltZ0FsdCcsIGMuaW1nQWx0KSArICc8L2Rpdj48L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1JywgJ2NvbGxzLicgKyBpICsgJy5zZW9OYW1lJywgc2VvLm5hbWUpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1JywgJ2NvbGxzLicgKyBpICsgJy5zZW9EZXNjJywgc2VvLmRlc2NyaXB0aW9uLCAnYXJlYScpICsKICAgICAgICAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JrQkNCg0KLQntCn0JrQkCDQoyDQn9Cg0JjQnNCV0KDQkCAqLwogICAgaWYgKGNmZy5jYXJkLnJvd3MubGVuZ3RoIHx8IGNmZy5jYXJkLmhhc05vdGUpIHsKICAgICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enAtc2VjIj48c3VtbWFyeT7QmtCw0YDRgtC-0YfQutCwINGB0L_RgNCw0LLQsCDQvtGCINC_0YDQuNC80LXRgNCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPicgKwogICAgICAgICc8cCBjbGFzcz0iYXZ6cC1oaW50Ij7QktC40LTQvdCwINGC0L7Qu9GM0LrQviDQvdCwINC60L7QvNC_0YzRjtGC0LXRgNC1ICjRjdC60YDQsNC9INC-0YIgMTE4MCBweCkg0Lgg0LzQtdC90Y_QtdGC0YHRjyDQv9GA0Lgg0L_QtdGA0LXQutC70Y7Rh9C10L3QuNC4ICcgKwogICAgICAgICdTVFJFRVQgLyBGSUxNLiDQndCw0LfQstCw0L3QuNC1LCDQvtC_0LjRgdCw0L3QuNC1INC4INGG0LXQvdGDINC60LDRgNGC0L7Rh9C60LAg0LHQtdGA0ZHRgiDQuNC3INGA0LDQt9C00LXQu9CwIMKr0J3QsNCx0L7RgNGLINC4INGG0LXQvdGLwrssICcgKwogICAgICAgICfRh9C40YHQu9C-INC_0YDQtdGB0LXRgtC-0LIg0YHRh9C40YLQsNC10YIg0YHQsNC80LAg4oCUINC30LTQtdGB0Ywg0YLQvtC70YzQutC-INGB0YLRgNC-0LrQuCDQuCDQv9C-0LTQv9C40YHRjCDQv9C-0LQg0LrQvdC-0L_QutC-0LksINC-0LHRidC40LUg0LTQu9GPINC-0LHQtdC40YUg0LrQvtC70LvQtdC60YbQuNC5LjwvcD4nOwogICAgICBjZmcuY2FyZC5yb3dzLmZvckVhY2goZnVuY3Rpb24gKHIsIGkpIHsKICAgICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JyArIGZpZWxkKCfQodGC0YDQvtC60LAgJyArIChpICsgMSkgKyAnIOKAlCDQv9C-0LTQv9C40YHRjCcsICdjYXJkLnJvd3MuJyArIGkgKyAnLmxlZnQnLCByLmxlZnQpICsKICAgICAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgJyArIChpICsgMSkgKyAnIOKAlCDQt9C90LDRh9C10L3QuNC1JywgJ2NhcmQucm93cy4nICsgaSArICcucmlnaHQnLCByLnJpZ2h0KSArICc8L2Rpdj4nOwogICAgICB9KTsKICAgICAgaWYgKGNmZy5jYXJkLmhhc05vdGUpIHsKICAgICAgICBoICs9IGZpZWxkKCfQn9C-0LTQv9C40YHRjCDQv9C-0LQg0LrQvdC-0L_QutC-0LkgKNC_0L7RgdC70LUg0L3QtdGRIOKAlCDRgdGB0YvQu9C60LAgwqsnICsgZXNjKCgoY2ZnLmNvbGxzLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5mZWF0dXJlZDsgfSlbMF0pIHx8IHt9KS5uYW1lIHx8ICdDT01QTEVURScpICsgJyDQt9CwIOKApiDigr3Cuywg0L7QvdCwINGB0L7QsdC40YDQsNC10YLRgdGPINGB0LDQvNCwKScsICdjYXJkLm5vdGUnLCBjZmcuY2FyZC5ub3RlKTsKICAgICAgfQogICAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKICAgIH0KCiAgICAvKiDQqNCQ0J_QmtCQINCYINCi0JXQmtCh0KLQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enAtc2VjIj48c3VtbWFyeT7QqNCw0L_QutCwINC4INGC0LXQutGB0YLRizwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JyArIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log4oCUINGB0YLRgNC-0LrQsCAxJywgJ2hlcm8ubGluZTEnLCBjZmcuaGVyby5saW5lMSkgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDInLCAnaGVyby5saW5lMicsIGNmZy5oZXJvLmxpbmUyKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9Ch0YLRgNC-0LrQsCAzICjQvNC-0LbQvdC-ICZsdDtlbSZndDspJywgJ2hlcm8ubGluZTMnLCBjZmcuaGVyby5saW5lMykgKwogICAgICBmaWVsZCgn0JLRgdGC0YPQv9C40YLQtdC70YzQvdGL0Lkg0YLQtdC60YHRgicsICdoZXJvLmxlZGUnLCBjZmcuaGVyby5sZWRlLCAnYXJlYScpOwogICAgWyfQniDQutC-0LvQu9C10LrRhtC40LgnLCAn0J_RgNC-0YHQvNC-0YLRgCcsICfQmtC-0LvQu9C10LrRhtC40LgnLCAn0KfQsNGB0YLRi9C1INCy0L7Qv9GA0L7RgdGLJ10uZm9yRWFjaChmdW5jdGlvbiAobm0sIGkpIHsKICAgICAgdmFyIGwgPSBjZmcubGFiZWxzW2ldOyBpZiAoIWwpIHJldHVybjsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cC1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAgJyArIChpICsgMSksICdsYWJlbHMuJyArIGkgKyAnLmgyJywgbC5oMikgKwogICAgICAgIChsLmFzaWRlID8gZmllbGQoJ9Cf0L7QvNC10YLQutCwINGB0L_RgNCw0LLQsCcsICdsYWJlbHMuJyArIGkgKyAnLmFzaWRlJywgbC5hc2lkZSkgOiAnPGRpdj48L2Rpdj4nKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0L_RgNC40LfRi9Cy0LAgKNC80L7QttC90L4gJmx0O2JyJmd0OyDQuCAmbHQ7ZW0mZ3Q7KScsICdjdGEuaDInLCBjZmcuY3RhLmgyKSArCiAgICAgIGZpZWxkKCfQmtC90L7Qv9C60LAg0L_RgNC40LfRi9Cy0LAnLCAnY3RhLmJ0bicsIGNmZy5jdGEuYnRuKSArCiAgICAgIGZpZWxkKCfQodC90L7RgdC60LAg0LLQvdC40LfRgyAo0LzQvtC20L3QviBIVE1MKScsICdmb290Tm90ZScsIGNmZy5mb290Tm90ZSwgJ2FyZWEnKSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQniDQmtCe0JvQm9CV0JrQptCY0JggKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0JHQu9C-0LogwqvQniDQutC-0LvQu9C10LrRhtC40LjCuzwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4nICsKICAgICAgKGNmZy5jYXJkLnJvd3MubGVuZ3RoID8gJzxwIGNsYXNzPSJhdnpwLWhpbnQiPtCd0LAg0LrQvtC80L_RjNGO0YLQtdGA0LUgKNC-0YIgMTE4MCBweCkg0Y3RgtC-0YIg0LHQu9C-0Log0YHQutGA0YvRgiDigJQg0LXQs9C-INC30LDQvNC10L3Rj9C10YIg0LrQsNGA0YLQvtGH0LrQsCAnICsKICAgICAgJ9GB0L_RgNCw0LLQsCDQvtGCINC_0YDQuNC80LXRgNCwLiDQktC40LTQtdC9INC90LAg0YLQtdC70LXRhNC-0L3QtSDQuCDQv9C70LDQvdGI0LXRgtC1LjwvcD4nIDogJycpICsKICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMIDEnLCAnYWJvdXQudGV4dC5sYWJlbCcsIGNmZy5hYm91dC50ZXh0LmxhYmVsKSArCiAgICAgIGZpZWxkKCfQotC10LrRgdGCICjQvNC-0LbQvdC-IEhUTUwpJywgJ2Fib3V0LnRleHQuYm9keScsIGNmZy5hYm91dC50ZXh0LmJvZHksICdhcmVhJykgKwogICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0YwgMicsICdhYm91dC5zdGF0cy5sYWJlbCcsIGNmZy5hYm91dC5zdGF0cy5sYWJlbCk7CiAgICBjZmcuYWJvdXQuc3RhdHMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAocywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpwLXJvdyI-JyArIGZpZWxkKCfQp9C40YHQu9C-ICcgKyAoaSArIDEpLCAnYWJvdXQuc3RhdHMuaXRlbXMuJyArIGkgKyAnLnRhcmdldCcsIHMudGFyZ2V0KSArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC_0L7QtCDRh9C40YHQu9C-0LwnLCAnYWJvdXQuc3RhdHMuaXRlbXMuJyArIGkgKyAnLmxhYmVsJywgcy5sYWJlbCkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0J_QvtC00L_QuNGB0YwgMycsICdhYm91dC5jb21wYXQubGFiZWwnLCBjZmcuYWJvdXQuY29tcGF0LmxhYmVsKTsKICAgIGNmZy5hYm91dC5jb21wYXQucm93cy5mb3JFYWNoKGZ1bmN0aW9uIChyLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enAtcm93Ij4nICsgZmllbGQoJ9Ch0YLRgNC-0LrQsCAnICsgKGkgKyAxKSArICcg4oCUINGB0LvQtdCy0LAnLCAnYWJvdXQuY29tcGF0LnJvd3MuJyArIGkgKyAnLmxlZnQnLCByLmxlZnQpICsKICAgICAgICBmaWVsZCgn0KHRgtGA0L7QutCwICcgKyAoaSArIDEpICsgJyDigJQg0YHQv9GA0LDQstCwJywgJ2Fib3V0LmNvbXBhdC5yb3dzLicgKyBpICsgJy5yaWdodCcsIHIucmlnaHQpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCS0J7Qn9Cg0J7QodCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCS0L7Qv9GA0L7RgdGLINC4INC-0YLQstC10YLRiyAoJyArIGNmZy5mYXEubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6cC1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6cC1oaW50Ij7QntGC0LLQtdGCINC-0LTQuNC9OiDQvtC9INC20LUg0YPRhdC-0LTQuNGCINCyINGA0LDQt9C80LXRgtC60YMg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-LiAnICsKICAgICAgJ9Ci0LDQuiDRgtGA0LXQsdGD0LXRgiBHb29nbGUg4oCUINC_0LXRgNC10YHQutCw0Lcg0YHQstC-0LjQvNC4INGB0LvQvtCy0LDQvNC4INC90LUg0LfQsNGB0YfQuNGC0YvQstCw0LXRgtGB0Y8uPC9wPic7CiAgICBjZmcuZmFxLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cC1jYXJkIj48aDQ-0JLQvtC_0YDQvtGBICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9CS0L7Qv9GA0L7RgScsICdmYXEuJyArIGkgKyAnLnEnLCBmLnEpICsKICAgICAgICBmaWVsZCgn0J7RgtCy0LXRgiAo0LzQvtC20L3QviBIVE1MKScsICdmYXEuJyArIGkgKyAnLmEnLCBmLmEsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KPQodCi0JDQndCe0JLQmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6cC1zZWMiPjxzdW1tYXJ5PtCY0L3RgdGC0YDRg9C60YbQuNGPINC_0L4g0YPRgdGC0LDQvdC-0LLQutC1PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enAtaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0L3QsCDQutC90L7Qv9C60LUnLCAnaW5zdGFsbC5idG4nLCBjZmcuaW5zdGFsbC5idG4pOwogICAgY2ZnLmluc3RhbGwuZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGcsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6cC1jYXJkIj48aDQ-0KDQsNC30LTQtdC7ICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enAtcm93Ij4nICsgZmllbGQoJ9Cc0LXRgtC60LAnLCAnaW5zdGFsbC5ncm91cHMuJyArIGkgKyAnLnRhZycsIGcudGFnKSArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdpbnN0YWxsLmdyb3Vwcy4nICsgaSArICcuaDQnLCBnLmg0KSArICc8L2Rpdj4nOwogICAgICBnLnN0ZXBzLmZvckVhY2goZnVuY3Rpb24gKHMsIGspIHsKICAgICAgICBoICs9IGZpZWxkKCfQqNCw0LMgwqsnICsgZXNjKHMubikgKyAnwrsgKNC80L7QttC90L4gSFRNTCknLCAnaW5zdGFsbC5ncm91cHMuJyArIGkgKyAnLnN0ZXBzLicgKyBrICsgJy5odG1sJywgcy5odG1sLCAnYXJlYScpOwogICAgICB9KTsKICAgICAgaWYgKGcubm90ZSkgaCArPSBmaWVsZCgn0J_RgNC40LzQtdGH0LDQvdC40LUgKNC80L7QttC90L4gSFRNTCknLCAnaW5zdGFsbC5ncm91cHMuJyArIGkgKyAnLm5vdGUnLCBnLm5vdGUsICdhcmVhJyk7CiAgICAgIGggKz0gJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9Ch0YLRgNC-0LrQsCDQstC90LjQt9GDINC40L3RgdGC0YDRg9C60YbQuNC4ICjQvNC-0LbQvdC-IEhUTUwpJywgJ2luc3RhbGwuZm9vdGVyJywgY2ZnLmluc3RhbGwuZm9vdGVyLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCg0JDQl9Cc0JXQotCa0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpwLXNlYyI-PHN1bW1hcnk-0KDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsjwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpwLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpwLWhpbnQiPtCt0YLQviDQvdC10LLQuNC00LjQvNCw0Y8g0YfQsNGB0YLRjCDRgdGC0YDQsNC90LjRhtGLLiDQndC1INC_0LjRiNC40YLQtSDQt9C00LXRgdGMINGC0L7Qs9C-LCDRh9C10LPQviDQvdC10YIg0L3QsCDRgdCw0LzQvtC5INGB0YLRgNCw0L3QuNGG0LUuPC9wPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlTmFtZScsIGNmZy5zZW8ucGFnZU5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsICdzZW8ucGFnZURlc2NyaXB0aW9uJywgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPC9kaXY-PGRpdiBpZD0iYXZ6cC1mb290Ij4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enAtYiBwIiBpZD0iYXZ6cC1idWlsZCI-0KHQvtCx0YDQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enAtYiIgaWQ9ImF2enAtdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAgICc8c3BhbiBpZD0iYXZ6cC1tc2ciPjwvc3Bhbj48L2Rpdj4nICsKICAgICAgJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAyMHB4IDE4cHgiPjx0ZXh0YXJlYSBpZD0iYXZ6cC1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgICByb290LmlubmVySFRNTCA9IGg7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpwLWNsb3NlJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcm9vdC5yZW1vdmUoKTsgfTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGlmICghcCkgcmV0dXJuOwogICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgaWYgKHByZXYpIHsgcHJldi5jbGFzc0xpc3QucmVtb3ZlKCdiYWQnKTsgcHJldi5zcmMgPSBlLnRhcmdldC52YWx1ZTsgfQogICAgfSk7CgogICAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINC60LDQtNGA0LAg0LjQtyDQsNC70YzQsdC-0LzQsCAtLS0tLS0tLS0tICovCgogICAgdmFyIHNob3RDYWNoZSA9IHt9OwogICAgZnVuY3Rpb24gYWJzKHUpIHsKICAgICAgaWYgKCF1KSByZXR1cm4gJyc7CiAgICAgIGlmICh1LmluZGV4T2YoJy8vJykgPT09IDApIHJldHVybiAnaHR0cHM6JyArIHU7CiAgICAgIGlmICh1LmluZGV4T2YoJy8nKSA9PT0gMCkgcmV0dXJuIGxvY2F0aW9uLm9yaWdpbiArIHU7CiAgICAgIHJldHVybiB1OwogICAgfQogICAgZnVuY3Rpb24gZnJvbVNyY3NldChzZXQsIHNyYykgewogICAgICBpZiAoIXNldCkgeyB2YXIgdSA9IGFicyhzcmMpOyByZXR1cm4geyBmdWxsOiB1LCBzbWFsbDogdSB9OyB9CiAgICAgIHZhciBsaXN0ID0gc2V0LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgdmFyIHAgPSB4LnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgICAgcmV0dXJuIHsgdTogYWJzKHBbMF0pLCB3OiBwYXJzZUludChwWzFdLCAxMCkgfHwgMCB9OwogICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudTsgfSk7CiAgICAgIGlmICghbGlzdC5sZW5ndGgpIHsgdmFyIHYgPSBhYnMoc3JjKTsgcmV0dXJuIHsgZnVsbDogdiwgc21hbGw6IHYgfTsgfQogICAgICB2YXIgYmlnID0gbGlzdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudyAtIGEudzsgfSk7CiAgICAgIHZhciBzbWFsbCA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLncgLSBiLnc7IH0pOwogICAgICByZXR1cm4gewogICAgICAgIGZ1bGw6IChiaWcuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLncgPD0gTUFYVzsgfSlbMF0gfHwgYmlnW2JpZy5sZW5ndGggLSAxXSkudSwKICAgICAgICBzbWFsbDogKHNtYWxsLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53ID49IDI4MDsgfSlbMF0gfHwgc21hbGxbMF0pLnUKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHNob3RzRnJvbSh1cmwpIHsKICAgICAgaWYgKHNob3RDYWNoZVt1cmxdKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNob3RDYWNoZVt1cmxdKTsKICAgICAgcmV0dXJuIGZldGNoKHVybCArICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgJ3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICAgIHZhciBzZWVuID0ge30sIG91dCA9IFtdOwogICAgICAgICAgYWxsKGRvYywgJ2ltZycpLmZvckVhY2goZnVuY3Rpb24gKGltKSB7CiAgICAgICAgICAgIHZhciBzZXQgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCAnJzsKICAgICAgICAgICAgdmFyIHMgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSB8fCAnJzsKICAgICAgICAgICAgaWYgKHNldC5pbmRleE9mKCdpLndmb2xpby5ydScpIDwgMCAmJiBzLmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwKSByZXR1cm47CiAgICAgICAgICAgIHZhciBwYWlyID0gZnJvbVNyY3NldChzZXQsIHMpOwogICAgICAgICAgICBpZiAoIXBhaXIuZnVsbCB8fCBzZWVuW3BhaXIuZnVsbF0pIHJldHVybjsKICAgICAgICAgICAgc2VlbltwYWlyLmZ1bGxdID0gMTsKICAgICAgICAgICAgb3V0LnB1c2gocGFpcik7CiAgICAgICAgICB9KTsKICAgICAgICAgIHNob3RDYWNoZVt1cmxdID0gb3V0OwogICAgICAgICAgcmV0dXJuIG91dDsKICAgICAgICB9KTsKICAgIH0KCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNob29zZScpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgdmFyIHBhbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgcGFuZS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO2luc2V0OjglO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7ei1pbmRleDoyMTQ3NDgzNjQ3OycgKwogICAgICAgICdwYWRkaW5nOjE2cHg7b3ZlcmZsb3c6YXV0bztib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjQpJzsKICAgICAgcGFuZS5pbm5lckhUTUwgPSAnPHAgc3R5bGU9Im1hcmdpbjowIDAgMTBweCI-0JDQtNGA0LXRgSDRgdGC0YDQsNC90LjRhtGLINGBINC60LDQtNGA0LDQvNC4OjwvcD4nICsKICAgICAgICAnPGlucHV0IGlkPSJhdnpwLXNyYyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHgiICcgKwogICAgICAgICd2YWx1ZT0iJyArIGVzYyhzaG90Q2FjaGUuX19sYXN0IHx8ICdodHRwczovL2F2YW56YXRvLnJ1L3ByZXNldHMtcHJpbWVyeScpICsgJyI-JyArCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW46MTBweCAwIj48YnV0dG9uIGNsYXNzPSJhdnpwLWIgcCIgaWQ9ImF2enAtbG9hZCI-0J_QvtC60LDQt9Cw0YLRjCDQutCw0LTRgNGLPC9idXR0b24-ICcgKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpwLWIiIGlkPSJhdnpwLWNhbmNlbCI-0J7RgtC80LXQvdCwPC9idXR0b24-PC9wPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpwLWdyaWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvZGl2Pic7CiAgICAgIHJvb3QuYXBwZW5kQ2hpbGQocGFuZSk7CiAgICAgIHBhbmUucXVlcnlTZWxlY3RvcignI2F2enAtY2FuY2VsJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcGFuZS5yZW1vdmUoKTsgfTsKICAgICAgcGFuZS5xdWVyeVNlbGVjdG9yKCcjYXZ6cC1sb2FkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgdXJsID0gcGFuZS5xdWVyeVNlbGVjdG9yKCcjYXZ6cC1zcmMnKS52YWx1ZS50cmltKCk7CiAgICAgICAgaWYgKCF1cmwpIHJldHVybjsKICAgICAgICBzaG90Q2FjaGUuX19sYXN0ID0gdXJsOwogICAgICAgIHZhciBoZWFkID0gcGFuZS5xdWVyeVNlbGVjdG9yKCdwJyk7CiAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQl9Cw0LPRgNGD0LbQsNGOICcgKyB1cmwgKyAn4oCmJzsKICAgICAgICBzaG90c0Zyb20odXJsKS50aGVuKGZ1bmN0aW9uIChzaG90cykgewogICAgICAgICAgdmFyIGdyaWQgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJy5hdnpwLWdyaWQnKTsKICAgICAgICAgIGlmICghc2hvdHMubGVuZ3RoKSB7IGhlYWQudGV4dENvbnRlbnQgPSAn0J3QsCDRgdGC0YDQsNC90LjRhtC1ICcgKyB1cmwgKyAnINC60LDQtNGA0L7QsiDQvdC1INC90LDRiNC70L7RgdGMLic7IHJldHVybjsgfQogICAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQktGL0LHQtdGA0LjRgtC1INC60LDQtNGAICgnICsgc2hvdHMubGVuZ3RoICsgJyknOwogICAgICAgICAgZ3JpZC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICBncmlkLmlubmVySFRNTCA9ICcnOwogICAgICAgICAgc2hvdHMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWd1cmUnKTsKICAgICAgICAgICAgdmFyIGltID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CiAgICAgICAgICAgIGltLnNyYyA9IGl0LnNtYWxsOyBpbS5sb2FkaW5nID0gJ2xhenknOwogICAgICAgICAgICBmLmFwcGVuZENoaWxkKGltKTsKICAgICAgICAgICAgZi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBpbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W2RhdGEtcD0iJyArIHAgKyAnIl0nKTsKICAgICAgICAgICAgICBpZiAoaW5wKSBpbnAudmFsdWUgPSBpdC5mdWxsOwogICAgICAgICAgICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgcCArICciXScpOwogICAgICAgICAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGl0LmZ1bGw7CiAgICAgICAgICAgICAgcGFuZS5yZW1vdmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZ3JpZC5hcHBlbmRDaGlsZChmKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgIGhlYWQudGV4dENvbnRlbnQgPSAn0KHRgtGA0LDQvdC40YbQsCDQvdC1INC-0YLQutGA0YvQu9Cw0YHRjDogJyArIGVyci5tZXNzYWdlOwogICAgICAgIH0pOwogICAgICB9OwogICAgfSk7CgogICAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgCDQt9C90LDRh9C10L3QuNC5IC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBzZXRQYXRoKG9iaiwgcGF0aCwgdmFsKSB7CiAgICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKSwgbyA9IG9iaiwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgICBvW3BhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXSA9IHZhbDsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbGxlY3QoKSB7CiAgICAgIHZhciBkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgc2V0UGF0aChkLCBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpLCBlbC52YWx1ZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZDsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgICB2YXIgdGV4dHMgPSBbXSwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgICAgfQogICAgICBpZiAoIXRleHRzLmxlbmd0aCkgeyBlbC5hcHBlbmRDaGlsZChlbC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHYpKTsgcmV0dXJuOyB9CiAgICAgIHZhciBtYWluID0gbnVsbDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG1haW4gPSB0ZXh0c1tpXTsgYnJlYWs7IH0KICAgICAgfQogICAgICBpZiAoIW1haW4pIG1haW4gPSB0ZXh0c1swXTsKICAgICAgdmFyIHJhdyA9IG1haW4ubm9kZVZhbHVlOwogICAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgICB2YXIgcG9zdCA9IChyYXcubWF0Y2goL1xzKiQvKSB8fCBbJyddKVswXTsKICAgICAgaWYgKHJhdy50cmltKCkgPT09ICcnKSB7IHByZSA9ICcnOyBwb3N0ID0gJyc7IH0KICAgICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldICE9PSBtYWluICYmIHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldEh0bWwoZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwuaW5uZXJIVE1MID0gdjsgfQoKICAgIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuZGlzcGxheSAuaW5uZXInKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpLCBkLmhlcm8uZXllYnJvdyk7CiAgICAgIGlmIChpbm5lcnNbMF0pIHNldFRleHQoaW5uZXJzWzBdLCBkLmhlcm8ubGluZTEpOwogICAgICBpZiAoaW5uZXJzWzFdKSBzZXRUZXh0KGlubmVyc1sxXSwgZC5oZXJvLmxpbmUyKTsKICAgICAgaWYgKGlubmVyc1syXSkgc2V0SHRtbChpbm5lcnNbMl0sIGQuaGVyby5saW5lMyk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmxlZGUnKSwgZC5oZXJvLmxlZGUpOwoKICAgICAgdmFyIGxhYmVscyA9IGFsbChzY29wZSwgJy5zZWN0aW9uLWxhYmVsJyk7CiAgICAgIGQubGFiZWxzLmZvckVhY2goZnVuY3Rpb24gKGwsIGkpIHsKICAgICAgICBpZiAoIWxhYmVsc1tpXSkgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGxhYmVsc1tpXSwgJ2gyJyksIGwuaDIpOwogICAgICAgIGlmIChsLmFzaWRlKSBzZXRUZXh0KG9uZShsYWJlbHNbaV0sICcuc2wtYXNpZGUnKSwgbC5hc2lkZSk7CiAgICAgIH0pOwoKICAgICAgdmFyIGJsb2NrcyA9IGFsbChzY29wZSwgJy5obS1ibG9jaycpOwogICAgICBpZiAoYmxvY2tzWzBdKSB7IHNldFRleHQob25lKGJsb2Nrc1swXSwgJy5obS1sYWJlbCcpLCBkLmFib3V0LnRleHQubGFiZWwpOyBzZXRIdG1sKG9uZShibG9ja3NbMF0sICdwJyksIGQuYWJvdXQudGV4dC5ib2R5KTsgfQogICAgICBpZiAoYmxvY2tzWzFdKSB7CiAgICAgICAgc2V0VGV4dChvbmUoYmxvY2tzWzFdLCAnLmhtLWxhYmVsJyksIGQuYWJvdXQuc3RhdHMubGFiZWwpOwogICAgICAgIGFsbChibG9ja3NbMV0sICcuaG0tc3RhdCcpLmZvckVhY2goZnVuY3Rpb24gKHMsIGkpIHsKICAgICAgICAgIHZhciB2ID0gZC5hYm91dC5zdGF0cy5pdGVtc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgICB2YXIgbiA9IG9uZShzLCAnLmhtLXN0YXQtbnVtJyk7CiAgICAgICAgICBpZiAobiAmJiB2LnRhcmdldCkgbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0Jywgdi50YXJnZXQpOwogICAgICAgICAgc2V0VGV4dChvbmUocywgJy5obS1zdGF0LWxibCcpLCB2LmxhYmVsKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoYmxvY2tzWzJdKSB7CiAgICAgICAgc2V0VGV4dChvbmUoYmxvY2tzWzJdLCAnLmhtLWxhYmVsJyksIGQuYWJvdXQuY29tcGF0LmxhYmVsKTsKICAgICAgICBhbGwoYmxvY2tzWzJdLCAnLmhtLWxpc3QgLnJvdycpLmZvckVhY2goZnVuY3Rpb24gKHIsIGkpIHsKICAgICAgICAgIHZhciB2ID0gZC5hYm91dC5jb21wYXQucm93c1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgICB2YXIgc3AgPSBhbGwociwgJ3NwYW4nKTsKICAgICAgICAgIHNldFRleHQoc3BbMF0sIHYubGVmdCk7IHNldFRleHQoc3BbMV0sIHYucmlnaHQpOwogICAgICAgIH0pOwogICAgICB9CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5zZWN0aW9uLWhlYWQgLmxhYmVsJyksIGQuY29sbEhlYWQubGFiZWwpOwogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5zZWN0aW9uLWhlYWQgLmgyJyksIGQuY29sbEhlYWQuaDIpOwoKICAgICAgLyog0YHRh9GR0YLRh9C40LrQuCDQvdCw0LQg0L_RgNC-0YHQvNC-0YLRgNC-0Lwg4oCUINC_0L4g0YfQuNGB0LvRgyDQv9GA0LXRgdC10YLQvtCyLCDRgdGH0LjRgtCw0YLRjCDQstGA0YPRh9C90YPRjiDQvdC10LfQsNGH0LXQvCAqLwogICAgICB2YXIgdGFicyA9IGFsbChzY29wZSwgJyNhdnAtdGFicyAuY29sbC10YWInKTsKICAgICAgWydzdHJlZXQnLCAnZmlsbSddLmZvckVhY2goZnVuY3Rpb24gKGNvbCwgaSkgewogICAgICAgIGlmICghdGFic1tpXSkgcmV0dXJuOwogICAgICAgIHZhciBjID0gb25lKHRhYnNbaV0sICcuY29sbC10YWItY291bnQnKTsKICAgICAgICBpZiAoYykgYy50ZXh0Q29udGVudCA9IFN0cmluZygoZC5wcmVzZXRzW2NvbF0gfHwgW10pLmxlbmd0aCk7CiAgICAgIH0pOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcjYXZwLWluc3RhbGwtYnRuIHNwYW46bm90KC5pY29uKScpLCBkLmluc3RhbGwuYnRuKTsKICAgICAgYWxsKHNjb3BlLCAnLmluc3RhbGwtZ3JvdXAnKS5mb3JFYWNoKGZ1bmN0aW9uIChnLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmluc3RhbGwuZ3JvdXBzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShnLCAnLnBsYXRmb3JtLXRhZycpLCB2LnRhZyk7CiAgICAgICAgc2V0VGV4dChvbmUoZywgJ2g0JyksIHYuaDQpOwogICAgICAgIGFsbChnLCAnLmluc3RhbGwtc3RlcCcpLmZvckVhY2goZnVuY3Rpb24gKHMsIGspIHsKICAgICAgICAgIGlmICh2LnN0ZXBzW2tdKSBzZXRIdG1sKHMsIHYuc3RlcHNba10uaHRtbCk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHYubm90ZSkgc2V0SHRtbChvbmUoZywgJy5pbnN0YWxsLW5vdGUnKSwgdi5ub3RlKTsKICAgICAgfSk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmluc3RhbGwtZm9vdGVyJyksIGQuaW5zdGFsbC5mb290ZXIpOwoKICAgICAgYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuZmFxW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5mYXEtcS10ZXh0JyksIHYucSk7CiAgICAgICAgc2V0SHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSwgdi5hKTsKICAgICAgfSk7CgogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5jdGEgLmgyJyksIGQuY3RhLmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmN0YSAuYnRuIC5idG4tbGFiZWwgc3BhbicpLmZvckVhY2goZnVuY3Rpb24gKHMpIHsgc2V0VGV4dChzLCBkLmN0YS5idG4pOyB9KTsKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuZm9vdC1ub3RlJyksIGQuZm9vdE5vdGUpOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0L_RgNCw0LLQutCwINC80LDRgdGB0LjQstC-0LIg0LIg0YHQutGA0LjQv9GC0LUgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGpzU3RyKHMpIHsgcmV0dXJuICInIiArIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpLnJlcGxhY2UoL1xcL2csICdcXFxcJykucmVwbGFjZSgvJy9nLCAiXFwnIikgKyAiJyI7IH0KCiAgICBmdW5jdGlvbiBwYWQocywgbikgeyB3aGlsZSAocy5sZW5ndGggPCBuKSBzICs9ICcgJzsgcmV0dXJuIHM7IH0KCiAgICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgICAgdmFyIG1pc3NlZCA9IFtdOwoKICAgICAgaWYgKCEvdmFyIFBSRVNFVFMgPSBcey8udGVzdChzcmMpKSBtaXNzZWQucHVzaCgn0YHQv9C40YHQvtC6INC_0YDQtdGB0LXRgtC-0LInKTsKICAgICAgZWxzZSB7CiAgICAgICAgdmFyIGNvbHMgPSBbJ3N0cmVldCcsICdmaWxtJ10ubWFwKGZ1bmN0aW9uIChjb2wpIHsKICAgICAgICAgIHZhciBsaXN0ID0gZC5wcmVzZXRzW2NvbF0gfHwgW107CiAgICAgICAgICB2YXIgd05hbWUgPSAwLCB3RGVzYyA9IDA7CiAgICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKHApIHsKICAgICAgICAgICAgdmFyIGEgPSAoanNTdHIocC5uYW1lKSArICcsJykubGVuZ3RoLCBiID0gKGpzU3RyKHAuZGVzYykgKyAnLCcpLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGEgPiB3TmFtZSkgd05hbWUgPSBhOwogICAgICAgICAgICBpZiAoYiA-IHdEZXNjKSB3RGVzYyA9IGI7CiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciByb3dzID0gbGlzdC5tYXAoZnVuY3Rpb24gKHApIHsKICAgICAgICAgICAgcmV0dXJuICcgICAgICAgICAgICB7IGlkOicgKyBwYWQoanNTdHIocC5pZCkgKyAnLCcsIDYpICsKICAgICAgICAgICAgICAnIG5hbWU6JyArIHBhZChqc1N0cihwLm5hbWUpICsgJywnLCB3TmFtZSArIDEpICsKICAgICAgICAgICAgICAnIGRlc2M6JyArIHBhZChqc1N0cihwLmRlc2MpICsgJywnLCB3RGVzYyArIDEpICsKICAgICAgICAgICAgICAnIGJlZm9yZTonICsganNTdHIocC5iZWZvcmUpICsgJywgICAgYWZ0ZXI6JyArIGpzU3RyKHAuYWZ0ZXIpICsgJyB9JzsKICAgICAgICAgIH0pLmpvaW4oJyxcbicpOwogICAgICAgICAgcmV0dXJuICcgICAgICAgICcgKyBjb2wgKyAnOiBbXG4nICsgcm93cyArICdcbiAgICAgICAgXSc7CiAgICAgICAgfSkuam9pbignLFxuJyk7CiAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoL3ZhciBQUkVTRVRTID0gXHtbXHNcU10qP1xuXHN7NH1cfTsvLAogICAgICAgICAgJ3ZhciBQUkVTRVRTID0ge1xuJyArIGNvbHMgKyAnXG4gICAgfTsnKTsKICAgICAgfQoKICAgICAgaWYgKCEvdmFyIENPTExFQ1RJT05TID0gXFsvLnRlc3Qoc3JjKSkgbWlzc2VkLnB1c2goJ9GB0L_QuNGB0L7QuiDQvdCw0LHQvtGA0L7QsicpOwogICAgICBlbHNlIHsKICAgICAgICB2YXIgcm93czIgPSAoZC5jb2xscyB8fCBbXSkubWFwKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICByZXR1cm4gJyAgICAgICAgeyBrZXk6JyArIGpzU3RyKGMua2V5KSArICcsIG5hbWU6JyArIGpzU3RyKGMubmFtZSkgKwogICAgICAgICAgICAnLCBlbTonICsganNTdHIoYy5lbSkgKyAnLCBkZXNjOicgKyBqc1N0cihjLmRlc2MpICsKICAgICAgICAgICAgJywgcHJpY2U6JyArIGpzU3RyKGRpZ2l0cyhjLnByaWNlKSkgKwogICAgICAgICAgICAnLCBvbGRQcmljZTonICsgKGMub2xkUHJpY2UgPyBqc1N0cihjLm9sZFByaWNlKSA6ICdudWxsJykgKwogICAgICAgICAgICAnLCBpbWc6JyArIGpzU3RyKGMuaW1nKSArICcsIGltZ0FsdDonICsganNTdHIoYy5pbWdBbHQpICsKICAgICAgICAgICAgKGMuZmVhdHVyZWQgPyAnLCBmZWF0dXJlZDp0cnVlJyA6ICcnKSArICcgfSc7CiAgICAgICAgfSkuam9pbignLFxuJyk7CiAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoL3ZhciBDT0xMRUNUSU9OUyA9IFxbW1xzXFNdKj9cblxzezR9XF07LywKICAgICAgICAgICd2YXIgQ09MTEVDVElPTlMgPSBbXG4nICsgcm93czIgKyAnXG4gICAgXTsnKTsKICAgICAgfQoKICAgICAgLyog0JrQsNGA0YLQvtGH0LrQsCDRgyDQv9GA0LjQvNC10YDQsDog0LzQtdC90Y_QtdC8INGC0L7Qu9GM0LrQviDRgtC-LCDRh9GC0L4g0L_QvtC_0YDQsNCy0LjQu9C4INCyINGE0L7RgNC80LUsCiAgICAgICAgINC40L3QsNGH0LUg0LjRgdGF0L7QtNC90LjQuiDQvtGB0YLQsNGR0YLRgdGPINGB0LjQvNCy0L7QuyDQsiDRgdC40LzQstC-0LsgKi8KICAgICAgdmFyIGNhcmQgPSBkLmNhcmQgfHwgeyByb3dzOiBbXSB9OwogICAgICB2YXIgb3JpZyA9IHJlYWRDYXJkKHNyYyk7CiAgICAgIGlmIChjYXJkLnJvd3MubGVuZ3RoICYmIG9yaWcucm93cy5sZW5ndGggIT09IGNhcmQucm93cy5sZW5ndGgpIG1pc3NlZC5wdXNoKCfRgdGC0YDQvtC60Lgg0LrQsNGA0YLQvtGH0LrQuCDRgyDQv9GA0LjQvNC10YDQsCcpOwogICAgICBlbHNlIGlmIChjYXJkLnJvd3MubGVuZ3RoKSB7CiAgICAgICAgdmFyIGsgPSAwOwogICAgICAgIENBUkRfUk9XX1JFLmxhc3RJbmRleCA9IDA7CiAgICAgICAgc3JjID0gc3JjLnJlcGxhY2UoQ0FSRF9ST1dfUkUsIGZ1bmN0aW9uIChhbGwwLCBhLCBiKSB7CiAgICAgICAgICB2YXIgdiA9IGNhcmQucm93c1trXSwgbyA9IG9yaWcucm93c1trXTsgaysrOwogICAgICAgICAgaWYgKCF2IHx8ICh2LmxlZnQgPT09IG8ubGVmdCAmJiB2LnJpZ2h0ID09PSBvLnJpZ2h0KSkgcmV0dXJuIGFsbDA7CiAgICAgICAgICByZXR1cm4gIic8ZGl2IGNsYXNzPVwidmEtcm93XCI-PHNwYW4-IiArIHRleHRUb0xpdCh2LmxlZnQpICsgJzwvc3Bhbj48c3Bhbj4nICsgdGV4dFRvTGl0KHYucmlnaHQpICsgIjwvc3Bhbj48L2Rpdj4nIjsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY2FyZC5oYXNOb3RlKSB7CiAgICAgICAgaWYgKCFvcmlnLmhhc05vdGUpIG1pc3NlZC5wdXNoKCfQv9C-0LTQv9C40YHRjCDQv9C-0LQg0LrQvdC-0L_QutC-0Lkg0LrQsNGA0YLQvtGH0LrQuCcpOwogICAgICAgIGVsc2UgaWYgKGNhcmQubm90ZSAhPT0gb3JpZy5ub3RlKSB7CiAgICAgICAgICBzcmMgPSBzcmMucmVwbGFjZShDQVJEX05PVEVfUkUsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuICInPHAgY2xhc3M9XCJ2YS1ub3RlXCI–IiArIHRleHRUb0xpdChjYXJkLm5vdGUpICsgJzxhIGhyZWY9IiNhdnAtY29sbHMiPic7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB7IHRleHQ6IHNyYywgbWlzc2VkOiBtaXNzZWQgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGJ1aWxkTGQoZG9jLCBzY29wZSwgZCkgewogICAgICB2YXIgcyA9IG93bkxkKGRvYyk7CiAgICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIgbGQranNvbicgfTsKICAgICAgdmFyIG87CiAgICAgIHRyeSB7IG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOyB9CiAgICAgIGNhdGNoIChlKSB7IHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ2xkK2pzb24g0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlIH07IH0KICAgICAgdmFyIGcgPSBvWydAZ3JhcGgnXSB8fCBbXTsKICAgICAgc3luY0Nhbm9uKGcpOwoKICAgICAgdmFyIHBhZ2UgPSBnLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnOyB9KVswXTsKICAgICAgaWYgKHBhZ2UpIHsKICAgICAgICBwYWdlLm5hbWUgPSBkLnNlby5wYWdlTmFtZTsKICAgICAgICBwYWdlLmRlc2NyaXB0aW9uID0gZC5zZW8ucGFnZURlc2NyaXB0aW9uOwogICAgICAgIHBhZ2UuZGF0ZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKICAgICAgfQoKICAgICAgLyog0KLQvtCy0LDRgNGLOiDRhtC10L3QsCDQuCDQvtCx0LvQvtC20LrQsCDigJQg0LjQtyDQutCw0YDRgtC-0YfQtdC6INC90LAg0YHRgtGA0LDQvdC40YbQtSwg0YDQsNC30L7QudGC0LjRgdGMINC40Lwg0L3QtdGH0LXQvCAqLwogICAgICB2YXIgYnlLZXkgPSB7fTsKICAgICAgKGQuY29sbHMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgYnlLZXlbYy5rZXldID0gYzsgfSk7CiAgICAgIGcuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChuWydAdHlwZSddICE9PSAnUHJvZHVjdCcpIHJldHVybjsKICAgICAgICB2YXIga2V5ID0gU3RyaW5nKG5bJ0BpZCddKS5zcGxpdCgnI3Byb2R1Y3QtJylbMV07CiAgICAgICAgdmFyIGMgPSBieUtleVtrZXldOwogICAgICAgIGlmICghYykgcmV0dXJuOwogICAgICAgIGlmIChjLnNlb05hbWUpIG4ubmFtZSA9IGMuc2VvTmFtZTsKICAgICAgICBpZiAoYy5zZW9EZXNjKSBuLmRlc2NyaXB0aW9uID0gYy5zZW9EZXNjOwogICAgICAgIG4uaW1hZ2UgPSBjLmltZzsKICAgICAgICBpZiAobi5vZmZlcnMpIG4ub2ZmZXJzLnByaWNlID0gZGlnaXRzKGMucHJpY2UpOwogICAgICB9KTsKCiAgICAgIC8qINCS0L7Qv9GA0L7RgdGLIOKAlCDQuNC3INCy0LjQtNC40LzQvtCz0L4g0YLQtdC60YHRgtCwINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQviAqLwogICAgICB2YXIgZmFxID0gZy5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJzsgfSlbMF07CiAgICAgIGlmIChmYXEpIHsKICAgICAgICBmYXEubWFpbkVudGl0eSA9IGFsbChzY29wZSwgJy5mYXEtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdAdHlwZSc6ICdRdWVzdGlvbicsCiAgICAgICAgICAgIG5hbWU6IHRleHRXaXRoQnJlYWtzKG9uZShpdCwgJy5mYXEtcS10ZXh0JykpLAogICAgICAgICAgICBhY2NlcHRlZEFuc3dlcjogeyAnQHR5cGUnOiAnQW5zd2VyJywgdGV4dDogdGV4dFdpdGhCcmVha3Mob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH0KICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwsIGlkOiBzLmlkIHx8ICcnIH07CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgNC60LAgLS0tLS0tLS0tLSAqLwoKICAgIC8qINCa0YPRgdC60Lgg0YTQvtGA0LzRiyDQt9Cw0LrQsNC30LA6INC10YHQu9C4INGF0L7RgtGMINC-0LTQvdC-0LPQviDQvdC10YIg4oCUINGB0LHQvtGA0LrQsCDQvtGC0LzQtdC90Y_QtdGC0YHRjy4KICAgICAgINCt0YLQviDQvdC1INGD0LrRgNCw0YjQtdC90LjQtSwg0LAg0YPRgdC70L7QstC40LU6INGH0LXRgNC10Lcg0YTQvtGA0LzRgyDQv9C40YjRg9GCINC60LvQuNC10L3RgtGLLiAqLwogICAgdmFyIEZPUk1fUEFSVFMgPSBbCiAgICAgICdmdW5jdGlvbnMueWFuZGV4Y2xvdWQubmV0JywKICAgICAgJ0dBU19OT1RJRllfVVJMJywKICAgICAgJ2Z1bmN0aW9uIHNhdmVUb0ZpcmViYXNlJywKICAgICAgJ2Z1bmN0aW9uIGhhbmRsZVN1Ym1pdCcsCiAgICAgICdUR19VU0VSTkFNRV9SRScsCiAgICAgICdfc3VibWl0dGluZycsCiAgICAgICdhdi1tb2RhbC1vdmVybGF5JywKICAgICAgJ2F2cC10by1zdGVwMicKICAgIF07CgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcuYXYtcHJlc2V0cycpOwogICAgICAgIHZhciBzdHlsZSA9IGFsbChkb2MsICdzdHlsZScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcuYXYtcHJlc2V0cyAudmlld2VyLXdyYXAnKSA-IC0xOyB9KVswXTsKICAgICAgICB2YXIgc2NyaXB0ID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCd2YXIgUFJFU0VUUycpID4gLTE7IH0pWzBdOwogICAgICAgIHZhciBmb250TGluayA9IGRvYy5xdWVyeVNlbGVjdG9yKCdsaW5rW2hyZWYqPSJjc3MyP2ZhbWlseT0iXScpOwoKICAgICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICAgIGlmICghc2NvcGUpIG1pc3NpbmcucHVzaCgn0LHQu9C-0LogLmF2LXByZXNldHMnKTsKICAgICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICAvKiB2MyDCtyDRgdGC0YDQsNC90LjRhtCwIHYzINCx0LXQtyBHb29nbGUgRm9udHM6INGI0YDQuNGE0YLRiyDQuCDQt9C90LDRh9C60Lgg0LLRiNC40YLRiyDQsiA8c3R5bGU-INC4IDxzY3JpcHQ-INCx0LvQvtC60LAgKi8KICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgICAgd3JpdGVBbGwoc2NvcGUsIGQpOwogICAgICAgIHZhciBzYyA9IHBhdGNoU2NyaXB0KHNjcmlwdC50ZXh0Q29udGVudCwgZCk7CiAgICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgICAvKiDQodGC0YDQvtC60LggPGhlYWQ-INCx0LXRgNGR0Lwg0LjQtyDQodCQ0JzQntCT0J4g0JHQm9Ce0JrQkCwg0LAg0L3QtSDQv9C-0LjRgdC60L7QvCDQv9C-INCy0YHQtdC5INGB0YLRgNCw0L3QuNGG0LU6CiAgICAgICAgICAgd2ZvbGlvINC00LXRgNC20LjRgiDQsiA8aGVhZD4g0YHQstC-0LggcHJlY29ubmVjdCDQuCBwcmVsb2FkLCDQuCDRgdC-0LHQuNGA0LDRgtGMINC40YUKICAgICAgICAgICDRgNC10LPRg9C70Y_RgNC60L7QuSDQv9C-INC00L7QutGD0LzQtdC90YLRgyDQt9C90LDRh9C40YIg0L3QsNGC0LDRidC40YLRjCDQsiDQsdC70L7QuiDRh9GD0LbQvtCz0L4uINCT0YDQsNC90LjRhtGLINCx0LvQvtC60LAg4oCUCiAgICAgICAgICAg0L7RgiDQstGB0YLRg9C_0LjRgtC10LvRjNC90L7Qs9C-INC60L7QvNC80LXQvdGC0LDRgNC40Y8g0LTQviA8c3R5bGU-LiAqLwogICAgICAgIHZhciBjb21tZW50ID0gKHNyYy5tYXRjaCgvPCEtLSA9KyAtLT5cbjwhLS0gIEFWQU5aQVRPW1xzXFNdKj8tLT5cbjwhLS0gPSsgLS0-LykgfHwgW251bGxdKVswXTsKICAgICAgICB2YXIgaGVhZFJhdyA9ICcnOwogICAgICAgIGlmIChjb21tZW50KSB7CiAgICAgICAgICB2YXIgZnJvbSA9IHNyYy5pbmRleE9mKGNvbW1lbnQpICsgY29tbWVudC5sZW5ndGg7CiAgICAgICAgICB2YXIgdG8gPSBzcmMuaW5kZXhPZignPHN0eWxlPicsIGZyb20pOwogICAgICAgICAgaWYgKHRvID4gZnJvbSkgaGVhZFJhdyA9IHNyYy5zbGljZShmcm9tLCB0bykudHJpbSgpOwogICAgICAgIH0KICAgICAgICBpZiAoIWhlYWRSYXcpIHRocm93IG5ldyBFcnJvcign0L3QtSDQvdCw0LnQtNC10L3RiyDRgdGC0YDQvtC60LggPGhlYWQ-INCx0LvQvtC60LAg4oCUINGB0LHQvtGA0LrQsCDQvtGC0LzQtdC90LXQvdCwJyk7CgogICAgICAgIC8qINCU0LLQsCBwcmVsb2FkIOKAlCDRjdGC0L4g0LrQsNC00YDRiyDCq9C00L7CuyDQuCDCq9C_0L7RgdC70LXCuyDQv9C10YDQstC-0LPQviDQv9GA0LXRgdC10YLQsDog0LHRgNCw0YPQt9C10YAKICAgICAgICAgICDQvdCw0YfQuNC90LDQtdGCINCz0YDRg9C30LjRgtGMINC40YUg0LfQsNGA0LDQvdC10LUuINCf0YDQuCDQt9Cw0LzQtdC90LUg0LrQsNC00YDQvtCyINC-0L3QuCDQvtCx0Y_Qt9Cw0L3RiwogICAgICAgICAgINC_0L7QtdGF0LDRgtGMINGB0LvQtdC00L7QvCwg0LjQvdCw0YfQtSDQsdGD0LTRg9GCINGC0Y_QvdGD0YLRjCDQutCw0YDRgtC40L3QutGDLCDQutC-0YLQvtGA0L7QuSDRg9C20LUg0L3QtdGCLiAqLwogICAgICAgIHZhciBmaXJzdFByZXNldCA9IChkLnByZXNldHMuc3RyZWV0IHx8IFtdKVswXSB8fCAoZC5wcmVzZXRzLmZpbG0gfHwgW10pWzBdOwogICAgICAgIGlmIChmaXJzdFByZXNldCkgewogICAgICAgICAgdmFyIHByZWxvYWRzID0gaGVhZFJhdy5tYXRjaCgvPGxpbmsgcmVsPSJwcmVsb2FkIiBhcz0iaW1hZ2UiIGhyZWY9IlteIl0qIj4vZykgfHwgW107CiAgICAgICAgICBpZiAocHJlbG9hZHMubGVuZ3RoID09PSAyKSB7CiAgICAgICAgICAgIGhlYWRSYXcgPSBoZWFkUmF3CiAgICAgICAgICAgICAgLnJlcGxhY2UocHJlbG9hZHNbMF0sICc8bGluayByZWw9InByZWxvYWQiIGFzPSJpbWFnZSIgaHJlZj0iJyArIGZpcnN0UHJlc2V0LmJlZm9yZSArICciPicpCiAgICAgICAgICAgICAgLnJlcGxhY2UocHJlbG9hZHNbMV0sICc8bGluayByZWw9InByZWxvYWQiIGFzPSJpbWFnZSIgaHJlZj0iJyArIGZpcnN0UHJlc2V0LmFmdGVyICsgJyI-Jyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBoZWFkTGluZXMgPSBbaGVhZFJhd107CiAgICAgICAgdmFyIGZvbnRSYXcgPSBudWxsOwoKICAgICAgICB2YXIgdGV4dCA9IChjb21tZW50ID8gW2NvbW1lbnQsICcnXSA6IFtdKS5jb25jYXQoCiAgICAgICAgICBoZWFkTGluZXMsCiAgICAgICAgICBbJycsCiAgICAgICAgICAgIHN0eWxlLm91dGVySFRNTCwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgICc8c2NyaXB0PicsCiAgICAgICAgICAgIC8qIHRyaW06INC_0LXRgNC10LLQvtC0INGB0YLRgNC-0LrQuCDQv9C-0YHQu9C1IDxzY3JpcHQ-INC00L7QsdCw0LLQu9GP0LXRgiDRgdC60LvQtdC50LrQsCwKICAgICAgICAgICAgICAg0LjQvdCw0YfQtSDQsiDQvdCw0YfQsNC70LUg0YHQutGA0LjQv9GC0LAg0L_QvtGP0LLQu9GP0LvQsNGB0Ywg0LHRiyDQu9C40YjQvdGP0Y8g0L_Rg9GB0YLQsNGPINGB0YLRgNC-0LrQsCAqLwogICAgICAgICAgICBzYy50ZXh0LnRyaW0oKSwKICAgICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAgICAgJycsCiAgICAgICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iJyArIChsZC5pZCA_ICcgaWQ9IicgKyBsZC5pZCArICciJyA6ICcnKSArICc-JywKICAgICAgICAgICAgbGQudGV4dCwKICAgICAgICAgICAgJzwnICsgJy9zY3JpcHQ-J10KICAgICAgICApLmpvaW4oJ1xuJyk7CgogICAgICAgIC8qINC_0L7RgdC70LXQtNC90Y_RjyDQv9GA0L7QstC10YDQutCwOiDRhNC-0YDQvNCwINC30LDQutCw0LfQsCDQtNC-0LvQttC90LAg0L7RgdGC0LDRgtGM0YHRjyDQtNC-0YHQu9C-0LLQvdC-ICovCiAgICAgICAgdmFyIGxvc3QgPSBGT1JNX1BBUlRTLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gdGV4dC5pbmRleE9mKHApIDwgMDsgfSk7CiAgICAgICAgaWYgKGxvc3QubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ9Ch0JHQntCg0JrQkCDQntCi0JzQldCd0JXQndCQIOKAlCDQsiDRgNC10LfRg9C70YzRgtCw0YLQtSDQvdC1INGF0LLQsNGC0LDQtdGCINGH0LDRgdGC0LXQuSDRhNC-0YDQvNGLINC30LDQutCw0LfQsDogJyArCiAgICAgICAgICAgIGxvc3Quam9pbignLCAnKSArICcuINCa0L7QtCDQvdC1INCy0YvQtNCw0L0sINGH0YLQvtCx0Ysg0L3QtSDRgdC70L7QvNCw0YLRjCDQv9GA0LjRkdC8INC30LDRj9Cy0L7Qui4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIG1pc3NlZDogc2MubWlzc2VkIH07CiAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvcHkodGV4dCwgbm90ZSkgewogICAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAgICDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDQtNCw0LbQtSDQuNC3INGC0LXRhSDQutGD0YHQutC-0LIsINC60L7RgtC-0YDRi9C1INC_0LDQvdC10LvRjCDQutC-0L_QuNGA0YPQtdGCCiAgICAgICAgINC00L7RgdC70L7QstC90L4g4oCUINC40Lcg0YHRgtC40LvQtdC5LCDRgdC60YDQuNC_0YLQsCDQuCDRgNCw0LfQvNC10YLQutC4INCy0L3QtSDQv9C-0LvQtdC5LiDQotGD0LTQsCDQuNGFCiAgICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICAgIHRleHQgPSBTdHJpbmcodGV4dCkucmVwbGFjZSgvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2csICcnKTsKICAgICAgdmFyIHRhID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6cC1vdXQnKTsKICAgICAgdGEudmFsdWUgPSB0ZXh0OyB0YS5zZWxlY3QoKTsKICAgICAgdmFyIG9rID0gZmFsc2U7CiAgICAgIHRyeSB7IG9rID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaCAoZSkge30KICAgICAgaWYgKG9rKSB7IG1zZyhub3RlKTsgcmV0dXJuOyB9CiAgICAgIC8qINCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L3QtdC70YzQt9GPINGC0LXRgNGP0YLRjCDQstC80LXRgdGC0LUg0YEg0YHQvtC-0LHRidC10L3QuNC10Lwg0L7QsSDRg9GB0L_QtdGF0LU6CiAgICAgICAgINC10YHQu9C4INCx0YPRhNC10YAg0L3QtSDRgdGA0LDQsdC-0YLQsNC7LCDRh9C10LvQvtCy0LXQuiDQstGB0ZEg0YDQsNCy0L3QviDQtNC-0LvQttC10L0g0LjRhSDRg9Cy0LjQtNC10YLRjC4gKi8KICAgICAgdmFyIG1hbnVhbCA9ICfQktGL0LTQtdC70LjRgtC1INGC0LXQutGB0YIg0L3QuNC20LUg0Lgg0YHQutC-0L_QuNGA0YPQudGC0LUg0LLRgNGD0YfQvdGD0Y4gKENtZCtDKS4gJzsKICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUpOyB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9KTsKICAgICAgfSBlbHNlIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9CiAgICB9CgogICAgLyog0KfQuNGB0LvQsCDQsiDRgdCy0L7QsdC-0LTQvdGL0YUg0YLQtdC60YHRgtCw0YUg0L_QsNC90LXQu9GMINC90LUg0L_QvtC00LzQtdC90Y_QtdGCIOKAlCDQvtC90LAg0LjRhSDRgdCy0LXRgNGP0LXRgi4KICAgICAgINCf0L7QtNGB0YLQsNCy0LvRj9GC0Ywg0YfQuNGB0LvQviDQstC90YPRgtGA0Ywg0YTRgNCw0LfRiyDQstGB0LvQtdC_0YPRjiDQvtC_0LDRgdC90LXQtSwg0YfQtdC8INC_0YDQtdC00YPQv9GA0LXQtNC40YLRjC4gKi8KICAgIGZ1bmN0aW9uIG51bWJlcldhcm5pbmdzKGQpIHsKICAgICAgdmFyIHcgPSBbXTsKICAgICAgdmFyIG4gPSB7CiAgICAgICAgc3RyZWV0OiAoZC5wcmVzZXRzLnN0cmVldCB8fCBbXSkubGVuZ3RoLAogICAgICAgIGZpbG06IChkLnByZXNldHMuZmlsbSB8fCBbXSkubGVuZ3RoCiAgICAgIH07CiAgICAgIG4uYWxsID0gbi5zdHJlZXQgKyBuLmZpbG07CiAgICAgIChkLmNvbGxzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgdmFyIGluRW0gPSBkaWdpdHMoYy5lbSk7CiAgICAgICAgdmFyIHdhbnQgPSBjLmtleSA9PT0gJ3N0cmVldCcgPyBuLnN0cmVldCA6IChjLmtleSA9PT0gJ2ZpbG0nID8gbi5maWxtIDogbi5hbGwpOwogICAgICAgIGlmIChpbkVtICYmIFN0cmluZyh3YW50KSAhPT0gaW5FbS5zbGljZSgwLCBTdHJpbmcod2FudCkubGVuZ3RoKSAmJiBpbkVtLmluZGV4T2YoU3RyaW5nKHdhbnQpKSA8IDApIHsKICAgICAgICAgIHcucHVzaCgn0LIg0L_QvtC00L_QuNGB0Lgg0L3QsNCx0L7RgNCwICcgKyBjLm5hbWUgKyAnINGB0YLQvtC40YIgwqsnICsgYy5lbSArICfCuywg0LAg0L_RgNC10YHQtdGC0L7QsiAnICsgd2FudCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdmFyIGhlcm9OdW0gPSBkaWdpdHMoZC5oZXJvLmxpbmUzKTsKICAgICAgaWYgKGhlcm9OdW0gJiYgaGVyb051bSAhPT0gU3RyaW5nKG4uYWxsKSkgewogICAgICAgIHcucHVzaCgn0LIg0LfQsNCz0L7Qu9C-0LLQutC1INGB0YLQvtC40YIgJyArIGhlcm9OdW0gKyAnLCDQsCDQv9GA0LXRgdC10YLQvtCyICcgKyBuLmFsbCk7CiAgICAgIH0KICAgICAgdmFyIHN0YXQgPSAoZC5hYm91dC5zdGF0cy5pdGVtc1swXSB8fCB7fSkudGFyZ2V0OwogICAgICBpZiAoc3RhdCAmJiBzdGF0ICE9PSBTdHJpbmcobi5hbGwpKSB7CiAgICAgICAgdy5wdXNoKCfQsiDRgdGH0ZHRgtGH0LjQutC1IMKrJyArIChkLmFib3V0LnN0YXRzLml0ZW1zWzBdLmxhYmVsIHx8ICcnKSArICfCuyDRgdGC0L7QuNGCICcgKyBzdGF0ICsgJywg0LAg0L_RgNC10YHQtdGC0L7QsiAnICsgbi5hbGwpOwogICAgICB9CiAgICAgIHJldHVybiB3OwogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtYnVpbGQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICB2YXIgZCA9IGNvbGxlY3QoKTsKICAgICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgICAgYXNzZW1ibGUoZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIG5vdGUgPSAn0KHQutC-0L_QuNGA0L7QstCw0L0g0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YbQtdC70LjQutC-0LwgKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAgICfQpNC-0YDQvNCwINC30LDQutCw0LfQsCDQvdCwINC80LXRgdGC0LUg4oCUINC_0YDQvtCy0LXRgNC10L3Qvi4g0JIg0LrQvtC90YHRgtGA0YPQutGC0L7RgNC1INCy0YvQtNC10LvQuNGC0LUg0LLQtdGB0YwgSFRNTC3QsdC70L7QuiDQuCDQstGB0YLQsNCy0YzRgtC1INC_0L7QstC10YDRhS4nOwogICAgICAgIGlmIChyZXMubWlzc2VkLmxlbmd0aCkgbm90ZSArPSAnINCd0LUg0L3QsNC50LTQtdC90L4g0LIg0YHQutGA0LjQv9GC0LU6ICcgKyByZXMubWlzc2VkLmpvaW4oJywgJykgKyAnLic7CiAgICAgICAgdmFyIHcgPSBudW1iZXJXYXJuaW5ncyhkKTsKICAgICAgICBpZiAody5sZW5ndGgpIG5vdGUgKz0gJyDQn9GA0L7QstC10YDRjNGC0LUg0YfQuNGB0LvQsDogJyArIHcuam9pbignOyAnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enAtdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgICB2YXIgc25hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCd2YXIgUFJFU0VUUycpID4gLTE7IH0pWzBdOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdi1wcmVzZXRzJyksIHNjID8gc2MudGV4dENvbnRlbnQgOiAnJyk7CiAgICAgICAgcmVhZExkKGRvYywgYWdhaW4pOwogICAgICAgIChhZ2Fpbi5jb2xscyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICAgICAgdmFyIHMgPSBhZ2Fpbi5zZW8ucHJvZHVjdHNbYy5rZXldIHx8IHt9OwogICAgICAgICAgYy5zZW9OYW1lID0gcy5uYW1lIHx8ICcnOyBjLnNlb0Rlc2MgPSBzLmRlc2NyaXB0aW9uIHx8ICcnOwogICAgICAgIH0pOwogICAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgICAgaWYgKGEgPT09IGIpIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLicpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INCx0YvQu9C-JywgSlNPTi5wYXJzZShhKSk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0YHRgtCw0LvQvicsIEpTT04ucGFyc2UoYikpOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwogIH0KCiAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2LXByZXNldHMnKTsKICAgIGlmICghc2NvcGUpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0LHQu9C-0LrQsCAuYXYtcHJlc2V0cycpOwogICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCd2YXIgUFJFU0VUUycpID4gLTE7CiAgICB9KVswXTsKICAgIGlmICghc2MpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0YHQv9C40YHQutCwINC_0YDQtdGB0LXRgtC-0LInKTsKICAgIGNmZyA9IHJlYWRDZmcoc2NvcGUsIHNjLnRleHRDb250ZW50KTsKICAgIHJlYWRMZChkb2MsIGNmZyk7CiAgICBzdGFydCgpOwogIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICByb290LmlubmVySFRNTCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2enAtd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enAtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQv9GA0LXRgdC10YLQvtCyPC9oMj48L2Rpdj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enAtYm9keSI-PHAgY2xhc3M9ImF2enAtaGludCI-0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys6ICcgKwogICAgICBlc2MoZS5tZXNzYWdlKSArICc8L3A-PC9kaXY-PC9kaXY-JzsKICB9KTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0L_RgNC10YHQtdGC0L7QsiDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoiY29udGFjdHMiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0LrQvtC90YLQsNC60YLQvtCyIixzaG9ydDoi0JrQvtC90YLQsNC60YLRiyIsaGludDoi0YLQtdC60YHRgtGLLCDRgdC_0L7RgdC-0LHRiyDRgdCy0Y_Qt9C4LCDQvdCw0LTQv9C40YHQuCDRhNC-0YDQvNGLLCDRgNCw0LfQvNC10YLQutCwIixwYWdlczpbIi9jb250YWN0cyJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQmtCe0J3QotCQ0JrQotCe0JIgIHYyIOKAlCDQs9C10L3QtdGA0LDRgtC-0YAg0LrQvtC00LAKICAgdjIgKDIwMjYtMTAtMjMpOiDQv9C-0LQg0LrQvtC90YLQsNC60YLRiyB2MyDCq9C20YPRgNC90LDQu8K7INC4INC_0L7QtCDRhNC-0YDQvNGDLCDQutC-0YLQvtGA0LDRjyDRgNC10LDQu9GM0L3QvgogICDRgdGC0L7QuNGCINC90LAg0YHQsNC50YLQtTog0LrQvdC-0L_QutCwIMKr0J7QsdGD0YfQtdC90LjQtcK7ICgjYnRuLXRyYWluaW5nKSDQstC80LXRgdGC0L4gwqvQktGB0YLRgNC10YfQuMK7LAogICDQu9C-0LLRg9GI0LrQsCDQtNC70Y8g0LHQvtGC0L7QsiAjZi1leHRyYSDQstC80LXRgdGC0L4gI2YtY29tcGFueSwg0LLRi9Cz0YDRg9C30LrQuCDQsiDQutCw0LvQtdC90LTQsNGA0Ywg0L3QtdGCLgogICB2MSDQttC00LDQuyDRgdGC0LDRgNGL0YUg0L_QvtC70LXQuSDQuCDQvtGC0LzQtdC90Y_QuyDQutCw0LbQtNGD0Y4g0YHQsdC-0YDQutGDLiB2MSDigJQg0LIgX2FyY2hpdmUuCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvY29udGFjdHMKCiAgINCn0LjRgtCw0LXRgiDQmNCh0KXQntCU0J3Qq9CZINC60L7QtCDRgdGC0YDQsNC90LjRhtGLLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLCiAgINC4INCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvC4KCiAgINCT0JvQkNCS0J3QntCVINCf0KDQkNCS0JjQm9CeOiDRhNC-0YDQvNCwINC30LDRj9Cy0LrQuCDQvdC10L_RgNC40LrQvtGB0L3QvtCy0LXQvdC90LAuINCn0LXRgNC10Lcg0L3QtdGRCiAgINC_0YDQuNGF0L7QtNGP0YIg0LrQu9C40LXQvdGC0YsuINCf0LDQvdC10LvRjCDQvdC1INGC0YDQvtCz0LDQtdGCINC90Lgg0L7RgtC_0YDQsNCy0LrRgywg0L3QuCDQv9GA0L7QstC10YDQutGDCiAgINC_0L7Qu9C10LksINC90Lgg0LvQvtCy0YPRiNC60YMg0LTQu9GPINCx0L7RgtC-0LIsINC90Lgg0LLRi9Cz0YDRg9C30LrRgyDQsiDQutCw0LvQtdC90LTQsNGA0Ywg4oCUCiAgINCy0YHRkSDRjdGC0L4g0L_QtdGA0LXQvdC-0YHQuNGC0YHRjyDQtNC-0YHQu9C-0LLQvdC-INC4INC_0YDQvtCy0LXRgNGP0LXRgtGB0Y8g0L_QtdGA0LXQtCDQstGL0LTQsNGH0LXQuSDQutC-0LTQsC4KCiAgINCi0YDQuCDRg9GA0L7QstC90Y8g0LfQsNGJ0LjRgtGLINC_0YDQuCDRgdCx0L7RgNC60LU6CiAgICAgMS4g0L_QvtC00L_QuNGB0Lgg0L3QsCDQutC90L7Qv9C60LDRhSDQstGL0LHQvtGA0LAg0YHQstGP0LfQsNC90Ysg0YHQviDQt9C90LDRh9C10L3QuNGP0LzQuCDQstC90YPRgtGA0LgKICAgICAgICDRgdC60YDQuNC_0YLQsC4g0JXRgdC70Lgg0L_QvtC00L_QuNGB0Ywg0L_RgNCw0LLQuNGC0YHRjywg0LAg0LfQvdCw0YfQtdC90LjQtSDQsiDQutC-0LTQtSDQvdCw0LnRgtC4CiAgICAgICAg0L3QtSDRg9C00LDQu9C-0YHRjCDigJQg0YHQsdC-0YDQutCwINCe0KLQnNCV0J3Qr9CV0KLQodCvOiDQuNC90LDRh9C1INC30LDRj9Cy0LrQuCDRg9GF0L7QtNC40LvQuCDQsdGLCiAgICAgICAg0YEg0YLQuNC_0L7QvCwg0LrQvtGC0L7RgNC-0LPQviDQvdCwINC60L3QvtC_0LrQtSDRg9C20LUg0L3QtdGCOwogICAgIDIuINC_0L7RgdC70LUg0L_RgNCw0LLQutC4INGB0LrRgNC40L_RgiDQv9GA0L7QstC10YDRj9C10YLRgdGPINC90LAg0YHQuNC90YLQsNC60YHQuNGBLiDQodC70L7QvNCw0L3QvdGL0LkKICAgICAgICDRgdC60YDQuNC_0YIg4oCUINC-0YLQvNC10L3QsDsKICAgICAzLiDQsiDQs9C-0YLQvtCy0L7QvCDQutC-0LTQtSDQuNGJ0YPRgtGB0Y8g0L7QtNC40L3QvdCw0LTRhtCw0YLRjCDRh9Cw0YHRgtC10Lkg0YTQvtGA0LzRiy4g0J3QtdGCINGF0L7RgtGPINCx0YsKICAgICAgICDQvtC00L3QvtC5IOKAlCDQvtGC0LzQtdC90LAsINC60L7QtCDQvdC1INCy0YvQtNCw0ZHRgtGB0Y8uCgogICDQm9GD0YfRiNC1INC90LUg0YHQvtCx0YDQsNGC0YwsINGH0LXQvCDQstGL0LTQsNGC0Ywg0LHQu9C-0LosINC60L7RgtC-0YDRi9C5INC80L7Qu9GH0LAg0L_QtdGA0LXRgdGC0LDQvdC10YIKICAg0L_RgNC40L3QuNC80LDRgtGMINC30LDRj9Cy0LrQuC4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuSDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUCiAgICAg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQuiDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4CiAgICAg0LLQtdGA0LjRgtGMLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDRjdGC0Lgg0YPQt9C70Ysg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAzMCDQvtC60YLRj9Cx0YDRjyAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTktMDEtMDEiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogIjE0OTAwLTU0OTAwIiwKICAgICAgIm9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iLAogICAgICAgICAgImRheU9mV2VlayI6IFsKICAgICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAgICJUdWVzZGF5IiwKICAgICAgICAgICAgIldlZG5lc2RheSIsCiAgICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAgICJGcmlkYXkiLAogICAgICAgICAgICAiU2F0dXJkYXkiLAogICAgICAgICAgICAiU3VuZGF5IgogICAgICAgICAgXSwKICAgICAgICAgICJvcGVucyI6ICIxMDowMCIsCiAgICAgICAgICAiY2xvc2VzIjogIjIwOjAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIHZhciBDQU5PTl9DTEFTSCA9IFtdOwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2emMtcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTC50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIGF0dHIoZWwsIGEpIHsgcmV0dXJuIGVsID8gKGVsLmdldEF0dHJpYnV0ZShhKSB8fCAnJykgOiAnJzsgfQoKICAvKiDQmtC90L7Qv9C60Lgg0LLRi9Cx0L7RgNCwOiDQv9C-0LTQv9C40YHRjCDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0Lgg0LfQvdCw0YfQtdC90LjQtSDQstC90YPRgtGA0Lgg0YHQutGA0LjQv9GC0LAuCiAgICAg0JfQvdCw0YfQtdC90LjQtSDigJQg0YLQviwg0YfRgtC-INGD0YXQvtC00LjRgiDQsiDQt9Cw0Y_QstC60YMsINC_0L7RjdGC0L7QvNGDINGB0LLRj9C30Ywg0L7QsdGP0LfQsNGC0LXQu9GM0L3QsC4gKi8KICB2YXIgQ0hJUFMgPSBbCiAgICB7IGlkOiAnYnRuLXNob290aW5nJywgdmFyTmFtZTogJ3NlbGVjdGVkVHlwZScgfSwKICAgIHsgaWQ6ICdidG4tdHJhaW5pbmcnLCB2YXJOYW1lOiAnc2VsZWN0ZWRUeXBlJyB9LAogICAgeyBpZDogJ2J0bi1zaXRlJywgICAgIHZhck5hbWU6ICdzZWxlY3RlZFR5cGUnIH0sCiAgICB7IGlkOiAnYnRuLWthemFuJywgICAgdmFyTmFtZTogJ3NlbGVjdGVkQ2l0eScgfSwKICAgIHsgaWQ6ICdidG4tbW9zY293JywgICB2YXJOYW1lOiAnc2VsZWN0ZWRDaXR5JyB9LAogICAgeyBpZDogJ2J0bi1vdGhlcicsICAgIHZhck5hbWU6ICdzZWxlY3RlZENpdHknLCBmYWxsYmFjazogdHJ1ZSB9CiAgXTsKCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGlubmVycyA9IGFsbChzY29wZSwgJy5oZXJvLXRpdGxlLWlubmVyJyk7CiAgICB2YXIgZmllbGRzID0gYWxsKHNjb3BlLCAnLm9mLWZpZWxkJyk7CgogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IHQob25lKHNjb3BlLCAnLmhlcm8tZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChpbm5lcnNbMF0pLAogICAgICAgIGxpbmUyOiBpbm5lcnNbMV0gPyB0KG9uZShpbm5lcnNbMV0sICdlbScpIHx8IGlubmVyc1sxXSkgOiAnJywKICAgICAgICBsaW5lMzogdChpbm5lcnNbMl0pLAogICAgICAgIHN1YjogaHRtbChvbmUoc2NvcGUsICcuaGVyby1zdWInKSksCiAgICAgICAgaGludDogb3duVGV4dChvbmUoc2NvcGUsICcuaGVyby1zY3JvbGwtaGludCcpKQogICAgICB9LAogICAgICBzb2NpYWxzOiBhbGwoc2NvcGUsICcuc29jaWFsLWJ0bicpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBpY29uOiB0KG9uZShhLCAnLm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnKSksCiAgICAgICAgICBsYWJlbDogb3duVGV4dChhKSwKICAgICAgICAgIGhyZWY6IGF0dHIoYSwgJ2hyZWYnKSwKICAgICAgICAgIGFyaWE6IGF0dHIoYSwgJ2FyaWEtbGFiZWwnKQogICAgICAgIH07CiAgICAgIH0pLAogICAgICBmb3JtOiB7CiAgICAgICAgdGl0bGU6IHQob25lKHNjb3BlLCAnLmZvcm0tc2VjdGlvbi10aXRsZScpKSwKICAgICAgICBub3RlOiB0KG9uZShzY29wZSwgJy5mb3JtLXNlY3Rpb24tbm90ZScpKSwKICAgICAgICBmaWVsZHM6IGZpZWxkcy5tYXAoZnVuY3Rpb24gKGYpIHsKICAgICAgICAgIHZhciBsYiA9IG9uZShmLCAnLm9mLWxhYmVsJyk7CiAgICAgICAgICB2YXIgaW5wID0gb25lKGYsICdpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKSwgdGV4dGFyZWEnKTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGxhYmVsOiB0KGxiKSwKICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGF0dHIoaW5wLCAncGxhY2Vob2xkZXInKQogICAgICAgICAgfTsKICAgICAgICB9KSwKICAgICAgICBjaGlwczogQ0hJUFMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiB0KG9uZShzY29wZSwgJyMnICsgYy5pZCkpOyB9KSwKICAgICAgICBjaXR5Q3VzdG9tOiBhdHRyKG9uZShzY29wZSwgJyNmLWNpdHktY3VzdG9tJyksICdwbGFjZWhvbGRlcicpLAogICAgICAgIGxlZ2FsOiBodG1sKG9uZShzY29wZSwgJy5sZWdhbC10ZXh0JykpLAogICAgICAgIHN1Ym1pdDogdChvbmUoc2NvcGUsICcjZi1zdWJtaXQnKSkKICAgICAgfSwKICAgICAgc3VjY2VzczogewogICAgICAgIGljb246IHQob25lKHNjb3BlLCAnLnN1Y2Nlc3MtaWNvbicpKSwKICAgICAgICB0aXRsZTogdChvbmUoc2NvcGUsICcuc3VjY2Vzcy10aXRsZScpKSwKICAgICAgICBzdWI6IHQob25lKHNjb3BlLCAnLnN1Y2Nlc3Mtc3ViJykpLAogICAgICAgIGNhbDogb3duVGV4dChvbmUoc2NvcGUsICcjYnRuLWFkZC1jYWwnKSksCiAgICAgICAgcmV0cnk6IHQob25lKHNjb3BlLCAnLnN1Y2Nlc3MtcmV0cnknKSkKICAgICAgfSwKICAgICAgc2VvOiB7CiAgICAgICAgcGFnZU5hbWU6ICcnLCBwYWdlRGVzY3JpcHRpb246ICcnLAogICAgICAgIHRlbGVwaG9uZTogJycsIGVtYWlsOiAnJywgcHJpY2VSYW5nZTogJycsCiAgICAgICAgb3BlbnM6ICcnLCBjbG9zZXM6ICcnLCBzYW1lQXM6ICcnCiAgICAgIH0KICAgIH07CiAgfQoKICBmdW5jdGlvbiByZWFkTGQoZG9jLCBjZmcpIHsKICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgIGlmICghcykgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOwogICAgICAob1snQGdyYXBoJ10gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ0NvbnRhY3RQYWdlJykgewogICAgICAgICAgY2ZnLnNlby5wYWdlTmFtZSA9IG4ubmFtZSB8fCAnJzsKICAgICAgICAgIGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdQcm9mZXNzaW9uYWxTZXJ2aWNlJykgewogICAgICAgICAgY2ZnLnNlby50ZWxlcGhvbmUgPSBuLnRlbGVwaG9uZSB8fCAnJzsKICAgICAgICAgIGNmZy5zZW8uZW1haWwgPSBuLmVtYWlsIHx8ICcnOwogICAgICAgICAgY2ZnLnNlby5wcmljZVJhbmdlID0gbi5wcmljZVJhbmdlIHx8ICcnOwogICAgICAgICAgdmFyIG9oID0gbi5vcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uOwogICAgICAgICAgaWYgKG9oKSB7IGNmZy5zZW8ub3BlbnMgPSBvaC5vcGVucyB8fCAnJzsgY2ZnLnNlby5jbG9zZXMgPSBvaC5jbG9zZXMgfHwgJyc7IH0KICAgICAgICAgIGNmZy5zZW8uc2FtZUFzID0gKG4uc2FtZUFzIHx8IFtdKS5qb2luKCdcbicpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7IC8qINGB0LHQvtGA0LrQsCDRgdC-0L7QsdGJ0LjRgiAqLyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tINC_0LDQvdC10LvRjCAtLS0tLS0tLS0tICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2emMtcm9vdCwjYXZ6Yy1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6Yy1yb290IGlucHV0LCNhdnpjLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnpjLXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6Yy1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnpjLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2emMtaGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6Yy1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9JywKICAgICcjYXZ6Yy1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnpjLWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtc2VjPnN1bW1hcnl7cGFkZGluZzoxMnB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZhZmFmYTtsaXN0LXN0eWxlOm5vbmV9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QkUgICJ9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWYgaW5wdXQsI2F2emMtcm9vdCAuYXZ6Yy1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NzBweDtyZXNpemU6dmVydGljYWx9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2emMtcm9vdCAuYXZ6Yy1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6Yy13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6Yy1yb290IC5hdnpjLWNhcmQgaDR7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudH0nLAogICAgJyNhdnpjLXJvb3QgLmF2emMtaGludHtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2emMtcm9vdCAuYXZ6Yy13YXJue2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4YTRiMDAgIWltcG9ydGFudDtiYWNrZ3JvdW5kOiNmZmY1ZTY7Ym9yZGVyOjFweCBzb2xpZCAjZjBkNWE4OycsCiAgICAnYm9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxMHB4IDEycHg7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2emMtb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2emMtbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2emMtZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpjLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emMtbXNnJyk7IGlmIChlKSBlLnRleHRDb250ZW50ID0gczsgfQoKICB2YXIgY2ZnID0gbnVsbDsKCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzdGFydCgpIHsKICAgIHZhciBGSUVMRF9OQU1FUyA9IFsn0JjQvNGPJywgJ9Ci0LXQu9C10YTQvtC9JywgJ1RlbGVncmFtJywgJ9CU0LDRgtCwJywgJ9Cj0YHQu9GD0LPQsCcsICfQk9C-0YDQvtC0JywgJ9CU0LXRgtCw0LvQuCddOwogICAgdmFyIENISVBfTkFNRVMgPSBbJ9Cj0YHQu9GD0LPQsCAxJywgJ9Cj0YHQu9GD0LPQsCAyJywgJ9Cj0YHQu9GD0LPQsCAzJywgJ9CT0L7RgNC-0LQgMScsICfQk9C-0YDQvtC0IDInLCAn0JPQvtGA0L7QtCAzJ107CgogICAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnpjLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpjLWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0LrQvtC90YLQsNC60YLQvtCyPC9oMj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emMtYiIgaWQ9ImF2emMtY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-PC9kaXY-PGRpdiBpZD0iYXZ6Yy1ib2R5Ij4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpjLXdhcm4iPtCe0YLQv9GA0LDQstC60LAg0LfQsNGP0LLQutC4LCDQv9GA0L7QstC10YDQutCwINC_0L7Qu9C10LksINC70L7QstGD0YjQutCwINC00LvRjyDQsdC-0YLQvtCyINC4INCy0YvQs9GA0YPQt9C60LAgJyArCiAgICAgICfQsiDQutCw0LvQtdC90LTQsNGA0Ywg0L_QsNC90LXQu9GM0Y4g0L3QtSDQv9GA0LDQstGP0YLRgdGPINC4INC_0LXRgNC10L3QvtGB0Y_RgtGB0Y8g0LTQvtGB0LvQvtCy0L3Qvi4g0J_QtdGA0LXQtCDQstGL0LTQsNGH0LXQuSDQutC-0LTQsCDQv9Cw0L3QtdC70YwgJyArCiAgICAgICfQv9GA0L7QstC10YDRj9C10YIg0YHQuNC90YLQsNC60YHQuNGBINGB0LrRgNC40L_RgtCwINC4INC90LDQu9C40YfQuNC1INCy0YHQtdGFINGH0LDRgdGC0LXQuSDRhNC-0YDQvNGLIOKAlCDQuCDQvtGC0LzQtdC90Y_QtdGCINGB0LHQvtGA0LrRgywgJyArCiAgICAgICfQtdGB0LvQuCDRh9GC0L4t0YLQviDQvdC1INGB0YXQvtC00LjRgtGB0Y8uPC9wPic7CgogICAgLyog0KjQkNCf0JrQkCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emMtc2VjIiBvcGVuPjxzdW1tYXJ5PtCo0LDQv9C60LAg0YHRgtGA0LDQvdC40YbRizwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpjLWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpjLXJvdyI-JyArIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log4oCUINGB0YLRgNC-0LrQsCAxJywgJ2hlcm8ubGluZTEnLCBjZmcuaGVyby5saW5lMSkgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDIgKNC60YPRgNGB0LjQsiknLCAnaGVyby5saW5lMicsIGNmZy5oZXJvLmxpbmUyKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDigJQg0YHRgtGA0L7QutCwIDMnLCAnaGVyby5saW5lMycsIGNmZy5oZXJvLmxpbmUzKSArCiAgICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCDQv9C-0LQg0YfQtdGA0YLQvtC5ICjQvNC-0LbQvdC-ICZsdDticiZndDspJywgJ2hlcm8uc3ViJywgY2ZnLmhlcm8uc3ViLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Cf0L7QtNGB0LrQsNC30LrQsCDRgyDQv9C-0LvQvtGB0Ysg0L_RgNC-0LrRgNGD0YLQutC4JywgJ2hlcm8uaGludCcsIGNmZy5oZXJvLmhpbnQpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCh0J_QntCh0J7QkdCrINCh0JLQr9CX0JggKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpjLXNlYyI-PHN1bW1hcnk-0KHQv9C-0YHQvtCx0Ysg0YHQstGP0LfQuCAoJyArIGNmZy5zb2NpYWxzLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emMtaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emMtaGludCI-0JfQvdCw0YfQvtC6IOKAlCDQuNC80Y8g0LjQtyDQvdCw0LHQvtGA0LAgTWF0ZXJpYWwgU3ltYm9scy4g0JDQtNGA0LXRgSDQtNC70Y8g0L_QvtGH0YLRiyDQv9C40YjQtdGC0YHRjyAnICsKICAgICAgJ9C60LDQuiA8Y29kZT5tYWlsdG860L_QvtGH0YLQsDwvY29kZT4sINC00LvRjyDRgdC-0L7QsdGJ0LXQvdC40Lkg4oCUIDxjb2RlPnNtczorN-KApjwvY29kZT4uPC9wPic7CiAgICBjZmcuc29jaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emMtY2FyZCI-PGg0PtCa0L3QvtC_0LrQsCAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpjLXJvdyI-JyArIGZpZWxkKCfQn9C-0LTQv9C40YHRjCcsICdzb2NpYWxzLicgKyBpICsgJy5sYWJlbCcsIHMubGFiZWwpICsKICAgICAgICBmaWVsZCgn0JfQvdCw0YfQvtC6JywgJ3NvY2lhbHMuJyArIGkgKyAnLmljb24nLCBzLmljb24pICsgJzwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBJywgJ3NvY2lhbHMuJyArIGkgKyAnLmhyZWYnLCBzLmhyZWYpICsKICAgICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0LTQu9GPINGB0LrRgNC40L3RgNC40LTQtdGA0LAnLCAnc29jaWFscy4nICsgaSArICcuYXJpYScsIHMuYXJpYSkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KTQntCg0JzQkCDigJQg0YLQvtC70YzQutC-INC90LDQtNC_0LjRgdC4ICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6Yy1zZWMiPjxzdW1tYXJ5PtCd0LDQtNC_0LjRgdC4INCyINGE0L7RgNC80LU8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6Yy1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6Yy13YXJuIj7Ql9C00LXRgdGMINC_0YDQsNCy0Y_RgtGB0Y8g0YLQvtC70YzQutC-INC90LDQtNC_0LjRgdC4LiDQm9C-0LPQuNC60LAg0L_RgNC40ZHQvNCwINC30LDRj9Cy0L7QuiDQvdC1INC30LDRgtGA0LDQs9C40LLQsNC10YLRgdGPLiAnICsKICAgICAgJ9Cf0L7QtNC_0LjRgdC4INC90LAg0LrQvdC-0L_QutCw0YUg0LLRi9Cx0L7RgNCwINGB0LLRj9C30LDQvdGLINGB0L4g0LfQvdCw0YfQtdC90LjRj9C80LgsINC60L7RgtC-0YDRi9C1INGD0YXQvtC00Y_RgiDQsiDQt9Cw0Y_QstC60YMsIOKAlCAnICsKICAgICAgJ9C_0LDQvdC10LvRjCDQvNC10L3Rj9C10YIg0LjRhSDQstC80LXRgdGC0LUuPC9wPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6Yy1yb3ciPicgKyBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INGE0L7RgNC80YsnLCAnZm9ybS50aXRsZScsIGNmZy5mb3JtLnRpdGxlKSArCiAgICAgIGZpZWxkKCfQn9GA0LjQv9C40YHQutCwINGB0L_RgNCw0LLQsCcsICdmb3JtLm5vdGUnLCBjZmcuZm9ybS5ub3RlKSArICc8L2Rpdj4nOwogICAgY2ZnLmZvcm0uZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6Yy1yb3ciPicgKyBmaWVsZCgn0J_QvtC70LUgwqsnICsgKEZJRUxEX05BTUVTW2ldIHx8IChpICsgMSkpICsgJ8K7IOKAlCDQv9C-0LTQv9C40YHRjCcsICdmb3JtLmZpZWxkcy4nICsgaSArICcubGFiZWwnLCBmLmxhYmVsKSArCiAgICAgICAgKGYucGxhY2Vob2xkZXIgIT09ICcnID8gZmllbGQoJ9Cf0L7QtNGB0LrQsNC30LrQsCDQstC90YPRgtGA0Lgg0L_QvtC70Y8nLCAnZm9ybS5maWVsZHMuJyArIGkgKyAnLnBsYWNlaG9sZGVyJywgZi5wbGFjZWhvbGRlcikgOiAnPGRpdj48L2Rpdj4nKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpjLWNhcmQiPjxoND7QmtC90L7Qv9C60Lgg0LLRi9Cx0L7RgNCwIOKAlCDQvdCw0LTQv9C40YHRjCDRg9GF0L7QtNC40YIg0Lgg0LIg0LfQsNGP0LLQutGDPC9oND4nOwogICAgY2ZnLmZvcm0uY2hpcHMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICBoICs9IGZpZWxkKENISVBfTkFNRVNbaV0sICdmb3JtLmNoaXBzLicgKyBpLCBjKTsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0J_QvtC00YHQutCw0LfQutCwINCyINC_0L7Qu9C1INGB0LLQvtC10LPQviDQs9C-0YDQvtC00LAnLCAnZm9ybS5jaXR5Q3VzdG9tJywgY2ZnLmZvcm0uY2l0eUN1c3RvbSkgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAg0L4g0YHQvtCz0LvQsNGB0LjQuCAo0LzQvtC20L3QviBIVE1MKScsICdmb3JtLmxlZ2FsJywgY2ZnLmZvcm0ubGVnYWwsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0L3QsCDQutC90L7Qv9C60LUg0L7RgtC_0YDQsNCy0LrQuCcsICdmb3JtLnN1Ym1pdCcsIGNmZy5mb3JtLnN1Ym1pdCkgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0J_QntCh0JvQlSDQntCi0J_QoNCQ0JLQmtCYICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6Yy1zZWMiPjxzdW1tYXJ5PtCt0LrRgNCw0L0g0L_QvtGB0LvQtSDQvtGC0L_RgNCw0LLQutC4PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emMtaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6Yy1yb3ciPicgKyBmaWVsZCgn0JfQvdCw0YfQvtC6JywgJ3N1Y2Nlc3MuaWNvbicsIGNmZy5zdWNjZXNzLmljb24pICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdzdWNjZXNzLnRpdGxlJywgY2ZnLnN1Y2Nlc3MudGl0bGUpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0YwnLCAnc3VjY2Vzcy5zdWInLCBjZmcuc3VjY2Vzcy5zdWIpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emMtcm93Ij4nICsgZmllbGQoJ9Ca0L3QvtC_0LrQsCDQutCw0LvQtdC90LTQsNGA0Y8nLCAnc3VjY2Vzcy5jYWwnLCBjZmcuc3VjY2Vzcy5jYWwpICsKICAgICAgZmllbGQoJ9Ca0L3QvtC_0LrQsCDCq9C-0YLQv9GA0LDQstC40YLRjCDQtdGJ0ZHCuycsICdzdWNjZXNzLnJldHJ5JywgY2ZnLnN1Y2Nlc3MucmV0cnkpICsgJzwvZGl2PicgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KDQkNCX0JzQldCi0JrQkCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emMtc2VjIj48c3VtbWFyeT7QoNCw0LfQvNC10YLQutCwINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emMtaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emMtaGludCI-0K3RgtC-INC90LXQstC40LTQuNC80LDRjyDRh9Cw0YHRgtGMINGB0YLRgNCw0L3QuNGG0YsuINCn0LDRgdGLINGA0LDQsdC-0YLRiyDQuCDRgtC10LvQtdGE0L7QvSDQtNC-0LvQttC90Ysg0YHQvtCy0L_QsNC00LDRgtGMICcgKwogICAgICAn0YEg0YLQtdC8LCDRh9GC0L4g0L3QsNC_0LjRgdCw0L3QviDQvdCwINGB0LDQvNC-0Lkg0YHRgtGA0LDQvdC40YbQtS48L3A-JyArCiAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLnBhZ2VOYW1lJywgY2ZnLnNlby5wYWdlTmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlRGVzY3JpcHRpb24nLCBjZmcuc2VvLnBhZ2VEZXNjcmlwdGlvbiwgJ2FyZWEnKSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpjLXJvdyI-JyArIGZpZWxkKCfQotC10LvQtdGE0L7QvScsICdzZW8udGVsZXBob25lJywgY2ZnLnNlby50ZWxlcGhvbmUpICsKICAgICAgZmllbGQoJ9Cf0L7Rh9GC0LAnLCAnc2VvLmVtYWlsJywgY2ZnLnNlby5lbWFpbCkgKyAnPC9kaXY-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpjLXJvdyI-JyArIGZpZWxkKCfQp9Cw0YHRiyDRgNCw0LHQvtGC0Ysg4oCUINGBJywgJ3Nlby5vcGVucycsIGNmZy5zZW8ub3BlbnMpICsKICAgICAgZmllbGQoJ9Cn0LDRgdGLINGA0LDQsdC-0YLRiyDigJQg0LTQvicsICdzZW8uY2xvc2VzJywgY2ZnLnNlby5jbG9zZXMpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0JTQuNCw0L_QsNC30L7QvSDRhtC10L0nLCAnc2VvLnByaWNlUmFuZ2UnLCBjZmcuc2VvLnByaWNlUmFuZ2UpICsKICAgICAgZmllbGQoJ9Ch0YHRi9C70LrQuCDQvdCwINC_0YDQvtGE0LjQu9C4ICjQv9C-INC-0LTQvdC-0Lkg0LIg0YHRgtGA0L7QutC1KScsICdzZW8uc2FtZUFzJywgY2ZnLnNlby5zYW1lQXMsICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPC9kaXY-PGRpdiBpZD0iYXZ6Yy1mb290Ij4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emMtYiBwIiBpZD0iYXZ6Yy1idWlsZCI-0KHQvtCx0YDQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emMtYiIgaWQ9ImF2emMtdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAgICc8c3BhbiBpZD0iYXZ6Yy1tc2ciPjwvc3Bhbj48L2Rpdj4nICsKICAgICAgJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAyMHB4IDE4cHgiPjx0ZXh0YXJlYSBpZD0iYXZ6Yy1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgICByb290LmlubmVySFRNTCA9IGg7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpjLWNsb3NlJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcm9vdC5yZW1vdmUoKTsgfTsKCiAgICBmdW5jdGlvbiBzZXRQYXRoKG9iaiwgcGF0aCwgdmFsKSB7CiAgICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKSwgbyA9IG9iaiwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgICBvW3BhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXSA9IHZhbDsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbGxlY3QoKSB7CiAgICAgIHZhciBkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgc2V0UGF0aChkLCBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpLCBlbC52YWx1ZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZDsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgICB2YXIgdGV4dHMgPSBbXSwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgICAgfQogICAgICBpZiAoIXRleHRzLmxlbmd0aCkgeyBlbC5hcHBlbmRDaGlsZChlbC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHYpKTsgcmV0dXJuOyB9CiAgICAgIHZhciBtYWluID0gbnVsbDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG1haW4gPSB0ZXh0c1tpXTsgYnJlYWs7IH0KICAgICAgfQogICAgICBpZiAoIW1haW4pIG1haW4gPSB0ZXh0c1swXTsKICAgICAgdmFyIHJhdyA9IG1haW4ubm9kZVZhbHVlOwogICAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgICB2YXIgcG9zdCA9IChyYXcubWF0Y2goL1xzKiQvKSB8fCBbJyddKVswXTsKICAgICAgaWYgKHJhdy50cmltKCkgPT09ICcnKSB7IHByZSA9ICcnOyBwb3N0ID0gJyc7IH0KICAgICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldICE9PSBtYWluICYmIHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldEh0bWwoZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwuaW5uZXJIVE1MID0gdjsgfQoKICAgIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuaGVyby10aXRsZS1pbm5lcicpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5oZXJvLWV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgICBpZiAoaW5uZXJzWzBdKSBzZXRUZXh0KGlubmVyc1swXSwgZC5oZXJvLmxpbmUxKTsKICAgICAgaWYgKGlubmVyc1sxXSkgc2V0VGV4dChvbmUoaW5uZXJzWzFdLCAnZW0nKSB8fCBpbm5lcnNbMV0sIGQuaGVyby5saW5lMik7CiAgICAgIGlmIChpbm5lcnNbMl0pIHNldFRleHQoaW5uZXJzWzJdLCBkLmhlcm8ubGluZTMpOwogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5oZXJvLXN1YicpLCBkLmhlcm8uc3ViKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaGVyby1zY3JvbGwtaGludCcpLCBkLmhlcm8uaGludCk7CgogICAgICBhbGwoc2NvcGUsICcuc29jaWFsLWJ0bicpLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuc29jaWFsc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5tYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJyksIHYuaWNvbik7CiAgICAgICAgc2V0VGV4dChhLCB2LmxhYmVsKTsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB2LmFyaWEpOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmZvcm0tc2VjdGlvbi10aXRsZScpLCBkLmZvcm0udGl0bGUpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5mb3JtLXNlY3Rpb24tbm90ZScpLCBkLmZvcm0ubm90ZSk7CiAgICAgIGFsbChzY29wZSwgJy5vZi1maWVsZCcpLmZvckVhY2goZnVuY3Rpb24gKGYsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuZm9ybS5maWVsZHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGYsICcub2YtbGFiZWwnKSwgdi5sYWJlbCk7CiAgICAgICAgdmFyIGlucCA9IG9uZShmLCAnaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSksIHRleHRhcmVhJyk7CiAgICAgICAgaWYgKGlucCAmJiB2LnBsYWNlaG9sZGVyICE9PSAnJyAmJiBpbnAuaGFzQXR0cmlidXRlKCdwbGFjZWhvbGRlcicpKSB7CiAgICAgICAgICBpbnAuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHYucGxhY2Vob2xkZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIENISVBTLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgICBzZXRUZXh0KG9uZShzY29wZSwgJyMnICsgYy5pZCksIGQuZm9ybS5jaGlwc1tpXSk7CiAgICAgIH0pOwogICAgICB2YXIgY2MgPSBvbmUoc2NvcGUsICcjZi1jaXR5LWN1c3RvbScpOwogICAgICBpZiAoY2MpIGNjLnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCBkLmZvcm0uY2l0eUN1c3RvbSk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmxlZ2FsLXRleHQnKSwgZC5mb3JtLmxlZ2FsKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcjZi1zdWJtaXQnKSwgZC5mb3JtLnN1Ym1pdCk7CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5zdWNjZXNzLWljb24nKSwgZC5zdWNjZXNzLmljb24pOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5zdWNjZXNzLXRpdGxlJyksIGQuc3VjY2Vzcy50aXRsZSk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLnN1Y2Nlc3Mtc3ViJyksIGQuc3VjY2Vzcy5zdWIpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJyNidG4tYWRkLWNhbCcpLCBkLnN1Y2Nlc3MuY2FsKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuc3VjY2Vzcy1yZXRyeScpLCBkLnN1Y2Nlc3MucmV0cnkpOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0L_RgNCw0LLQutCwINC70LjRgtC10YDQsNC70L7QsiDQsiDRgdC60YDQuNC_0YLQtSAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24ganNTdHIocykgeyByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKTsgfQogICAgZnVuY3Rpb24gcngocykgeyByZXR1cm4gcy5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywgJ1xcJCYnKTsgfQoKICAgIGZ1bmN0aW9uIHBhdGNoU2NyaXB0KHNyYywgZCkgewogICAgICB2YXIgb3V0ID0gc3JjOwoKICAgICAgLyog0JfQvdCw0YfQtdC90LjRjyDQutC90L7Qv9C-0Log0LLRi9Cx0L7RgNCwOiDRgtC-LCDRh9GC0L4g0YPRhdC-0LTQuNGCINCyINC30LDRj9Cy0LrRgy4KICAgICAgICAg0JXRgdC70Lgg0L_QvtC00L_QuNGB0Ywg0LjQt9C80LXQvdC40LvQsNGB0YwsINCwINC30L3QsNGH0LXQvdC40LUg0LIg0LrQvtC00LUg0L3QtSDQvdCw0YjQu9C-0YHRjCDigJQKICAgICAgICAg0Y3RgtC-INC-0YLQvNC10L3QsCDRgdCx0L7RgNC60LgsINCwINC90LUg0L_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjQtTog0LjQvdCw0YfQtSDQt9Cw0Y_QstC60LgKICAgICAgICAg0L_RgNC40YXQvtC00LjQu9C4INCx0Ysg0YEg0YLQuNC_0L7QvCwg0LrQvtGC0L7RgNC-0LPQviDQvdCwINC60L3QvtC_0LrQtSDRg9C20LUg0L3QtdGCLiAqLwogICAgICBDSElQUy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgdmFyIHdhcyA9IGNmZy5mb3JtLmNoaXBzW2ldLCBub3cgPSBkLmZvcm0uY2hpcHNbaV07CiAgICAgICAgaWYgKHdhcyA9PT0gbm93KSByZXR1cm47CgogICAgICAgIHZhciBkb25lID0gMDsKICAgICAgICB2YXIgcmVBc3NpZ24gPSBuZXcgUmVnRXhwKCcoJyArIGMudmFyTmFtZSArICdcXHMqPVxccyopXCcnICsgcngod2FzKSArICdcJycsICdnJyk7CiAgICAgICAgb3V0ID0gb3V0LnJlcGxhY2UocmVBc3NpZ24sIGZ1bmN0aW9uIChtLCBwMSkgeyBkb25lKys7IHJldHVybiBwMSArICInIiArIGpzU3RyKG5vdykgKyAiJyI7IH0pOwoKICAgICAgICBpZiAoYy5mYWxsYmFjaykgewogICAgICAgICAgdmFyIHJlRmFsbCA9IG5ldyBSZWdFeHAoJyhcXHxcXHxcXHMqKVwnJyArIHJ4KHdhcykgKyAnXCcnLCAnZycpOwogICAgICAgICAgb3V0ID0gb3V0LnJlcGxhY2UocmVGYWxsLCBmdW5jdGlvbiAobSwgcDEpIHsgZG9uZSsrOyByZXR1cm4gcDEgKyAiJyIgKyBqc1N0cihub3cpICsgIiciOyB9KTsKICAgICAgICB9CgogICAgICAgIGlmICghZG9uZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfQodCR0J7QoNCa0JAg0J7QotCc0JXQndCV0J3QkDog0L_QvtC00L_QuNGB0YwgwqsnICsgd2FzICsgJ8K7INC40LfQvNC10L3QtdC90LAg0L3QsCDCqycgKyBub3cgKwogICAgICAgICAgICAnwrssINC90L4g0YHQvtC-0YLQstC10YLRgdGC0LLRg9GO0YnQtdC1INC30L3QsNGH0LXQvdC40LUg0LIg0LrQvtC00LUg0YTQvtGA0LzRiyDQvdC1INC90LDQudC00LXQvdC-LiDQl9Cw0Y_QstC60Lgg0YPRhdC-0LTQuNC70Lgg0LHRiyAnICsKICAgICAgICAgICAgJ9GB0L4g0YHRgtCw0YDRi9C8INC90LDQt9Cy0LDQvdC40LXQvC4g0JrQvtC0INC90LUg0LLRi9C00LDQvS4nKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgLyog0J3QsNC00L_QuNGB0Ywg0L3QsCDQutC90L7Qv9C60LUg0L7RgtC_0YDQsNCy0LrQuCDQstC-0YHRgdGC0LDQvdCw0LLQu9C40LLQsNC10YLRgdGPINGB0LrRgNC40L_RgtC-0LwKICAgICAgICAg0L_QvtGB0LvQtSDQvdC10YPQtNCw0YfQvdC-0Lkg0L_QvtC_0YvRgtC60Lgg4oCUINC40L3QsNGH0LUg0YLQsNC8INC_0L7Rj9Cy0LjQu9GB0Y8g0LHRiyDRgdGC0LDRgNGL0Lkg0YLQtdC60YHRgiAqLwogICAgICBpZiAoY2ZnLmZvcm0uc3VibWl0ICE9PSBkLmZvcm0uc3VibWl0KSB7CiAgICAgICAgdmFyIHJlQnRuID0gbmV3IFJlZ0V4cCgnKGZTdWJtaXRcXC50ZXh0Q29udGVudFxccyo9XFxzKilcJycgKyByeChjZmcuZm9ybS5zdWJtaXQpICsgJ1wnJywgJ2cnKTsKICAgICAgICBpZiAoIXJlQnRuLnRlc3Qob3V0KSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfQodCR0J7QoNCa0JAg0J7QotCc0JXQndCV0J3QkDog0L3QsNC00L_QuNGB0Ywg0L3QsCDQutC90L7Qv9C60LUg0LjQt9C80LXQvdC10L3QsCwg0L3QviDQsiDQutC-0LTQtSDRhNC-0YDQvNGLICcgKwogICAgICAgICAgICAn0L3QtSDQvdCw0LnQtNC10L3QviDQvNC10YHRgtC-LCDQs9C00LUg0L7QvdCwINCy0L7RgdGB0YLQsNC90LDQstC70LjQstCw0LXRgtGB0Y8g0L_QvtGB0LvQtSDQvtGI0LjQsdC60Lgg0YHQstGP0LfQuC4g0JrQvtC0INC90LUg0LLRi9C00LDQvS4nKTsKICAgICAgICB9CiAgICAgICAgb3V0ID0gb3V0LnJlcGxhY2UobmV3IFJlZ0V4cCgnKGZTdWJtaXRcXC50ZXh0Q29udGVudFxccyo9XFxzKilcJycgKyByeChjZmcuZm9ybS5zdWJtaXQpICsgJ1wnJywgJ2cnKSwKICAgICAgICAgIGZ1bmN0aW9uIChtLCBwMSkgeyByZXR1cm4gcDEgKyAiJyIgKyBqc1N0cihkLmZvcm0uc3VibWl0KSArICInIjsgfSk7CiAgICAgIH0KCiAgICAgIC8qINCh0LrRgNC40L_RgiDQvtCx0Y_Qt9Cw0L0g0L7RgdGC0LDRgtGM0YHRjyDRgdC40L3RgtCw0LrRgdC40YfQtdGB0LrQuCDRhtC10LvRi9C8LgogICAgICAgICDQn9GA0L7QstC10YDRj9C10Lwg0YDQsNC30LHQvtGA0L7QvCwg0J3QlSDQstGL0L_QvtC70L3Rj9GPINC60L7QtC4gKi8KICAgICAgdHJ5IHsgbmV3IEZ1bmN0aW9uKG91dCk7IH0KICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ9Ch0JHQntCg0JrQkCDQntCi0JzQldCd0JXQndCQOiDQv9C-0YHQu9C1INC_0YDQsNCy0LrQuCDQutC-0LQg0YTQvtGA0LzRiyDQv9C10YDQtdGB0YLQsNC7INCx0YvRgtGMINC60L7RgNGA0LXQutGC0L3Ri9C8ICgnICsKICAgICAgICAgIGUubWVzc2FnZSArICcpLiDQmtC-0LQg0L3QtSDQstGL0LTQsNC9LicpOwogICAgICB9CgogICAgICByZXR1cm4gb3V0OwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYnVpbGRMZCh0ZXh0LCBkKSB7CiAgICAgIHZhciBvOwogICAgICB0cnkgeyBvID0gSlNPTi5wYXJzZSh0ZXh0KTsgfQogICAgICBjYXRjaCAoZSkgeyB0aHJvdyBuZXcgRXJyb3IoJ2xkK2pzb24g0L3QtSDRh9C40YLQsNC10YLRgdGPOiAnICsgZS5tZXNzYWdlKTsgfQogICAgICAob1snQGdyYXBoJ10gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ0NvbnRhY3RQYWdlJykgewogICAgICAgICAgbi5uYW1lID0gZC5zZW8ucGFnZU5hbWU7CiAgICAgICAgICBuLmRlc2NyaXB0aW9uID0gZC5zZW8ucGFnZURlc2NyaXB0aW9uOwogICAgICAgIH0KICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1Byb2Zlc3Npb25hbFNlcnZpY2UnKSB7CiAgICAgICAgICBuLnRlbGVwaG9uZSA9IGQuc2VvLnRlbGVwaG9uZTsKICAgICAgICAgIG4uZW1haWwgPSBkLnNlby5lbWFpbDsKICAgICAgICAgIGlmIChkLnNlby5wcmljZVJhbmdlKSBuLnByaWNlUmFuZ2UgPSBkLnNlby5wcmljZVJhbmdlOwogICAgICAgICAgaWYgKG4ub3BlbmluZ0hvdXJzU3BlY2lmaWNhdGlvbikgewogICAgICAgICAgICBuLm9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24ub3BlbnMgPSBkLnNlby5vcGVuczsKICAgICAgICAgICAgbi5vcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uLmNsb3NlcyA9IGQuc2VvLmNsb3NlczsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBzYSA9IGQuc2VvLnNhbWVBcy5zcGxpdCgnXG4nKS5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudHJpbSgpOyB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICAgICAgICBpZiAoc2EubGVuZ3RoKSBuLnNhbWVBcyA9IHNhOwogICAgICAgICAgaWYgKG4uY29udGFjdFBvaW50ICYmIG4uY29udGFjdFBvaW50WzBdKSB7CiAgICAgICAgICAgIG4uY29udGFjdFBvaW50WzBdLnRlbGVwaG9uZSA9IGQuc2VvLnRlbGVwaG9uZTsKICAgICAgICAgICAgbi5jb250YWN0UG9pbnRbMF0uZW1haWwgPSBkLnNlby5lbWFpbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgLyog0J7QsdGJ0LjQtSDQutCw0YDRgtC-0YfQutC4INC_0YDQuNCy0L7QtNC40Lwg0Log0LPQu9Cw0LLQvdC-0Lkg0J_QntCh0JvQlSDRgdC-0LHRgdGC0LLQtdC90L3Ri9GFINC_0YDQsNCy0L7QujoKICAgICAgICAg0YLQtdC70LXRhNC-0L0sINC_0L7Rh9GC0LAg0Lgg0L_RgNC-0YTQuNC70Lgg0L7Qv9C40YHRi9Cy0LDRjtGCINC-0LTQvdC-0LPQviDQuCDRgtC-0LPQviDQttC1INGH0LXQu9C-0LLQtdC60LAsCiAgICAgICAgINC4INC40YHRgtC-0YfQvdC40Log0YMg0L3QuNGFINC-0LTQuNC9IOKAlCDQs9C70LDQstC90LDRjy4g0JXRgdC70Lgg0LIg0L_QvtC70Y_RhSDQv9Cw0L3QtdC70Lgg0YHRgtC-0LjRggogICAgICAgICDQtNGA0YPQs9C-0LUsINC_0LDQvdC10LvRjCDQvtCxINGN0YLQvtC8INGB0LrQsNC20LXRgiDQv9GA0Lgg0YHQsdC-0YDQutC1OiDQvNC10L3Rj9GC0Ywg0Y3RgtC4INC00LDQvdC90YvQtQogICAgICAgICDQvdCw0LTQviDQvdCwINCz0LvQsNCy0L3QvtC5LCDQuNC90LDRh9C1INGB0YLRgNCw0L3QuNGG0Ysg0YHQvdC-0LLQsCDRgNCw0LfQvtC50LTRg9GC0YHRjy4gKi8KICAgICAgdmFyIGNhbm9uQml6ID0gQVZaX0NBTk9OWydodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyddIHx8IHt9OwogICAgICBDQU5PTl9DTEFTSCA9IFtdOwogICAgICBpZiAoZC5zZW8udGVsZXBob25lICYmIGNhbm9uQml6LnRlbGVwaG9uZSAmJiBkLnNlby50ZWxlcGhvbmUgIT09IGNhbm9uQml6LnRlbGVwaG9uZSkgewogICAgICAgIENBTk9OX0NMQVNILnB1c2goJ9GC0LXQu9C10YTQvtC9INCyINGA0LDQt9C80LXRgtC60LUg0LLQt9GP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgKCcgKyBjYW5vbkJpei50ZWxlcGhvbmUgKyAnKScpOwogICAgICB9CiAgICAgIGlmIChkLnNlby5lbWFpbCAmJiBjYW5vbkJpei5lbWFpbCAmJiBkLnNlby5lbWFpbCAhPT0gY2Fub25CaXouZW1haWwpIHsKICAgICAgICBDQU5PTl9DTEFTSC5wdXNoKCfQv9C-0YfRgtCwINCyINGA0LDQt9C80LXRgtC60LUg0LLQt9GP0YLQsCDRgSDQs9C70LDQstC90L7QuSAoJyArIGNhbm9uQml6LmVtYWlsICsgJyknKTsKICAgICAgfQogICAgICBzeW5jQ2Fub24ob1snQGdyYXBoJ10gfHwgW10pOwoKICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgICB2YXIgRk9STV9QQVJUUyA9IFsKICAgICAgJ2Z1bmN0aW9ucy55YW5kZXhjbG91ZC5uZXQnLAogICAgICAnR0FTX05PVElGWV9VUkwnLAogICAgICAnZnVuY3Rpb24gc2VuZFJlcXVlc3QnLAogICAgICAnZnVuY3Rpb24gbm90aWZ5R0FTJywKICAgICAgJ2Zvcm1FbC5vbnN1Ym1pdCcsCiAgICAgICdpc1N1Ym1pdHRpbmcnLAogICAgICAnbWF4QXR0ZW1wdHMnLAogICAgICAnZi1leHRyYScsCiAgICAgICdmLWFncmVlJywKICAgICAgJ21hcmtFcnJvcicKICAgIF07CgogICAgLyog0KPQt9C70YssINCx0LXQtyDQutC-0YLQvtGA0YvRhSDRhNC-0YDQvNCwINC90LUg0YDQsNCx0L7RgtCw0LXRgjog0L_QvtC70Y8sINGB0L7Qs9C70LDRgdC40LUsINC60L3QvtC_0LrQsCwKICAgICAgINC70L7QstGD0YjQutCwINC00LvRjyDQsdC-0YLQvtCyLCDRjdC60YDQsNC9INGD0YHQv9C10YXQsCDQuCDQutC90L7Qv9C60Lgg0LLRi9Cx0L7RgNCwLiAqLwogICAgdmFyIEZPUk1fTk9ERVMgPSBbCiAgICAgICcjYXYtZm9ybScsICcjZi1uYW1lJywgJyNmLXBob25lJywgJyNmLXRnJywgJyNmLWRhdGUnLCAnI2YtbXNnJywKICAgICAgJyNmLWFncmVlJywgJyNmLXN1Ym1pdCcsICcjZi1leHRyYScsICcjZi1jaXR5LWN1c3RvbScsCiAgICAgICcjYXYtc3VjY2VzcycsCiAgICAgICcjYnRuLXNob290aW5nJywgJyNidG4tdHJhaW5pbmcnLCAnI2J0bi1zaXRlJywKICAgICAgJyNidG4ta2F6YW4nLCAnI2J0bi1tb3Njb3cnLCAnI2J0bi1vdGhlcicKICAgIF07CgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcjYXYtd3JhcCcpOwogICAgICAgIGlmICghc2NvcGUpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0LHQu9C-0LrQsCAjYXYtd3JhcCcpOwoKICAgICAgICAvKiDQk9GA0LDQvdC40YbRiyDQsdC70L7QutCwINCx0LXRgNGR0Lwg0LjQtyDRgdCw0LzQvtCz0L4g0LjRgdGF0L7QtNC90LjQutCwOiA8aGVhZD4t0YHRgtGA0L7QutC4IHdmb2xpbwogICAgICAgICAgINGB0L7QsdC40YDQsNGC0Ywg0YDQtdCz0YPQu9GP0YDQutC-0Lkg0L_QviDQtNC-0LrRg9C80LXQvdGC0YMg0L3QtdC70YzQt9GPIOKAlCDQvdCw0YLQsNGJ0LjRgiDRh9GD0LbQvtCz0L4uICovCiAgICAgICAgdmFyIExEX09QRU4gPSAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nOwogICAgICAgIHZhciBzdGFydEF0ID0gc3JjLmluZGV4T2YoJzwhLS0gU2NoZW1hLm9yZycpOwogICAgICAgIHZhciBsZEZyb20gPSBzcmMuaW5kZXhPZihMRF9PUEVOLCBzdGFydEF0KTsKICAgICAgICB2YXIgbGRUbyA9IHNyYy5pbmRleE9mKCc8JyArICcvc2NyaXB0PicsIGxkRnJvbSk7CiAgICAgICAgdmFyIHdyYXBBdCA9IHNyYy5pbmRleE9mKCc8ZGl2IGlkPSJhdi13cmFwIj4nLCBsZFRvKTsKICAgICAgICBpZiAoc3RhcnRBdCA8IDAgfHwgbGRGcm9tIDwgMCB8fCBsZFRvIDwgMCB8fCB3cmFwQXQgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ9C90LUg0YPQtNCw0LvQvtGB0Ywg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LPRgNCw0L3QuNGG0Ysg0LHQu9C-0LrQsCDigJQg0YHQsdC-0YDQutCwINC-0YLQvNC10L3QtdC90LAnKTsKICAgICAgICB9CgogICAgICAgIHZhciBoZWFkID0gc3JjLnNsaWNlKHN0YXJ0QXQsIGxkRnJvbSk7CiAgICAgICAgdmFyIGxkT2xkID0gc3JjLnNsaWNlKGxkRnJvbSArIExEX09QRU4ubGVuZ3RoLCBsZFRvKTsKICAgICAgICB2YXIgYmV0d2VlbiA9IHNyYy5zbGljZShsZFRvICsgKCc8JyArICcvc2NyaXB0PicpLmxlbmd0aCwgd3JhcEF0KTsKCiAgICAgICAgd3JpdGVBbGwoc2NvcGUsIGQpOwoKICAgICAgICB2YXIgc2MgPSBvbmUoc2NvcGUsICdzY3JpcHQ6bm90KFt0eXBlXSknKTsKICAgICAgICBpZiAoIXNjKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINCx0LvQvtC60LUg0L3QtdGCINGB0LrRgNC40L_RgtCwINGE0L7RgNC80Ysg4oCUINGB0LHQvtGA0LrQsCDQvtGC0LzQtdC90LXQvdCwJyk7CiAgICAgICAgc2MudGV4dENvbnRlbnQgPSBwYXRjaFNjcmlwdChzYy50ZXh0Q29udGVudCwgZCk7CgogICAgICAgIHZhciB0ZXh0ID0gaGVhZCArIExEX09QRU4gKyAnXG4nICsgYnVpbGRMZChsZE9sZCwgZCkgKyAnXG4nICsgJzwnICsgJy9zY3JpcHQ-JyArCiAgICAgICAgICBiZXR3ZWVuICsgc2NvcGUub3V0ZXJIVE1MOwoKICAgICAgICB2YXIgbG9zdCA9IEZPUk1fUEFSVFMuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiB0ZXh0LmluZGV4T2YocCkgPCAwOyB9KTsKCiAgICAgICAgLyog0J_RgNC-0LLQtdGA0LrQsCDRgdGC0YDQvtC60L7QuSDQvdCw0YXQvtC00LjRgiDQuCDRg9C_0L7QvNC40L3QsNC90LjQtSDQsiDQutC-0LTQtSwg0L_QvtGN0YLQvtC80YMg0YPQt9C70Ysg0YTQvtGA0LzRiwogICAgICAgICAgINC_0YDQvtCy0LXRgNGP0LXQvCDQvtGC0LTQtdC70YzQvdC-IOKAlCDRgNCw0LfQsdC-0YDQvtC8INCz0L7RgtC-0LLQvtCz0L4g0YDQtdC30YPQu9GM0YLQsNGC0LAuINCf0L7Qu9C1INC80L7QttC10YIKICAgICAgICAgICDQuNGB0YfQtdC30L3Rg9GC0Ywg0LjQtyDRgNCw0LfQvNC10YLQutC4LCDQvtGB0YLQsNCy0YjQuNGB0Ywg0LIg0YHQutGA0LjQv9GC0LU6INGB0YLRgNC-0LrQvtCy0LDRjyDQv9GA0L7QstC10YDQutCwCiAgICAgICAgICAg0Y3RgtC-0LPQviDQvdC1INGD0LLQuNC00LjRgiwg0LAg0Y3RgtCwINGD0LLQuNC00LjRgi4gKi8KICAgICAgICB2YXIgY2hlY2sgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgICBGT1JNX05PREVTLmZvckVhY2goZnVuY3Rpb24gKHNlbCkgewogICAgICAgICAgaWYgKCFjaGVjay5xdWVyeVNlbGVjdG9yKHNlbCkpIGxvc3QucHVzaCgn0L_QvtC70LUgJyArIHNlbCk7CiAgICAgICAgfSk7CgogICAgICAgIGlmIChsb3N0Lmxlbmd0aCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfQodCR0J7QoNCa0JAg0J7QotCc0JXQndCV0J3QkCDigJQg0LIg0YDQtdC30YPQu9GM0YLQsNGC0LUg0L3QtSDRhdCy0LDRgtCw0LXRgiDRh9Cw0YHRgtC10Lkg0YTQvtGA0LzRizogJyArCiAgICAgICAgICAgIGxvc3Quam9pbignLCAnKSArICcuINCa0L7QtCDQvdC1INCy0YvQtNCw0L0sINGH0YLQvtCx0Ysg0L3QtSDRgdC70L7QvNCw0YLRjCDQv9GA0LjRkdC8INC30LDRj9Cy0L7Qui4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQgfTsKICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlKSB7CiAgICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICAgINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINC00LDQttC1INC40Lcg0YLQtdGFINC60YPRgdC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L_QsNC90LXQu9GMINC60L7Qv9C40YDRg9C10YIKICAgICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgICAgdGV4dCA9IFN0cmluZyh0ZXh0KS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpjLW91dCcpOwogICAgICB0YS52YWx1ZSA9IHRleHQ7IHRhLnNlbGVjdCgpOwogICAgICB2YXIgb2sgPSBmYWxzZTsKICAgICAgdHJ5IHsgb2sgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpOyB9IGNhdGNoIChlKSB7fQogICAgICBpZiAob2spIHsgbXNnKG5vdGUpOyByZXR1cm47IH0KICAgICAgLyog0J_RgNC10LTRg9C_0YDQtdC20LTQtdC90LjRjyDQvdC10LvRjNC30Y8g0YLQtdGA0Y_RgtGMINCy0LzQtdGB0YLQtSDRgSDRgdC-0L7QsdGJ0LXQvdC40LXQvCDQvtCxINGD0YHQv9C10YXQtToKICAgICAgICAg0LXRgdC70Lgg0LHRg9GE0LXRgCDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGH0LXQu9C-0LLQtdC6INCy0YHRkSDRgNCw0LLQvdC-INC00L7Qu9C20LXQvSDQuNGFINGD0LLQuNC00LXRgtGMLiAqLwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLiAnOwogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkgewogICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oZnVuY3Rpb24gKCkgeyBtc2cobm90ZSk7IH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkgeyBtc2cobWFudWFsICsgbm90ZSk7IH0pOwogICAgICB9IGVsc2UgeyBtc2cobWFudWFsICsgbm90ZSk7IH0KICAgIH0KCiAgICAvKiDQp9Cw0YHRiyDRgNCw0LHQvtGC0Ysg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC4INCyINGA0LDQt9C80LXRgtC60LUg0LTQvtC70LbQvdGLINGB0L7QstC_0LDQtNCw0YLRjCDigJQKICAgICAgINC_0LDQvdC10LvRjCDQuNGFINC90LUg0YHQstC-0LTQuNGCINGB0LDQvNCwLCDQsCDRgdCy0LXRgNGP0LXRgiDQuCDQs9C-0LLQvtGA0LjRgiDQstGB0LvRg9GFLiAqLwogICAgZnVuY3Rpb24gd2FybmluZ3MoZCwgc2NvcGUpIHsKICAgICAgdmFyIHcgPSBbXTsKICAgICAgdmFyIHZpc2libGUgPSAoZC5oZXJvLnN1YiB8fCAnJykucmVwbGFjZSgvPFtePl0rPi9nLCAnICcpOwogICAgICB2YXIgcGFpciA9IHZpc2libGUubWF0Y2goLyhcZHsxLDJ9OlxkezJ9KVxEKyhcZHsxLDJ9OlxkezJ9KS8pOwogICAgICBpZiAocGFpciAmJiBkLnNlby5vcGVucyAmJiBkLnNlby5jbG9zZXMpIHsKICAgICAgICBpZiAocGFpclsxXSAhPT0gZC5zZW8ub3BlbnMgfHwgcGFpclsyXSAhPT0gZC5zZW8uY2xvc2VzKSB7CiAgICAgICAgICB3LnB1c2goJ9C90LAg0YHRgtGA0LDQvdC40YbQtSDRh9Cw0YHRiyAnICsgcGFpclsxXSArICfigJMnICsgcGFpclsyXSArCiAgICAgICAgICAgICcsINCwINCyINGA0LDQt9C80LXRgtC60LUgJyArIGQuc2VvLm9wZW5zICsgJ-KAkycgKyBkLnNlby5jbG9zZXMpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgdGVsID0gKGQuc29jaWFscy5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMuaHJlZi5pbmRleE9mKCdzbXM6JykgPT09IDA7IH0pWzBdIHx8IHt9KS5ocmVmIHx8ICcnOwogICAgICBpZiAodGVsICYmIGQuc2VvLnRlbGVwaG9uZSkgewogICAgICAgIHZhciBhID0gdGVsLnJlcGxhY2UoL1xEL2csICcnKSwgYiA9IGQuc2VvLnRlbGVwaG9uZS5yZXBsYWNlKC9cRC9nLCAnJyk7CiAgICAgICAgaWYgKGEgIT09IGIpIHcucHVzaCgn0YLQtdC70LXRhNC-0L0g0LIg0LrQvdC-0L_QutC1ICgnICsgYSArICcpINC4INCyINGA0LDQt9C80LXRgtC60LUgKCcgKyBiICsgJykg0YDQsNC30L3Ri9C1Jyk7CiAgICAgIH0KICAgICAgdmFyIG1haWwgPSAoZC5zb2NpYWxzLmZpbHRlcihmdW5jdGlvbiAocykgeyByZXR1cm4gcy5ocmVmLmluZGV4T2YoJ21haWx0bzonKSA9PT0gMDsgfSlbMF0gfHwge30pLmhyZWYgfHwgJyc7CiAgICAgIGlmIChtYWlsICYmIGQuc2VvLmVtYWlsICYmIG1haWwuc2xpY2UoNykgIT09IGQuc2VvLmVtYWlsKSB7CiAgICAgICAgdy5wdXNoKCfQv9C-0YfRgtCwINCyINC60L3QvtC_0LrQtSDQuCDQsiDRgNCw0LfQvNC10YLQutC1INGA0LDQt9C90YvQtScpOwogICAgICB9CiAgICAgIHJldHVybiB3OwogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emMtYnVpbGQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICB2YXIgZCA9IGNvbGxlY3QoKTsKICAgICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgICAgYXNzZW1ibGUoZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIG5vdGUgPSAn0KHQutC-0L_QuNGA0L7QstCw0L0g0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YbQtdC70LjQutC-0LwgKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAgICfQpNC-0YDQvNCwINC_0YDQvtCy0LXRgNC10L3QsCDigJQg0LLRgdC1INGH0LDRgdGC0Lgg0L3QsCDQvNC10YHRgtC1LCDRgdC60YDQuNC_0YIg0LrQvtGA0YDQtdC60YLQtdC9LiAnICsKICAgICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6INC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLic7CiAgICAgICAgdmFyIHcgPSB3YXJuaW5ncyhkKS5jb25jYXQoQ0FOT05fQ0xBU0gpOwogICAgICAgIGlmICh3Lmxlbmd0aCkgbm90ZSArPSAnINCf0YDQvtCy0LXRgNGM0YLQtTogJyArIHcuam9pbignOyAnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKGUubWVzc2FnZSk7IH0pOwogICAgfTsKCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnpjLXRlc3QnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICBtc2coJ9Cf0YDQvtCy0LXRgNGP0Y7igKYnKTsKICAgICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhc3NlbWJsZShzbmFwKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLnF1ZXJ5U2VsZWN0b3IoJyNhdi13cmFwJykpOwogICAgICAgIHJlYWRMZChkb2MsIGFnYWluKTsKICAgICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KHNuYXApLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIG1zZygn0KDQkNCh0KXQntCW0JTQldCd0JjQlSDigJQg0YHQvNC-0YLRgNC40YLQtSDQutC-0L3RgdC-0LvRjC4nKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INGB0YLQsNC70L4nLCBKU09OLnBhcnNlKGIpKTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKICB9CgogIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJyNhdi13cmFwJyk7CiAgICBpZiAoIXNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgI2F2LXdyYXAnKTsKICAgIGNmZyA9IHJlYWRDZmcoc2NvcGUpOwogICAgcmVhZExkKGRvYywgY2ZnKTsKICAgIHN0YXJ0KCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgIHJvb3QuaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6Yy13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6Yy1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC60L7QvdGC0LDQutGC0L7QsjwvaDI-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpjLWJvZHkiPjxwIGNsYXNzPSJhdnpjLWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINC60L7QvdGC0LDQutGC0L7QsiDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoidHV0b3JpYWwiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0L7QsdGD0YfQtdC90LjRjyIsc2hvcnQ6ItCe0LHRg9GH0LXQvdC40LUiLGhpbnQ6ItGE0L7RgNC80LDRgtGLLCDRhtC10L3Riywg0LzQvtC00YPQu9C4LCDQstC-0L_RgNC-0YHRiyIscGFnZXM6WyIvdHV0b3JpYWwiXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0J7QkdCj0KfQldCd0JjQryAgdjEg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsAogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgL3R1dG9yaWFsCgogICDQp9C40YLQsNC10YIg0JjQodCl0J7QlNCd0KvQmSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiywg0L_QvtC00YHRgtCw0LLQu9GP0LXRgiDQt9C90LDRh9C10L3QuNGPINC40Lcg0YTQvtGA0LzRiwogICDQuCDQstGL0LTQsNGR0YIg0LLQtdGB0Ywg0LHQu9C-0Log0YbQtdC70LjQutC-0LwuCgogICDQptC10L3RiyDQt9C00LXRgdGMINGB0YLQvtGP0YIg0LIg0L3QtdGB0LrQvtC70YzQutC40YUg0LzQtdGB0YLQsNGFINGB0YDQsNC30YMsINC4INC_0LDQvdC10LvRjCDQtNC10YDQttC40YIg0LjRhQogICDQstC80LXRgdGC0LU6INGG0LXQvdCwINC80L7QtNGD0LvRjNC90L7Qs9C-INC60YPRgNGB0LAg4oCUINCyINC60LDRgNGC0L7Rh9C60LUg0YTQvtGA0LzQsNGC0LAsINCyINCx0LDQvdC90LXRgNC1CiAgINGB0YLQvtC40LzQvtGB0YLQuCDQuCDQsiDRgNCw0LfQvNC10YLQutC1OyDQuNC90YLQtdC90YHQuNCyLCDQtNC-0L8t0LzQvtC00YPQu9GMINC4INC60L7QvNC_0LvQtdC60YIg4oCUCiAgINCyINGB0LLQvtC40YUg0LrQsNGA0YLQvtGH0LrQsNGFINC4INCyINGA0LDQt9C80LXRgtC60LUuINCg0LDQt9C-0LnRgtC40YHRjCDQuNC8INC90LXRh9C10LwuCgogICDQp9C10LPQviDQv9Cw0L3QtdC70Ywg0J3QlSDQtNC10LvQsNC10YIg0YHQsNC80LA6INC90LUg0L_QvtC00LzQtdC90Y_QtdGCINGH0LjRgdC70LAg0LLQvdGD0YLRgNC4INC20LjQstGL0YUKICAg0YTRgNCw0LcuINCV0YHQu9C4INGG0LXQvdCwINGD0L_QvtC80Y_QvdGD0YLQsCDQsiDQvtGC0LLQtdGC0LUg0L3QsCDQstC-0L_RgNC-0YEsINC-0L3QsCDQvtCxINGN0YLQvtC8CiAgINGB0LrQsNC20LXRgiDQv9GA0Lgg0YHQsdC-0YDQutC1INC4INC90LDQt9C-0LLRkdGCINC80LXRgdGC0L4g4oCUINC_0L7QtNGB0YLQsNCy0LvRj9GC0Ywg0YfQuNGB0LvQvgogICDQsiDQv9GA0LXQtNC70L7QttC10L3QuNC1INCy0YHQu9C10L_Rg9GOINC-0L_QsNGB0L3QtdC1LgoKICAg0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLINGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvjogR29vZ2xlCiAgINC30LDRgdGH0LjRgtGL0LLQsNC10YIg0LjRhSDRgtC-0LvRjNC60L4g0L_RgNC4INC00L7RgdC70L7QstC90L7QvCDRgdC-0LLQv9Cw0LTQtdC90LjQuC4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQo9C30LvRiyAjcGhvdG9ncmFwaGVyLCAjYnVzaW5lc3Mg0LggI3dlYnNpdGUg0L7Qv9C40YHRi9Cy0LDRjtGCINC-0LTQvdC-0LPQviDQuCDRgtC-0LPQviDQttC1CiAgICAg0YfQtdC70L7QstC10LrQsCwg0L7QtNC90L4g0LTQtdC70L4g0Lgg0L7QtNC40L0g0YHQsNC50YIuINCe0LTQuNC9INC4INGC0L7RgiDQttC1IEBpZCwg0L7Qv9C40YHQsNC90L3Ri9C5CiAgICAg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlCDQvNC-0LvRh9Cw0LvQuNCy0LDRjyDQv9C-0LvQvtC80LrQsDog0L_QvtC40YHQutC-0LLQuNC6CiAgICAg0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuCDQstC10YDQuNGC0YwsINC4INC90LDQs9GA0LDQtNGLINC80L7Qs9GD0YIg0L_RgNC-0YHRgtC-CiAgICAg0L3QtSDQt9Cw0YHRh9C40YLQsNGC0YzRgdGPLiDQn9Cw0L3QtdC70Ywg0L_RgNC40LLQvtC00LjRgiDQuNGFINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LAogICAgINC_0L7RjdGC0L7QvNGDINGA0LDRgdGF0L7QtNC40YLRjNGB0Y8g0LjQvCDQsdC-0LvRjNGI0LUg0L3QtdGH0LXQvC4KCiAgICAg0K3RgtCw0LvQvtC9INGB0L3Rj9GCINGBINCz0LvQsNCy0L3QvtC5IDMwINC-0LrRgtGP0LHRgNGPIDIwMjYuINCV0YHQu9C4INCz0LvQsNCy0L3Rg9GOINC00L7Qv9C-0LvQvdGP0YIg4oCUCiAgICAg0L7QsdC90L7QstC40YLRjCDQt9C00LXRgdGMINC4INC_0LXRgNC10YHQvtCx0YDQsNGC0Ywg0L3QsNCx0L7RgDogcHl0aG9uMyBwYWNrLXRvb2xraXQucHkgKi8KICB2YXIgQVZaX0NBTk9OID0gewogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciI6IHsKICAgICAgIkB0eXBlIjogIlBlcnNvbiIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IiwKICAgICAgImFsdGVybmF0ZU5hbWUiOiAiQXZhbnphdG8iLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LguINCf0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM0L3QsNGPINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINGBIDIwMTkg0LPQvtC00LAuINCR0L7Qu9C10LUgMjUwINGA0LXQsNC70LjQt9C-0LLQsNC90L3Ri9GFINC_0YDQvtC10LrRgtC-0LIuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogWwogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwLzBpT2ZMSWV2UE1wUTVfRkc2TUtEY092UEhZNFNjaVAyLzN2OHdjUGhsTmpvVUhKWV94MUY5QlBkNjJ4T3NNNU8xLzg1WldiNmRZRmdUOWIzM0gzSUcxbmcuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L2NYUFpQbXU5bEN3NXRrUk5hdDdKdHlIanJQaVppY2xOL1ZKZ0lybHVGTHRaV0d3emFUNUZKMDdEdVNLX19iVFFBL3k4RG02SlpWQ25sNENVRnprZW94Y2h2UEkxd1ZkRENLLzctVW9MS0MyZ1FrcmdhWHhyclN5THFZdGFNR1J6X3UtL3BCWWdSWDVzUGJZeFhCT1BtRGxYRVEuanBlZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9vVzRxai1tTFN4T0dKTGZEbWJTRERhYmhwTlc4bmVLOC80bFZuTU04Wm5DekN5RWJnWEluSHpDdkNwclBHcXJKNi9IOXViVDBIOUlGQUNiYk9QeGVuRjdRLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC9fUkJzYU1oRzBqR01NN182c2xveUVQc2RWLVpPVjNpdy81dHlPSDk2LTJSdU9VLXBfSUtCd1UwMER6NVhJOXJ0VC9BY29McjZ0RGhCQV8xc1Yzb2l0Q3JRLmpwZyIKICAgICAgXSwKICAgICAgImpvYlRpdGxlIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQiLAogICAgICAia25vd3NBYm91dCI6IFsKICAgICAgICAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8iLAogICAgICAgICLQnNGD0LbRgdC60L7QuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCW0LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JvQuNGH0L3Ri9C5INCx0YDQtdC90LQiLAogICAgICAgICLQoNC10L_QvtGA0YLQsNC20L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCf0YDQtdC00LzQtdGC0L3QsNGPINGB0YrRkdC80LrQsCDQtNC70Y8g0LzQsNGA0LrQtdGC0L_Qu9C10LnRgdC-0LIiLAogICAgICAgICLQmNC90YLQtdGA0YzQtdGA0L3QsNGPINC4INCw0YDRhdC40YLQtdC60YLRg9GA0L3QsNGPINGB0YrRkdC80LrQsCIsCiAgICAgICAgItCQ0LLRgtC-0LzQvtCx0LjQu9GM0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIKICAgICAgXSwKICAgICAgImF3YXJkIjogWwogICAgICAgICJQb3J0Zm9saW8gQXdhcmQgMjAyNCDigJQgMiDQvNC10YHRgtC-LCDRgdC10YDQuNGPINCg0LXQv9C-0YDRgtCw0LYiLAogICAgICAgICJUaGUgUGxhY2UgRWNvbm9teSBWb2wuMyBieSBIb3luZSAoQXVzdHJhbGlhKSIsCiAgICAgICAgIjUwMHB4IEF3YXJkcyIsCiAgICAgICAgIkFnb3JhIEF3YXJkcyIsCiAgICAgICAgIjM1YXdhcmRzIgogICAgICBdLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly8yMDI0LnBvcnRmb2xpb2F3YXJkLmNvbS8jc2VjdGlvbi0xOTAwNjE1NyIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIndvcmtMb2NhdGlvbiI6IHsKICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICB9CiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIjogewogICAgICAiQHR5cGUiOiAiUHJvZmVzc2lvbmFsU2VydmljZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiLAogICAgICAibmFtZSI6ICJBdmFuemF0byDigJQg0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7Qs9GA0LDRhNC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C1INGE0L7RgtC-0YHQtdGB0YHQuNC4INCyINCa0LDQt9Cw0L3QuCDRgSAyMDE5INCz0L7QtNCwOiDRgdGC0YPQtNC40Y8g0Lgg0YPQu9C40YbQsCwg0LzRg9C20YHQutC-0Lkg0Lgg0LbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIsINGB0YrRkdC80LrQsCDQtNC70Y8g0LvQuNGH0L3QvtCz0L4g0LHRgNC10L3QtNCwLiAyNTArINC_0YDQvtC10LrRgtC-0LIsIDUg0LzQtdC20LTRg9C90LDRgNC-0LTQvdGL0YUg0L3QsNCz0YDQsNC0LiDQktGL0LXQt9C00Ysg0LIg0JzQvtGB0LrQstGDLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6ICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRHcxNUVJRXU5aVZOLXN4SDZPWGRVcEpSZ2Z0blIyLWUvRFl4Z21iNzByRk9ncUpObVFuT0dfUmNnMGJyNF9WVHovbi05R0pBZmp6TVB0RjFQaUtnYnI3T1lmMGVoRkd0RE8vdWFTMXZ3RU9GUGdRTkllRkFCeGFZN3REX21Pd1kzSUIvZzBnc0xwa2kwaGM3WElJY19BZ25GSnp1VzgyMElJMzMvUjVpZFVYckpzQlEucG5nIiwKICAgICAgImZvdW5kZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJmb3VuZGluZ0RhdGUiOiAiMjAxOS0wMS0wMSIsCiAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgImFkZHJlc3MiOiB7CiAgICAgICAgIkB0eXBlIjogIlBvc3RhbEFkZHJlc3MiLAogICAgICAgICJhZGRyZXNzTG9jYWxpdHkiOiAi0JrQsNC30LDQvdGMIiwKICAgICAgICAiYWRkcmVzc1JlZ2lvbiI6ICLQoNC10YHQv9GD0LHQu9C40LrQsCDQotCw0YLQsNGA0YHRgtCw0L0iLAogICAgICAgICJhZGRyZXNzQ291bnRyeSI6ICJSVSIKICAgICAgfSwKICAgICAgImdlbyI6IHsKICAgICAgICAiQHR5cGUiOiAiR2VvQ29vcmRpbmF0ZXMiLAogICAgICAgICJsYXRpdHVkZSI6IDU1Ljc4ODcsCiAgICAgICAgImxvbmdpdHVkZSI6IDQ5LjEyMjEKICAgICAgfSwKICAgICAgImFyZWFTZXJ2ZWQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JrQsNC30LDQvdGMIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICAgIm5hbWUiOiAi0JzQvtGB0LrQstCwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInByaWNlUmFuZ2UiOiAiMTQ5MDAtNTQ5MDAiLAogICAgICAib3BlbmluZ0hvdXJzU3BlY2lmaWNhdGlvbiI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT3BlbmluZ0hvdXJzU3BlY2lmaWNhdGlvbiIsCiAgICAgICAgICAiZGF5T2ZXZWVrIjogWwogICAgICAgICAgICAiTW9uZGF5IiwKICAgICAgICAgICAgIlR1ZXNkYXkiLAogICAgICAgICAgICAiV2VkbmVzZGF5IiwKICAgICAgICAgICAgIlRodXJzZGF5IiwKICAgICAgICAgICAgIkZyaWRheSIsCiAgICAgICAgICAgICJTYXR1cmRheSIsCiAgICAgICAgICAgICJTdW5kYXkiCiAgICAgICAgICBdLAogICAgICAgICAgIm9wZW5zIjogIjEwOjAwIiwKICAgICAgICAgICJjbG9zZXMiOiAiMjA6MDAiCiAgICAgICAgfQogICAgICBdLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYXZhbnphdG8vIiwKICAgICAgICAiaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFudG9uaW9hdmFuemF0byIKICAgICAgXSwKICAgICAgIm1ha2VzT2ZmZXIiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICAgICAicHJpY2UiOiAiMTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0cmFpdC1waG90b3Nlc3Npb24iCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1ICjQstGB0ZEg0LLQutC70Y7Rh9C10L3QvikiLAogICAgICAgICAgInByaWNlIjogIjU0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLRi9C10LfQtNC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcGhvdG9ncmFwaF9tb3Njb3ciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCDigJQg0LTQvtC_0L7Qu9C90LXQvdC40LUg0Log0YTQvtGC0L7RgdC10YHRgdC40LgiLAogICAgICAgICAgInByaWNlIjogIjYwMDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4iCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdLAogICAgICAiY29udGFjdFBvaW50IjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDb250YWN0UG9pbnQiLAogICAgICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgICAgICJjb250YWN0VHlwZSI6ICJjdXN0b21lciBzZXJ2aWNlIiwKICAgICAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgICAgICJhcmVhU2VydmVkIjogIlJVIiwKICAgICAgICAgICJhdmFpbGFibGVMYW5ndWFnZSI6IFsKICAgICAgICAgICAgIlJ1c3NpYW4iLAogICAgICAgICAgICAiRW5nbGlzaCIKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSI6IHsKICAgICAgIkB0eXBlIjogIldlYlNpdGUiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4g4oCUINCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4IiwKICAgICAgInB1Ymxpc2hlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImluTGFuZ3VhZ2UiOiAicnUtUlUiCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3luY0Nhbm9uKGdyYXBoKSB7CiAgICBpZiAoIWdyYXBoIHx8ICFncmFwaC5sZW5ndGgpIHJldHVybiBbXTsKICAgIHZhciBkb25lID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyYXBoLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpZCA9IGdyYXBoW2ldICYmIGdyYXBoW2ldWydAaWQnXTsKICAgICAgaWYgKGlkICYmIEFWWl9DQU5PTltpZF0pIHsKICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JhcGhbaV0pICE9PSBKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSkgewogICAgICAgICAgZG9uZS5wdXNoKFN0cmluZyhpZCkuc3BsaXQoJyMnKVsxXSk7CiAgICAgICAgfQogICAgICAgIGdyYXBoW2ldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBVlpfQ0FOT05baWRdKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkb25lOwogIH0KCiAgdmFyIG9sZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdnpsLXJvb3QnKTsKICBpZiAob2xkKSBvbGQucmVtb3ZlKCk7CgogIHZhciBNQVhXID0gMTI0MDsKCiAgZnVuY3Rpb24gb25lKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIGVsLnF1ZXJ5U2VsZWN0b3Ioc2VsKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9CiAgZnVuY3Rpb24gYWxsKGVsLCBzZWwpIHsgdHJ5IHsgcmV0dXJuIFtdLnNsaWNlLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbChzZWwpKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gW107IH0gfQogIGZ1bmN0aW9uIHQoZWwpIHsgcmV0dXJuIGVsID8gZWwudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBodG1sKGVsKSB7IHJldHVybiBlbCA_IGVsLmlubmVySFRNTC50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIGF0dHIoZWwsIGEpIHsgcmV0dXJuIGVsID8gKGVsLmdldEF0dHJpYnV0ZShhKSB8fCAnJykgOiAnJzsgfQoKICAvKiDQotC10LrRgdGCINC00LvRjyDRgNCw0LfQvNC10YLQutC4OiA8YnI–INGB0LDQvCDQv9C-INGB0LXQsdC1INC_0YDQvtCx0LXQu9CwINC90LUg0LTQsNGR0YIsINC4IMKr0LfQsNC90Y_RgtC40LkuPGJyPjxicj7QnNC-0LTRg9C70YzQvdGL0LnCuwogICAgINC_0YDQtdCy0YDQsNGJ0LDQu9C-0YHRjCDQsiDCq9C30LDQvdGP0YLQuNC5LtCc0L7QtNGD0LvRjNC90YvQucK7IOKAlCDRgdC70LjQv9GI0LjQtdGB0Y8g0YHQu9C-0LLQsCDQsiDQvtGC0LLQtdGC0LUg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutCwLgogICAgINCf0L7RjdGC0L7QvNGDINC_0LXRgNC10L3QvtGB0Ysg0LfQsNC80LXQvdGP0LXQvCDQv9GA0L7QsdC10LvQvtC8INC00L4g0YLQvtCz0L4sINC60LDQuiDQsdGA0LDRgtGMINGC0LXQutGB0YIuICovCiAgZnVuY3Rpb24gdGV4dFdpdGhCcmVha3MoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBjID0gZWwuY2xvbmVOb2RlKHRydWUpOwogICAgYWxsKGMsICdicicpLmZvckVhY2goZnVuY3Rpb24gKGJyKSB7CiAgICAgIGJyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpLCBicik7CiAgICB9KTsKICAgIHJldHVybiBjLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CiAgZnVuY3Rpb24gZGlnaXRzKHMpIHsgcmV0dXJuIFN0cmluZyhzIHx8ICcnKS5yZXBsYWNlKC9bXjAtOV0vZywgJycpOyB9CiAgZnVuY3Rpb24gbW9uZXkocykgeyByZXR1cm4gZGlnaXRzKHMpLnJlcGxhY2UoL1xCKD89KFxkezN9KSsoPyFcZCkpL2csICcgJyk7IH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiByZWFkVGlja2VyKHNyYykgewogICAgdmFyIG0gPSBzcmMubWF0Y2goL3ZhciBpdGVtcyA9IFxbKFtcc1xTXSo_KVxdOy8pOwogICAgaWYgKCFtKSByZXR1cm4gW107CiAgICByZXR1cm4gKG1bMV0ubWF0Y2goLycoW14nXSopJy9nKSB8fCBbXSkubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnNsaWNlKDEsIC0xKTsgfSk7CiAgfQoKICBmdW5jdGlvbiByZWFkRm9yayhmKSB7CiAgICByZXR1cm4gewogICAgICBleWVicm93OiBvd25UZXh0KG9uZShmLCAnLmZvcmstZXllYnJvdycpKSwKICAgICAgaDM6IGh0bWwob25lKGYsICdoMycpKSwKICAgICAgc3ViOiB0KG9uZShmLCAnLmZvcmstc3ViJykpLAogICAgICBjaGlwczogYWxsKGYsICcuZm9yay1tb2RlIC5jaGlwJykubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBvd25UZXh0KGMpOyB9KSwKICAgICAgaXRlbXM6IGFsbChmLCAnLmZvcmstbGlzdCBsaScpLm1hcChmdW5jdGlvbiAobGkpIHsgcmV0dXJuIHQob25lKGxpLCAnc3Bhbjpub3QoLmljb24pJykpOyB9KSwKICAgICAgZnJvbTogdChvbmUoZiwgJy5mcC1mcm9tJykpLAogICAgICAvKiDRh9C40YHQu9C-INGA0LjRgdGD0LXRgiDRgdC60YDQuNC_0YIg0YHRgtGA0LDQvdC40YbRiywg0LIg0LrQvtC00LUg0YHRgtC-0LjRgiAwIOKAlAogICAgICAgICDQvdCw0YHRgtC-0Y_RidCw0Y8g0YbQtdC90LAg0LbQuNCy0ZHRgiDQsiBkYXRhLXRhcmdldCAqLwogICAgICBwcmljZTogYXR0cihvbmUoZiwgJy5mcC1ub3cgLmF2LWNvdW50ZXInKSwgJ2RhdGEtdGFyZ2V0JyksCiAgICAgIG9sZFByaWNlOiB0KG9uZShmLCAnLmZwLW9sZCcpKSwKICAgICAgbm90ZTogdChvbmUoZiwgJy5mcC1ub3RlJykpLAogICAgICAvKiDQtNC-0L8t0LzQvtC00YPQu9GMINC_0L7QutCw0LfRi9Cy0LDQtdGC0YHRjyDQv9GA0Y_QvNC-INCyINC60LDRgNGC0L7Rh9C60LUg0LrRg9GA0YHQsCDigJQg0LXRgdGC0Ywg0L3QtSDRgyDQstGB0LXRhSDRhNC-0YDQvNCw0YLQvtCyICovCiAgICAgIGFkZG9uOiBvbmUoZiwgJy5mb3JrLWFkZG9uJykgPyB7CiAgICAgICAgbGFiZWw6IHQob25lKGYsICcuZmEtbGFiZWwnKSksCiAgICAgICAgbmFtZTogdChvbmUoZiwgJy5mYS1yb3cgYScpKSB8fCB0KG9uZShmLCAnLmZhLXJvdycpKSwKICAgICAgICBwcmljZTogYXR0cihvbmUoZiwgJy5mYS1wcmljZSAuYXYtY291bnRlcicpLCAnZGF0YS10YXJnZXQnKSwKICAgICAgICBub3RlOiB0KG9uZShmLCAnLmZhLW5vdGUnKSkKICAgICAgfSA6IG51bGwsCiAgICAgIGJ0bjogdChvbmUoZiwgJy5mb3JrLWJ0biBzcGFuOm5vdCguaWNvbiknKSksCiAgICAgIGhyZWY6IGF0dHIob25lKGYsICcuZm9yay1idG4nKSwgJ2hyZWYnKQogICAgfTsKICB9CgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUsIHNyYykgewogICAgdmFyIGlubmVycyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgdmFyIGxhYmVscyA9IGFsbChzY29wZSwgJy5zZWN0aW9uLWxhYmVsJyk7CiAgICB2YXIgZm9ya3MgPSBhbGwoc2NvcGUsICcuZm9yaycpOwogICAgdmFyIGFkZG9uID0gb25lKHNjb3BlLCAnLmFkZG9uJyk7CgogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IG93blRleHQob25lKHNjb3BlLCAnLmV5ZWJyb3cnKSksCiAgICAgICAgbGluZTE6IHQoaW5uZXJzWzBdKSwgbGluZTI6IHQoaW5uZXJzWzFdKSwKICAgICAgICBsaW5lMzogaW5uZXJzWzJdID8gaHRtbChpbm5lcnNbMl0pIDogJycsCiAgICAgICAgbGVkZTogdChvbmUoc2NvcGUsICcubGVkZScpKQogICAgICB9LAogICAgICBsYWJlbHM6IGxhYmVscy5tYXAoZnVuY3Rpb24gKGwpIHsKICAgICAgICByZXR1cm4geyBoMjogdChvbmUobCwgJ2gyJykpLCBhc2lkZTogb25lKGwsICcuc2wtYXNpZGUnKSA_IG93blRleHQob25lKGwsICcuc2wtYXNpZGUnKSkgOiAnJyB9OwogICAgICB9KSwKICAgICAgdGlja2VyOiByZWFkVGlja2VyKHNyYyksCiAgICAgIGZvcmtzOiBmb3Jrcy5tYXAocmVhZEZvcmspLAogICAgICBmZWF0dXJlOiB7CiAgICAgICAgaW1nOiBhdHRyKG9uZShzY29wZSwgJy5mZWF0dXJlLW1lZGlhIGltZycpLCAnc3JjJyksCiAgICAgICAgYWx0OiBhdHRyKG9uZShzY29wZSwgJy5mZWF0dXJlLW1lZGlhIGltZycpLCAnYWx0JyksCiAgICAgICAgLyog0YHQstC-0Lgg0YTQvtC90Ysg0L7QsdC70L7QttC60Lgg0Lgg0YTQuNC90LDQu9CwICh2Mi40KTsg0L_Rg9GB0YLQviDigJQg0LHQtdGA0ZHRgtGB0Y8g0YjQuNGA0L7QutC40Lkg0LrQsNC00YAgKi8KICAgICAgICBiZ0NvdmVyOiBhdHRyKG9uZShzY29wZSwgJ3NlY3Rpb24uaW50cm8nKSwgJ2RhdGEtYmcnKSB8fCAnJywKICAgICAgICBiZ0N0YTogYXR0cihvbmUoc2NvcGUsICdzZWN0aW9uLmN0YScpLCAnZGF0YS1iZycpIHx8ICcnLAogICAgICAgIGNhcDogdChvbmUoc2NvcGUsICcuZmVhdHVyZS1jYXAgc3BhbicpKQogICAgICB9LAogICAgICBtZXRob2Q6IHsKICAgICAgICBsYWJlbDogdChvbmUoc2NvcGUsICcuc3RydWN0dXJlLXNlY3Rpb24gLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5zdHJ1Y3R1cmUtc2VjdGlvbiAuaDInKSksCiAgICAgICAgaXRlbXM6IGFsbChzY29wZSwgJy5hZHYtaXRlbScpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgICAgcmV0dXJuIHsgaWNvbjogdChvbmUoYSwgJy5pY29uJykpLCBoMzogdChvbmUoYSwgJ2gzJykpLCBwOiB0KG9uZShhLCAncCcpKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGFib3V0OiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLmFib3V0LXRleHQgLmxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5hYm91dC10ZXh0IC5oMicpKSwKICAgICAgICBjaGVja3M6IGFsbChzY29wZSwgJy5jaGVjay1pdGVtJykubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiB0KG9uZShjLCAnc3Bhbjpub3QoLmljb24pJykpOyB9KSwKICAgICAgICB0YWdzOiBhbGwoc2NvcGUsICcudGFnJykubWFwKGZ1bmN0aW9uICh4KSB7IHJldHVybiB0KHgpOyB9KSwKICAgICAgICBzdGF0czogYWxsKHNjb3BlLCAnLnN0YXRzID4gZGl2JykubWFwKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgICB2YXIgbiA9IG9uZShkLCAnLnN0YXQtbnVtJyk7CiAgICAgICAgICByZXR1cm4geyB0YXJnZXQ6IGF0dHIobiwgJ2RhdGEtdGFyZ2V0JyksIHZhbHVlOiBhdHRyKG4sICdkYXRhLXRhcmdldCcpID8gJycgOiB0KG4pLCBsYWJlbDogdChvbmUoZCwgJy5zdGF0LWxhYmVsJykpIH07CiAgICAgICAgfSksCiAgICAgICAgdGFnOiB0KG9uZShzY29wZSwgJy5hYm91dC10YWcnKSksCiAgICAgICAgaW1nOiBhdHRyKG9uZShzY29wZSwgJy5hYm91dC1tZWRpYSBpbWcnKSwgJ3NyYycpLAogICAgICAgIGFsdDogYXR0cihvbmUoc2NvcGUsICcuYWJvdXQtbWVkaWEgaW1nJyksICdhbHQnKQogICAgICB9LAogICAgICBwcm9ncmFtOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLm1vZHVsZXMtc2VjdGlvbiAubGFiZWwnKSksCiAgICAgICAgaDI6IGh0bWwob25lKHNjb3BlLCAnLm1vZHVsZXMtc2VjdGlvbiAuaDInKSkKICAgICAgfSwKICAgICAgcm9hZG1hcDogYWxsKHNjb3BlLCAnLnJtLW5vZGUnKS5tYXAoZnVuY3Rpb24gKG4pIHsKICAgICAgICByZXR1cm4geyB0aXA6IHQob25lKG4sICcucm0tbm9kZS10aXAnKSksIG51bTogdChvbmUobiwgJy5ybS1ub2RlLW51bScpKSwgaHJlZjogYXR0cihuLCAnaHJlZicpIH07CiAgICAgIH0pLAogICAgICBtb2R1bGVzOiBhbGwoc2NvcGUsICcubW9kLWNhcmQnKS5tYXAoZnVuY3Rpb24gKGMpIHsKICAgICAgICB2YXIgZm9vdCA9IGFsbChjLCAnLm1vZC1mb290ID4gc3BhbicpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBudW06IHQob25lKGMsICcubW9kLW51bScpKSwgdGFnOiB0KG9uZShjLCAnLm1vZC10YWcnKSksCiAgICAgICAgICBoMzogdChvbmUoYywgJ2gzJykpLCBwOiB0KG9uZShjLCAncCcpKSwKICAgICAgICAgIHRhc2tzOiBmb290WzBdID8gb3duVGV4dChmb290WzBdKSA6ICcnLAogICAgICAgICAgdG9vbDogZm9vdFsxXSA_IHQoZm9vdFsxXSkgOiAnJwogICAgICAgIH07CiAgICAgIH0pLAogICAgICBhZGRvbjogewogICAgICAgIGNoaXA6IG93blRleHQob25lKGFkZG9uLCAnLmFkZG9uLWNoaXAnKSksCiAgICAgICAgaDM6IGh0bWwob25lKGFkZG9uLCAnaDMnKSksCiAgICAgICAgc3ViOiBodG1sKG9uZShhZGRvbiwgJy5hZGRvbi1zdWInKSksCiAgICAgICAgaXRlbXM6IGFsbChhZGRvbiwgJy5hZGRvbi1saXN0IGxpJykubWFwKGZ1bmN0aW9uIChsaSkgeyByZXR1cm4gdChvbmUobGksICdzcGFuOm5vdCguaWNvbiknKSk7IH0pLAogICAgICAgIG1ldGE6IGFsbChhZGRvbiwgJy5hZGRvbi1tZXRhIC5jaGlwJykubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBvd25UZXh0KGMpOyB9KSwKICAgICAgICBvZmZlcnM6IGFsbChhZGRvbiwgJy5hZGRvbi1vZmZlcicpLm1hcChmdW5jdGlvbiAobykgewogICAgICAgICAgcmV0dXJuIHsgd2hvOiB0KG9uZShvLCAnLmFvLXdobycpKSwgdGV4dDogdChvbmUobywgJy5hby10ZXh0JykpIH07CiAgICAgICAgfSksCiAgICAgICAgYnRuOiB0KG9uZShhZGRvbiwgJy5hZGRvbi1idG4gc3Bhbjpub3QoLmljb24pJykpLAogICAgICAgIGhyZWY6IGF0dHIob25lKGFkZG9uLCAnLmFkZG9uLWJ0bicpLCAnaHJlZicpCiAgICAgIH0sCiAgICAgIGZhcTogYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgIHJldHVybiB7IHE6IHQob25lKGl0LCAnLmZhcS1xLXRleHQnKSksIGE6IGh0bWwob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH07CiAgICAgIH0pLAogICAgICBjdGE6IHsKICAgICAgICBoMjogaHRtbChvbmUoc2NvcGUsICcuY3RhIC5oMicpKSwKICAgICAgICBidXR0b25zOiBhbGwoc2NvcGUsICcuY3RhIC5idG4nKS5tYXAoZnVuY3Rpb24gKGIpIHsKICAgICAgICAgIHJldHVybiB7IHRleHQ6IHQob25lKGIsICcuYnRuLWxhYmVsIHNwYW4nKSksIGhyZWY6IGF0dHIoYiwgJ2hyZWYnKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIGZvb3ROb3RlOiBodG1sKG9uZShzY29wZSwgJy5mb290LW5vdGUnKSksCiAgICAgIHNlbzogeyBwYWdlTmFtZTogJycsIHBhZ2VEZXNjcmlwdGlvbjogJycsIGNvdXJzZU5hbWU6ICcnLCBjb3Vyc2VEZXNjcmlwdGlvbjogJycgfQogICAgfTsKICB9CgogIGZ1bmN0aW9uIHJlYWRMZChkb2MsIGNmZykgewogICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpWzBdOwogICAgaWYgKCFzKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgIChvWydAZ3JhcGgnXSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnV2ViUGFnZScpIHsKICAgICAgICAgIGNmZy5zZW8ucGFnZU5hbWUgPSBuLm5hbWUgfHwgJyc7IGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdDb3Vyc2UnKSB7CiAgICAgICAgICBjZmcuc2VvLmNvdXJzZU5hbWUgPSBuLm5hbWUgfHwgJyc7IGNmZy5zZW8uY291cnNlRGVzY3JpcHRpb24gPSBuLmRlc2NyaXB0aW9uIHx8ICcnOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7IC8qINGB0LHQvtGA0LrQsCDRgdC-0L7QsdGJ0LjRgiAqLyB9CiAgfQoKICAvKiAtLS0tLS0tLS0tINC_0LDQvdC10LvRjCAtLS0tLS0tLS0tICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2emwtcm9vdCwjYXZ6bC1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6bC1yb290IGlucHV0LCNhdnpsLXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnpsLXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6bC1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnpsLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbigxMDAwcHgsMTAwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JveC1zaGFkb3c6MCAzMHB4IDgwcHggcmdiYSgwLDAsMCwuMzUpO292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnpsLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emwtaGVhZCBoMnttYXJnaW46MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo2MDA7ZmxleDoxfScsCiAgICAnI2F2emwtYm9keXtmbGV4OjE7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjhweCAyMHB4IDI0cHh9JywKICAgICcjYXZ6bC1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtYntmb250OmluaGVyaXQ7cGFkZGluZzo5cHggMTZweDtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1iOmhvdmVye2JvcmRlci1jb2xvcjojODY4NjhifScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLXNlY3tib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi10b3A6MTRweDtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6bC1yb290IC5hdnpsLXNlYz5zdW1tYXJ5e3BhZGRpbmc6MTJweCAxNHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDtiYWNrZ3JvdW5kOiNmYWZhZmE7bGlzdC1zdHlsZTpub25lfScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLXNlYz5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUI4ICAiO2NvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLXNlY1tvcGVuXT5zdW1tYXJ5OjpiZWZvcmV7Y29udGVudDoiXFwyNUJFICAifScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLWZ7bWFyZ2luLWJvdHRvbToxMnB4fScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1mIGxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjExcHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206NHB4fScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1mIGlucHV0LCNhdnpsLXJvb3QgLmF2emwtZiB0ZXh0YXJlYXt3aWR0aDoxMDAlO2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjhweCAxMHB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6N3B4O2JhY2tncm91bmQ6I2ZmZn0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtZiB0ZXh0YXJlYXttaW4taGVpZ2h0OjcwcHg7cmVzaXplOnZlcnRpY2FsfScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnpsLXJvb3QgLmF2emwtcm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9I2F2emwtd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6bC1yb290IC5hdnpsLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWNlY2VmO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6MTJweDttYXJnaW4tYm90dG9tOjEycHg7YmFja2dyb3VuZDojZmNmY2ZkfScsCiAgICAnI2F2emwtcm9vdCAuYXZ6bC1jYXJkIGg0e21hcmdpbjowIDAgMTBweDtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6bC1yb290IC5hdnpsLWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtaW1nPmltZ3t3aWR0aDo2OHB4O2hlaWdodDo4NHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtaW1nIC5ne2ZsZXg6MTttaW4td2lkdGg6MH0nLAogICAgJyNhdnpsLXJvb3QgLmF2emwtaGludHtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2emwtb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2emwtbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2emwtZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpsLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emwtbXNnJyk7IGlmIChlKSBlLnRleHRDb250ZW50ID0gczsgfQoKICB2YXIgY2ZnID0gbnVsbDsKCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzdGFydCgpIHsKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6bC13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6bC1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC-0LHRg9GH0LXQvdC40Y88L2gyPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIiBpZD0iYXZ6bC1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnpsLWJvZHkiPicgKwogICAgICAnPHAgY2xhc3M9ImF2emwtaGludCI-0JLRgdC1INGG0LXQvdGLINGB0YLRgNCw0L3QuNGG0Ysg0LbQuNCy0YPRgiDQsiDQtNCy0YPRhSDQutCw0YDRgtC-0YfQutCw0YUg0L3QsNCy0LXRgNGF0YM6INC40L3RgtC10L3RgdC40LIsINC60YPRgNGBICcgKwogICAgICAn0Lgg0LTQvtC_LdC80L7QtNGD0LvRjCDQstC90YPRgtGA0Lgg0LrQsNGA0YLQvtGH0LrQuCDQutGD0YDRgdCwLiDQntGC0YLRg9C00LAg0L7QvdC4INGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyLiAnICsKICAgICAgJ9CV0YHQu9C4INGG0LXQvdCwINGD0L_QvtC80Y_QvdGD0YLQsCDQtdGJ0ZEg0Lgg0LLQvdGD0YLRgNC4INC-0YLQstC10YLQsCDQvdCwINCy0L7Qv9GA0L7RgSwg0L_QsNC90LXQu9GMINC_0YDQtdC00YPQv9GA0LXQtNC40YIuPC9wPic7CgogICAgLyog0KTQntCg0JzQkNCi0Ksg0Jgg0KbQldCd0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpsLXNlYyIgb3Blbj48c3VtbWFyeT7QpNC-0YDQvNCw0YLRiyDQvtCx0YPRh9C10L3QuNGPINC4INGG0LXQvdGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emwtaW4iPic7CiAgICBjZmcuZm9ya3MuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7QpNC-0YDQvNCw0YIgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YHQstC10YDRhdGDJywgJ2ZvcmtzLicgKyBpICsgJy5leWVicm93JywgZi5leWVicm93KSArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7ZW0mZ3Q7KScsICdmb3Jrcy4nICsgaSArICcuaDMnLCBmLmgzKSArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC30LDQs9C-0LvQvtCy0L7QuicsICdmb3Jrcy4nICsgaSArICcuc3ViJywgZi5zdWIsICdhcmVhJyk7CiAgICAgIGYuY2hpcHMuZm9yRWFjaChmdW5jdGlvbiAoYywgaykgeyBoICs9IGZpZWxkKCfQnNC10YLQutCwICcgKyAoayArIDEpLCAnZm9ya3MuJyArIGkgKyAnLmNoaXBzLicgKyBrLCBjKTsgfSk7CiAgICAgIGYuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGspIHsgaCArPSBmaWVsZCgn0J_Rg9C90LrRgiAnICsgKGsgKyAxKSwgJ2ZvcmtzLicgKyBpICsgJy5pdGVtcy4nICsgaywgaXQpOyB9KTsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bC1yb3ciPicgKyBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0L3QsNC0INGG0LXQvdC-0LknLCAnZm9ya3MuJyArIGkgKyAnLmZyb20nLCBmLmZyb20pICsKICAgICAgICBmaWVsZCgn0KbQtdC90LAsINGC0L7Qu9GM0LrQviDRhtC40YTRgNGLJywgJ2ZvcmtzLicgKyBpICsgJy5wcmljZScsIGYucHJpY2UpICsgJzwvZGl2PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQodGC0LDRgNCw0Y8g0YbQtdC90LAgKNC_0YPRgdGC0L4g4oCUINC10YHQu9C4INC90LXRgiknLCAnZm9ya3MuJyArIGkgKyAnLm9sZFByaWNlJywgZi5vbGRQcmljZSkgKwogICAgICAgIGZpZWxkKCfQn9GA0LjQvNC10YfQsNC90LjQtSDQv9C-0LQg0YbQtdC90L7QuScsICdmb3Jrcy4nICsgaSArICcubm90ZScsIGYubm90ZSkgKyAnPC9kaXY-JzsKICAgICAgaWYgKGYuYWRkb24pIHsKICAgICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7QlNC-0L8t0LzQvtC00YPQu9GMINCyINGN0YLQvtC5INC60LDRgNGC0L7Rh9C60LU8L2g0PicgKwogICAgICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMJywgJ2ZvcmtzLicgKyBpICsgJy5hZGRvbi5sYWJlbCcsIGYuYWRkb24ubGFiZWwpICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ2ZvcmtzLicgKyBpICsgJy5hZGRvbi5uYW1lJywgZi5hZGRvbi5uYW1lKSArCiAgICAgICAgICBmaWVsZCgn0KbQtdC90LAsINGC0L7Qu9GM0LrQviDRhtC40YTRgNGLJywgJ2ZvcmtzLicgKyBpICsgJy5hZGRvbi5wcmljZScsIGYuYWRkb24ucHJpY2UpICsgJzwvZGl2PicgKwogICAgICAgICAgZmllbGQoJ9Cf0L7Rj9GB0L3QtdC90LjQtScsICdmb3Jrcy4nICsgaSArICcuYWRkb24ubm90ZScsIGYuYWRkb24ubm90ZSkgKyAnPC9kaXY-JzsKICAgICAgfQogICAgICBoICs9CiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emwtcm93Ij4nICsgZmllbGQoJ9Ca0L3QvtC_0LrQsCDigJQg0YLQtdC60YHRgicsICdmb3Jrcy4nICsgaSArICcuYnRuJywgZi5idG4pICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwIOKAlCDQsNC00YDQtdGBJywgJ2ZvcmtzLicgKyBpICsgJy5ocmVmJywgZi5ocmVmKSArICc8L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQlNCe0J8t0JzQntCU0KPQm9CsICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCU0L7Qvy3QvNC-0LTRg9C70YwgRGFWaW5jaTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpsLWluIj4nICsKICAgICAgZmllbGQoJ9Cf0LvQsNGI0LrQsCcsICdhZGRvbi5jaGlwJywgY2ZnLmFkZG9uLmNoaXApICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7ZW0mZ3Q7KScsICdhZGRvbi5oMycsIGNmZy5hZGRvbi5oMykgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSAo0LzQvtC20L3QviBIVE1MKScsICdhZGRvbi5zdWInLCBjZmcuYWRkb24uc3ViLCAnYXJlYScpOwogICAgY2ZnLmFkZG9uLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0LCBrKSB7IGggKz0gZmllbGQoJ9Cf0YPQvdC60YIgJyArIChrICsgMSksICdhZGRvbi5pdGVtcy4nICsgaywgaXQpOyB9KTsKICAgIGNmZy5hZGRvbi5tZXRhLmZvckVhY2goZnVuY3Rpb24gKG0sIGspIHsgaCArPSBmaWVsZCgn0JzQtdGC0LrQsCAnICsgKGsgKyAxKSwgJ2FkZG9uLm1ldGEuJyArIGssIG0pOyB9KTsKICAgIGNmZy5hZGRvbi5vZmZlcnMuZm9yRWFjaChmdW5jdGlvbiAobywgaykgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7Qn9C-0Y_RgdC90LXQvdC40LUgJyArIChrICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAnYWRkb24ub2ZmZXJzLicgKyBrICsgJy53aG8nLCBvLndobykgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2FkZG9uLm9mZmVycy4nICsgayArICcudGV4dCcsIG8udGV4dCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQmtC90L7Qv9C60LAg4oCUINGC0LXQutGB0YInLCAnYWRkb24uYnRuJywgY2ZnLmFkZG9uLmJ0bikgKwogICAgICBmaWVsZCgn0JrQvdC-0L_QutCwIOKAlCDQsNC00YDQtdGBJywgJ2FkZG9uLmhyZWYnLCBjZmcuYWRkb24uaHJlZikgKyAnPC9kaXY-PC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JzQntCU0KPQm9CYICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCc0L7QtNGD0LvQuCDQutGD0YDRgdCwICgnICsgY2ZnLm1vZHVsZXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bC1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6bC1oaW50Ij7Ql9Cw0LPQvtC70L7QstC60Lgg0Lgg0L7Qv9C40YHQsNC90LjRjyDQvNC-0LTRg9C70LXQuSDRg9GF0L7QtNGP0YIg0Lgg0LIg0YDQsNC30LzQtdGC0LrRgyDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi4gJyArCiAgICAgICfQp9C40YHQu9C-INC30LDQtNCw0L3QuNC5INC_0LDQvdC10LvRjCDRgdC60LvQsNC00YvQstCw0LXRgiDRgdCw0LzQsCDQuCDRgdCy0LXRgNGP0LXRgiDRgdC-INGB0YfRkdGC0YfQuNC60L7QvCDQsiDQsdC70L7QutC1IMKr0J_QvtGH0LXQvNGDINC80L7QtNGD0LvRjNC90L7Cuy48L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQvdCw0LQg0LfQsNCz0L7Qu9C-0LLQutC-0LwnLCAncHJvZ3JhbS5sYWJlbCcsIGNmZy5wcm9ncmFtLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YDQsNC30LTQtdC70LAgKNC80L7QttC90L4gJmx0O2JyJmd0OywgJmx0O2VtJmd0OyknLCAncHJvZ3JhbS5oMicsIGNmZy5wcm9ncmFtLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLm1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobSwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7QnNC-0LTRg9C70YwgJyArIGVzYyhtLm51bSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bC1yb3ciPicgKyBmaWVsZCgn0J3QvtC80LXRgCcsICdtb2R1bGVzLicgKyBpICsgJy5udW0nLCBtLm51bSkgKwogICAgICAgIGZpZWxkKCfQnNC10YLQutCwJywgJ21vZHVsZXMuJyArIGkgKyAnLnRhZycsIG0udGFnKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdtb2R1bGVzLicgKyBpICsgJy5oMycsIG0uaDMpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtScsICdtb2R1bGVzLicgKyBpICsgJy5wJywgbS5wLCAnYXJlYScpICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6bC1yb3ciPicgKyBmaWVsZCgn0JfQsNC00LDQvdC40Y8nLCAnbW9kdWxlcy4nICsgaSArICcudGFza3MnLCBtLnRhc2tzKSArCiAgICAgICAgZmllbGQoJ9CY0L3RgdGC0YDRg9C80LXQvdGCJywgJ21vZHVsZXMuJyArIGkgKyAnLnRvb2wnLCBtLnRvb2wpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCU0J7QoNCe0JbQmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCU0L7RgNC-0LbQutCwINC90LDQtCDQvNC-0LTRg9C70Y_QvNC4ICgnICsgY2ZnLnJvYWRtYXAubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bC1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6bC1oaW50Ij7Qn9C-0LTQv9C40YHRjCDQstGB0L_Qu9GL0LLQsNC10YIg0L_RgNC4INC90LDQstC10LTQtdC90LjQuC4g0JDQtNGA0LXRgSDQtNC-0LvQttC10L0g0LLQtdGB0YLQuCDQvdCwINC90YPQttC90YPRjiDQutCw0YDRgtC-0YfQutGDLjwvcD4nOwogICAgY2ZnLnJvYWRtYXAuZm9yRWFjaChmdW5jdGlvbiAobiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQotC-0YfQutCwICcgKyAoaSArIDEpICsgJyDigJQg0L_QvtC00L_QuNGB0YwnLCAncm9hZG1hcC4nICsgaSArICcudGlwJywgbi50aXApICsKICAgICAgICBmaWVsZCgn0J3QvtC80LXRgCcsICdyb2FkbWFwLicgKyBpICsgJy5udW0nLCBuLm51bSkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KLQldCa0KHQotCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCo0LDQv9C60LAg0Lgg0YLQtdC60YHRgtGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emwtaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uZXllYnJvdycsIGNmZy5oZXJvLmV5ZWJyb3cpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emwtcm93Ij4nICsgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDigJQg0YHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMicsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDMgKNC80L7QttC90L4gJmx0O2VtJmd0OyknLCAnaGVyby5saW5lMycsIGNmZy5oZXJvLmxpbmUzKSArCiAgICAgIGZpZWxkKCfQktGB0YLRg9C_0LjRgtC10LvRjNC90YvQuSDRgtC10LrRgdGCJywgJ2hlcm8ubGVkZScsIGNmZy5oZXJvLmxlZGUsICdhcmVhJykgKwogICAgICBmaWVsZCgn0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwICjRh9C10YDQtdC3INC30LDQv9GP0YLRg9GOKScsICd0aWNrZXJMaW5lJywgY2ZnLnRpY2tlci5qb2luKCcsICcpLCAnYXJlYScpOwogICAgY2ZnLmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uIChsLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emwtcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwICcgKyAoaSArIDEpLCAnbGFiZWxzLicgKyBpICsgJy5oMicsIGwuaDIpICsKICAgICAgICAobC5hc2lkZSA_IGZpZWxkKCfQn9C-0LzQtdGC0LrQsCDRgdC_0YDQsNCy0LAnLCAnbGFiZWxzLicgKyBpICsgJy5hc2lkZScsIGwuYXNpZGUpIDogJzxkaXY-PC9kaXY-JykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-ICZsdDticiZndDssICZsdDtlbSZndDspJywgJ2N0YS5oMicsIGNmZy5jdGEuaDIpOwogICAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6bC1yb3ciPicgKyBmaWVsZCgn0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJyDigJQg0YLQtdC60YHRgicsICdjdGEuYnV0dG9ucy4nICsgaSArICcudGV4dCcsIGIudGV4dCkgKwogICAgICAgIGZpZWxkKCfQmtC90L7Qv9C60LAgJyArIChpICsgMSkgKyAnIOKAlCDQsNC00YDQtdGBJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy5ocmVmJywgYi5ocmVmKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQodC90L7RgdC60LAg0LLQvdC40LfRgyAo0LzQvtC20L3QviBIVE1MKScsICdmb290Tm90ZScsIGNmZy5mb290Tm90ZSwgJ2FyZWEnKSArICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQnNCV0KLQntCUINCYINCf0KDQmNCd0KbQmNCfICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCc0LXRgtC-0LQg0Lgg0L_RgNC40L3RhtC40L88L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bC1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdtZXRob2QubGFiZWwnLCBjZmcubWV0aG9kLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O2JyJmd0OywgJmx0O2VtJmd0OyknLCAnbWV0aG9kLmgyJywgY2ZnLm1ldGhvZC5oMikgKyAnPC9kaXY-JzsKICAgIGNmZy5tZXRob2QuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7Qn9GD0L3QutGCICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdtZXRob2QuaXRlbXMuJyArIGkgKyAnLmgzJywgYS5oMykgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ21ldGhvZC5pdGVtcy4nICsgaSArICcucCcsIGEucCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCcsICdhYm91dC5sYWJlbCcsIGNmZy5hYm91dC5sYWJlbCkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6ICjQvNC-0LbQvdC-ICZsdDticiZndDssICZsdDtlbSZndDspJywgJ2Fib3V0LmgyJywgY2ZnLmFib3V0LmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmFib3V0LmNoZWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7IGggKz0gZmllbGQoJ9Cf0YPQvdC60YIgJyArIChpICsgMSksICdhYm91dC5jaGVja3MuJyArIGksIGMpOyB9KTsKICAgIGNmZy5hYm91dC50YWdzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHsgaCArPSBmaWVsZCgn0JzQtdGC0LrQsCAnICsgKGkgKyAxKSwgJ2Fib3V0LnRhZ3MuJyArIGksIHgpOyB9KTsKICAgIGNmZy5hYm91dC5zdGF0cy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emwtcm93Ij4nICsKICAgICAgICAocy50YXJnZXQgIT09ICcnID8gZmllbGQoJ9Cn0LjRgdC70L4gJyArIChpICsgMSksICdhYm91dC5zdGF0cy4nICsgaSArICcudGFyZ2V0Jywgcy50YXJnZXQpCiAgICAgICAgICA6IGZpZWxkKCfQl9C90LDRh9C10L3QuNC1ICcgKyAoaSArIDEpLCAnYWJvdXQuc3RhdHMuJyArIGkgKyAnLnZhbHVlJywgcy52YWx1ZSkpICsKICAgICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0YwnLCAnYWJvdXQuc3RhdHMuJyArIGkgKyAnLmxhYmVsJywgcy5sYWJlbCkgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JrQkNCg0KLQmNCd0JrQmCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emwtc2VjIj48c3VtbWFyeT7QpNC-0YLQvtCz0YDQsNGE0LjQuDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpsLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emwtaW1nIj48aW1nIGRhdGEtcHJldj0iZmVhdHVyZS5iZ0NvdmVyIiBzcmM9IicgKyBlc2MoY2ZnLmZlYXR1cmUuYmdDb3ZlcikgKyAnIiBhbHQ9IiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsgZmllbGQoJ9Ck0L7QvSDQvtCx0LvQvtC20LrQuCAo0L_Rg9GB0YLQviDigJQg0YjQuNGA0L7QutC40Lkg0LrQsNC00YApJywgJ2ZlYXR1cmUuYmdDb3ZlcicsIGNmZy5mZWF0dXJlLmJnQ292ZXIpICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emwtYiIgZGF0YS1jaG9vc2U9ImZlYXR1cmUuYmdDb3ZlciIgc3R5bGU9InBhZGRpbmc6NHB4IDlweDtmb250LXNpemU6MTJweDttYXJnaW4tYm90dG9tOjEycHgiPtCS0YvQsdGA0LDRgtGMINC40Lcg0LDQu9GM0LHQvtC80LA8L2J1dHRvbj48L2Rpdj48L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emwtaW1nIj48aW1nIGRhdGEtcHJldj0iZmVhdHVyZS5iZ0N0YSIgc3JjPSInICsgZXNjKGNmZy5mZWF0dXJlLmJnQ3RhKSArICciIGFsdD0iIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImciPicgKyBmaWVsZCgn0KTQvtC9INGE0LjQvdCw0LvQsCAo0L_Rg9GB0YLQviDigJQg0YjQuNGA0L7QutC40Lkg0LrQsNC00YApJywgJ2ZlYXR1cmUuYmdDdGEnLCBjZmcuZmVhdHVyZS5iZ0N0YSkgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIiBkYXRhLWNob29zZT0iZmVhdHVyZS5iZ0N0YSIgc3R5bGU9InBhZGRpbmc6NHB4IDlweDtmb250LXNpemU6MTJweDttYXJnaW4tYm90dG9tOjEycHgiPtCS0YvQsdGA0LDRgtGMINC40Lcg0LDQu9GM0LHQvtC80LA8L2J1dHRvbj48L2Rpdj48L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emwtaW1nIj48aW1nIGRhdGEtcHJldj0iZmVhdHVyZS5pbWciIHNyYz0iJyArIGVzYyhjZmcuZmVhdHVyZS5pbWcpICsgJyIgYWx0PSIiPicgKwogICAgICAnPGRpdiBjbGFzcz0iZyI-JyArIGZpZWxkKCfQqNC40YDQvtC60LjQuSDQutCw0LTRgCAo0L_QviDRg9C80L7Qu9GH0LDQvdC40Y4g0YTQvtC9INC-0LHQu9C-0LbQutC4INC4INGE0LjQvdCw0LvQsCknLCAnZmVhdHVyZS5pbWcnLCBjZmcuZmVhdHVyZS5pbWcpICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emwtYiIgZGF0YS1jaG9vc2U9ImZlYXR1cmUuaW1nIiBzdHlsZT0icGFkZGluZzo0cHggOXB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206MTJweCI-0JLRi9Cx0YDQsNGC0Ywg0LjQtyDQsNC70YzQsdC-0LzQsDwvYnV0dG9uPicgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQutCw0LTRgNCwIChhbHQpJywgJ2ZlYXR1cmUuYWx0JywgY2ZnLmZlYXR1cmUuYWx0KSArCiAgICAgIGZpZWxkKCfQn9C-0LTQv9C40YHRjCDQvdCwINC60LDQtNGA0LUnLCAnZmVhdHVyZS5jYXAnLCBjZmcuZmVhdHVyZS5jYXApICsgJzwvZGl2PjwvZGl2PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6bC1pbWciPjxpbWcgZGF0YS1wcmV2PSJhYm91dC5pbWciIHNyYz0iJyArIGVzYyhjZmcuYWJvdXQuaW1nKSArICciIGFsdD0iIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImciPicgKyBmaWVsZCgn0JrQsNC00YAg0LIg0LHQu9C-0LrQtSDCq9Cf0L7Rh9C10LzRgyDQvNC-0LTRg9C70YzQvdC-wrsnLCAnYWJvdXQuaW1nJywgY2ZnLmFib3V0LmltZykgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIiBkYXRhLWNob29zZT0iYWJvdXQuaW1nIiBzdHlsZT0icGFkZGluZzo0cHggOXB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206MTJweCI-0JLRi9Cx0YDQsNGC0Ywg0LjQtyDQsNC70YzQsdC-0LzQsDwvYnV0dG9uPicgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQutCw0LTRgNCwIChhbHQpJywgJ2Fib3V0LmFsdCcsIGNmZy5hYm91dC5hbHQpICsKICAgICAgZmllbGQoJ9Cc0LXRgtC60LAg0L3QsCDQutCw0LTRgNC1JywgJ2Fib3V0LnRhZycsIGNmZy5hYm91dC50YWcpICsgJzwvZGl2PjwvZGl2PicgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JLQntCf0KDQntCh0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpsLXNlYyI-PHN1bW1hcnk-0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLICgnICsgY2ZnLmZhcS5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpsLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnpsLWhpbnQiPtCe0YLQstC10YIg0L7QtNC40L06INC-0L0g0LbQtSDRg9GF0L7QtNC40YIg0LIg0YDQsNC30LzQtdGC0LrRgyDRgdC70L7QstC-INCyINGB0LvQvtCy0L4uICcgKwogICAgICAn0KLQsNC6INGC0YDQtdCx0YPQtdGCIEdvb2dsZSDigJQg0L_QtdGA0LXRgdC60LDQtyDRgdCy0L7QuNC80Lgg0YHQu9C-0LLQsNC80Lgg0L3QtSDQt9Cw0YHRh9C40YLRi9Cy0LDQtdGC0YHRjy48L3A-JzsKICAgIGNmZy5mYXEuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnpsLWNhcmQiPjxoND7QktC-0L_RgNC-0YEgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0JLQvtC_0YDQvtGBJywgJ2ZhcS4nICsgaSArICcucScsIGYucSkgKwogICAgICAgIGZpZWxkKCfQntGC0LLQtdGCICjQvNC-0LbQvdC-IEhUTUwpJywgJ2ZhcS4nICsgaSArICcuYScsIGYuYSwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQoNCQ0JfQnNCV0KLQmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6bC1zZWMiPjxzdW1tYXJ5PtCg0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LI8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6bC1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6bC1oaW50Ij7QrdGC0L4g0L3QtdCy0LjQtNC40LzQsNGPINGH0LDRgdGC0Ywg0YHRgtGA0LDQvdC40YbRiy4g0KbQtdC90Ysg0Lgg0L_RgNC-0LPRgNCw0LzQvNCwINC_0L7QtNGB0YLQsNCy0LvRj9GO0YLRgdGPICcgKwogICAgICAn0YHQviDRgdGC0YDQsNC90LjRhtGLINGB0LDQvNC4IOKAlCDQt9C00LXRgdGMINGC0L7Qu9GM0LrQviDQvdCw0LfQstCw0L3QuNGPINC4INC-0L_QuNGB0LDQvdC40Y8uPC9wPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlTmFtZScsIGNmZy5zZW8ucGFnZU5hbWUpICsKICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsICdzZW8ucGFnZURlc2NyaXB0aW9uJywgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24sICdhcmVhJykgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDQutGD0YDRgdCwJywgJ3Nlby5jb3Vyc2VOYW1lJywgY2ZnLnNlby5jb3Vyc2VOYW1lKSArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INC60YPRgNGB0LAnLCAnc2VvLmNvdXJzZURlc2NyaXB0aW9uJywgY2ZnLnNlby5jb3Vyc2VEZXNjcmlwdGlvbiwgJ2FyZWEnKSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8L2Rpdj48ZGl2IGlkPSJhdnpsLWZvb3QiPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIHAiIGlkPSJhdnpsLWJ1aWxkIj7QodC-0LHRgNCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizwvYnV0dG9uPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIiBpZD0iYXZ6bC10ZXN0Ij7Qn9GA0L7QstC10YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Lo8L2J1dHRvbj4nICsKICAgICAgJzxzcGFuIGlkPSJhdnpsLW1zZyI-PC9zcGFuPjwvZGl2PicgKwogICAgICAnPGRpdiBzdHlsZT0icGFkZGluZzowIDIwcHggMThweCI-PHRleHRhcmVhIGlkPSJhdnpsLW91dCIgc3BlbGxjaGVjaz0iZmFsc2UiICcgKwogICAgICAncGxhY2Vob2xkZXI9ItCX0LTQtdGB0Ywg0L_QvtGP0LLQuNGC0YHRjyDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyI-PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4nOwoKICAgIHJvb3QuaW5uZXJIVE1MID0gaDsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emwtY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKCFwKSByZXR1cm47CiAgICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgcCArICciXScpOwogICAgICBpZiAocHJldikgcHJldi5zcmMgPSBlLnRhcmdldC52YWx1ZTsKICAgIH0pOwoKICAgIC8qINCy0YvQsdC-0YAg0LrQsNC00YDQsCDQuNC3INCw0LvRjNCx0L7QvNCwICovCiAgICB2YXIgc2hvdENhY2hlID0ge307CiAgICBmdW5jdGlvbiBhYnModSkgewogICAgICBpZiAoIXUpIHJldHVybiAnJzsKICAgICAgaWYgKHUuaW5kZXhPZignLy8nKSA9PT0gMCkgcmV0dXJuICdodHRwczonICsgdTsKICAgICAgaWYgKHUuaW5kZXhPZignLycpID09PSAwKSByZXR1cm4gbG9jYXRpb24ub3JpZ2luICsgdTsKICAgICAgcmV0dXJuIHU7CiAgICB9CiAgICBmdW5jdGlvbiBmcm9tU3Jjc2V0KHNldCwgc3JjKSB7CiAgICAgIGlmICghc2V0KSB7IHZhciB1ID0gYWJzKHNyYyk7IHJldHVybiB7IGZ1bGw6IHUsIHNtYWxsOiB1IH07IH0KICAgICAgdmFyIGxpc3QgPSBzZXQuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHgpIHsKICAgICAgICB2YXIgcCA9IHgudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgICAgICByZXR1cm4geyB1OiBhYnMocFswXSksIHc6IHBhcnNlSW50KHBbMV0sIDEwKSB8fCAwIH07CiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC51OyB9KTsKICAgICAgaWYgKCFsaXN0Lmxlbmd0aCkgeyB2YXIgdiA9IGFicyhzcmMpOyByZXR1cm4geyBmdWxsOiB2LCBzbWFsbDogdiB9OyB9CiAgICAgIHZhciBiaWcgPSBsaXN0LnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi53IC0gYS53OyB9KTsKICAgICAgdmFyIHNtYWxsID0gbGlzdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEudyAtIGIudzsgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZnVsbDogKGJpZy5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudyA8PSBNQVhXOyB9KVswXSB8fCBiaWdbYmlnLmxlbmd0aCAtIDFdKS51LAogICAgICAgIHNtYWxsOiAoc21hbGwuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLncgPj0gMjgwOyB9KVswXSB8fCBzbWFsbFswXSkudQogICAgICB9OwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBwID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlICYmIGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1jaG9vc2UnKTsKICAgICAgaWYgKCFwKSByZXR1cm47CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHBhbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgcGFuZS5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmZpeGVkO2luc2V0OjglO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjEycHg7ei1pbmRleDoyMTQ3NDgzNjQ3OycgKwogICAgICAgICdwYWRkaW5nOjE2cHg7b3ZlcmZsb3c6YXV0bztib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjQpJzsKICAgICAgcGFuZS5pbm5lckhUTUwgPSAnPHAgc3R5bGU9Im1hcmdpbjowIDAgMTBweCI-0JDQtNGA0LXRgSDRgdGC0YDQsNC90LjRhtGLINGBINC60LDQtNGA0LDQvNC4OjwvcD4nICsKICAgICAgICAnPGlucHV0IGlkPSJhdnpsLXNyYyIgc3R5bGU9IndpZHRoOjEwMCU7cGFkZGluZzo4cHggMTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHgiIHZhbHVlPSInICsKICAgICAgICBlc2Moc2hvdENhY2hlLl9fbGFzdCB8fCAnaHR0cHM6Ly9hdmFuemF0by5ydS9wb3J0Zm9saW8nKSArICciPicgKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luOjEwcHggMCI-PGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIHAiIGlkPSJhdnpsLWxvYWQiPtCf0L7QutCw0LfQsNGC0Ywg0LrQsNC00YDRizwvYnV0dG9uPiAnICsKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6bC1iIiBpZD0iYXZ6bC1jYW5jZWwiPtCe0YLQvNC10L3QsDwvYnV0dG9uPjwvcD4nICsKICAgICAgICAnPGRpdiBpZD0iYXZ6bC1ncmlkIiBzdHlsZT0iZGlzcGxheTpub25lO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNDBweCwxZnIpKTtnYXA6MTBweCI-PC9kaXY-JzsKICAgICAgcm9vdC5hcHBlbmRDaGlsZChwYW5lKTsKICAgICAgcGFuZS5xdWVyeVNlbGVjdG9yKCcjYXZ6bC1jYW5jZWwnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBwYW5lLnJlbW92ZSgpOyB9OwogICAgICBwYW5lLnF1ZXJ5U2VsZWN0b3IoJyNhdnpsLWxvYWQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciB1cmwgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJyNhdnpsLXNyYycpLnZhbHVlLnRyaW0oKTsKICAgICAgICBpZiAoIXVybCkgcmV0dXJuOwogICAgICAgIHNob3RDYWNoZS5fX2xhc3QgPSB1cmw7CiAgICAgICAgdmFyIGhlYWQgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJ3AnKTsKICAgICAgICBoZWFkLnRleHRDb250ZW50ID0gJ9CX0LDQs9GA0YPQttCw0Y4gJyArIHVybCArICfigKYnOwogICAgICAgIGZldGNoKHVybCArICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgJ3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICAgICAgdmFyIHNlZW4gPSB7fSwgb3V0ID0gW107CiAgICAgICAgICAgIGFsbChkb2MsICdpbWcnKS5mb3JFYWNoKGZ1bmN0aW9uIChpbSkgewogICAgICAgICAgICAgIHZhciBzZXQgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCAnJzsKICAgICAgICAgICAgICB2YXIgcyA9IGltLmdldEF0dHJpYnV0ZSgnc3JjJykgfHwgaW0uZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpIHx8ICcnOwogICAgICAgICAgICAgIGlmIChzZXQuaW5kZXhPZignaS53Zm9saW8ucnUnKSA8IDAgJiYgcy5pbmRleE9mKCdpLndmb2xpby5ydScpIDwgMCkgcmV0dXJuOwogICAgICAgICAgICAgIHZhciBwYWlyID0gZnJvbVNyY3NldChzZXQsIHMpOwogICAgICAgICAgICAgIGlmICghcGFpci5mdWxsIHx8IHNlZW5bcGFpci5mdWxsXSkgcmV0dXJuOwogICAgICAgICAgICAgIHNlZW5bcGFpci5mdWxsXSA9IDE7IG91dC5wdXNoKHBhaXIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGdyaWQgPSBwYW5lLnF1ZXJ5U2VsZWN0b3IoJyNhdnpsLWdyaWQnKTsKICAgICAgICAgICAgaWYgKCFvdXQubGVuZ3RoKSB7IGhlYWQudGV4dENvbnRlbnQgPSAn0JrQsNC00YDQvtCyINC90LUg0L3QsNGI0LvQvtGB0YwuJzsgcmV0dXJuOyB9CiAgICAgICAgICAgIGhlYWQudGV4dENvbnRlbnQgPSAn0JLRi9Cx0LXRgNC40YLQtSDQutCw0LTRgCAoJyArIG91dC5sZW5ndGggKyAnKSc7CiAgICAgICAgICAgIGdyaWQuc3R5bGUuZGlzcGxheSA9ICdncmlkJzsKICAgICAgICAgICAgb3V0LmZvckVhY2goZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICAgICAgdmFyIGltID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CiAgICAgICAgICAgICAgaW0uc3JjID0gaXQuc21hbGw7IGltLmxvYWRpbmcgPSAnbGF6eSc7CiAgICAgICAgICAgICAgaW0uc3R5bGUuY3NzVGV4dCA9ICd3aWR0aDoxMDAlO2hlaWdodDoxMjBweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6OHB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2snOwogICAgICAgICAgICAgIC8qINC90LAg0YHQsNC50YLQtSDRgyDQstGB0LXRhSDQutCw0YDRgtC40L3QvtC6IHBvaW50ZXItZXZlbnRzOm5vbmUgKNGC0LXQvNCwIHdmb2xpbykg4oCUINCx0LXQtyDRjdGC0L7Qs9C-INC90LDQttCw0YLQuNC1INC90LAg0LrQsNC00YAg0L_RgNC-0YXQvtC00LjRgiDQvNC40LzQviAqLwogICAgICAgICAgICAgIGltLnN0eWxlLnNldFByb3BlcnR5KCdwb2ludGVyLWV2ZW50cycsICdhdXRvJywgJ2ltcG9ydGFudCcpOwogICAgICAgICAgICAgIGltLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtkYXRhLXA9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICAgICAgICBpZiAoaW5wKSBpbnAudmFsdWUgPSBpdC5mdWxsOwogICAgICAgICAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICAgICAgICBpZiAocHJldikgcHJldi5zcmMgPSBpdC5mdWxsOwogICAgICAgICAgICAgICAgcGFuZS5yZW1vdmUoKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoaW0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgaGVhZC50ZXh0Q29udGVudCA9ICfQndC1INC-0YLQutGA0YvQu9C-0YHRjDogJyArIGVyci5tZXNzYWdlOyB9KTsKICAgICAgfTsKICAgIH0pOwoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQogICAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgICAgdmFyIGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICB2YXIgcCA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgICAgaWYgKHAgPT09ICd0aWNrZXJMaW5lJykgewogICAgICAgICAgZC50aWNrZXIgPSBlbC52YWx1ZS5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy50cmltKCk7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2V0UGF0aChkLCBwLCBlbC52YWx1ZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZDsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgICB2YXIgdGV4dHMgPSBbXSwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgICAgfQogICAgICBpZiAoIXRleHRzLmxlbmd0aCkgeyBlbC5hcHBlbmRDaGlsZChlbC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHYpKTsgcmV0dXJuOyB9CiAgICAgIHZhciBtYWluID0gbnVsbDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG1haW4gPSB0ZXh0c1tpXTsgYnJlYWs7IH0KICAgICAgfQogICAgICBpZiAoIW1haW4pIG1haW4gPSB0ZXh0c1swXTsKICAgICAgdmFyIHJhdyA9IG1haW4ubm9kZVZhbHVlOwogICAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgICB2YXIgcG9zdCA9IChyYXcubWF0Y2goL1xzKiQvKSB8fCBbJyddKVswXTsKICAgICAgaWYgKHJhdy50cmltKCkgPT09ICcnKSB7IHByZSA9ICcnOyBwb3N0ID0gJyc7IH0KICAgICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldICE9PSBtYWluICYmIHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldEh0bWwoZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwuaW5uZXJIVE1MID0gdjsgfQogICAgLyog0YHRh9GR0YLRh9C40Lo6INGH0LjRgdC70L4g0YDQuNGB0YPQtdGCINGB0LrRgNC40L_RgiDRgdGC0YDQsNC90LjRhtGLLCDQvdCw0Lwg0LLQsNC20LXQvSDRgtC-0LvRjNC60L4gZGF0YS10YXJnZXQgKi8KICAgIGZ1bmN0aW9uIHNldENvdW50ZXIoZWwsIHYpIHsgaWYgKGVsICYmIHYpIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS10YXJnZXQnLCBkaWdpdHModikpOyB9CgogICAgZnVuY3Rpb24gd3JpdGVBbGwoc2NvcGUsIGQpIHsKICAgICAgdmFyIGlubmVycyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5leWVicm93JyksIGQuaGVyby5leWVicm93KTsKICAgICAgaWYgKGlubmVyc1swXSkgc2V0VGV4dChpbm5lcnNbMF0sIGQuaGVyby5saW5lMSk7CiAgICAgIGlmIChpbm5lcnNbMV0pIHNldFRleHQoaW5uZXJzWzFdLCBkLmhlcm8ubGluZTIpOwogICAgICBpZiAoaW5uZXJzWzJdKSBzZXRIdG1sKGlubmVyc1syXSwgZC5oZXJvLmxpbmUzKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcubGVkZScpLCBkLmhlcm8ubGVkZSk7CgogICAgICBhbGwoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCcpLmZvckVhY2goZnVuY3Rpb24gKGwsIGkpIHsKICAgICAgICB2YXIgdiA9IGQubGFiZWxzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShsLCAnaDInKSwgdi5oMik7CiAgICAgICAgaWYgKHYuYXNpZGUpIHNldFRleHQob25lKGwsICcuc2wtYXNpZGUnKSwgdi5hc2lkZSk7CiAgICAgIH0pOwoKICAgICAgYWxsKHNjb3BlLCAnLmZvcmsnKS5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmZvcmtzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShmLCAnLmZvcmstZXllYnJvdycpLCB2LmV5ZWJyb3cpOwogICAgICAgIHNldEh0bWwob25lKGYsICdoMycpLCB2LmgzKTsKICAgICAgICBzZXRUZXh0KG9uZShmLCAnLmZvcmstc3ViJyksIHYuc3ViKTsKICAgICAgICBhbGwoZiwgJy5mb3JrLW1vZGUgLmNoaXAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjLCBrKSB7IHNldFRleHQoYywgdi5jaGlwc1trXSk7IH0pOwogICAgICAgIGFsbChmLCAnLmZvcmstbGlzdCBsaScpLmZvckVhY2goZnVuY3Rpb24gKGxpLCBrKSB7IHNldFRleHQob25lKGxpLCAnc3Bhbjpub3QoLmljb24pJyksIHYuaXRlbXNba10pOyB9KTsKICAgICAgICBzZXRUZXh0KG9uZShmLCAnLmZwLWZyb20nKSwgdi5mcm9tKTsKICAgICAgICBzZXRDb3VudGVyKG9uZShmLCAnLmZwLW5vdyAuYXYtY291bnRlcicpLCB2LnByaWNlKTsKICAgICAgICBpZiAodi5vbGRQcmljZSkgc2V0VGV4dChvbmUoZiwgJy5mcC1vbGQnKSwgdi5vbGRQcmljZSk7CiAgICAgICAgc2V0VGV4dChvbmUoZiwgJy5mcC1ub3RlJyksIHYubm90ZSk7CiAgICAgICAgaWYgKHYuYWRkb24pIHsKICAgICAgICAgIHNldFRleHQob25lKGYsICcuZmEtbGFiZWwnKSwgdi5hZGRvbi5sYWJlbCk7CiAgICAgICAgICBzZXRUZXh0KG9uZShmLCAnLmZhLXJvdyBhJykgfHwgb25lKGYsICcuZmEtcm93JyksIHYuYWRkb24ubmFtZSk7CiAgICAgICAgICBzZXRDb3VudGVyKG9uZShmLCAnLmZhLXByaWNlIC5hdi1jb3VudGVyJyksIHYuYWRkb24ucHJpY2UpOwogICAgICAgICAgc2V0VGV4dChvbmUoZiwgJy5mYS1ub3RlJyksIHYuYWRkb24ubm90ZSk7CiAgICAgICAgfQogICAgICAgIHZhciBiID0gb25lKGYsICcuZm9yay1idG4nKTsKICAgICAgICBpZiAoYikgeyBzZXRUZXh0KG9uZShiLCAnc3Bhbjpub3QoLmljb24pJyksIHYuYnRuKTsgYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB2LmhyZWYpOyB9CiAgICAgIH0pOwoKICAgICAgdmFyIGZpID0gb25lKHNjb3BlLCAnLmZlYXR1cmUtbWVkaWEgaW1nJyk7CiAgICAgIGlmIChmaSkgeyBmaS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGQuZmVhdHVyZS5pbWcpOyBmaS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIGQuZmVhdHVyZS5hbHQpOyB9CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmZlYXR1cmUtY2FwIHNwYW4nKSwgZC5mZWF0dXJlLmNhcCk7CiAgICAgIFtbJ3NlY3Rpb24uaW50cm8nLCBkLmZlYXR1cmUuYmdDb3Zlcl0sIFsnc2VjdGlvbi5jdGEnLCBkLmZlYXR1cmUuYmdDdGFdXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgdmFyIHNlYyA9IG9uZShzY29wZSwgeFswXSk7CiAgICAgICAgaWYgKHNlYyAmJiAoeFsxXSB8fCBzZWMuaGFzQXR0cmlidXRlKCdkYXRhLWJnJykpKSBzZWMuc2V0QXR0cmlidXRlKCdkYXRhLWJnJywgeFsxXSB8fCAnJyk7CiAgICAgIH0pOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuc3RydWN0dXJlLXNlY3Rpb24gLmxhYmVsJyksIGQubWV0aG9kLmxhYmVsKTsKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuc3RydWN0dXJlLXNlY3Rpb24gLmgyJyksIGQubWV0aG9kLmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmFkdi1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciB2ID0gZC5tZXRob2QuaXRlbXNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGEsICdoMycpLCB2LmgzKTsgc2V0VGV4dChvbmUoYSwgJ3AnKSwgdi5wKTsKICAgICAgfSk7CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hYm91dC10ZXh0IC5sYWJlbCcpLCBkLmFib3V0LmxhYmVsKTsKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuYWJvdXQtdGV4dCAuaDInKSwgZC5hYm91dC5oMik7CiAgICAgIGFsbChzY29wZSwgJy5jaGVjay1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgeyBzZXRUZXh0KG9uZShjLCAnc3Bhbjpub3QoLmljb24pJyksIGQuYWJvdXQuY2hlY2tzW2ldKTsgfSk7CiAgICAgIGFsbChzY29wZSwgJy50YWcnKS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7IHNldFRleHQoeCwgZC5hYm91dC50YWdzW2ldKTsgfSk7CiAgICAgIGFsbChzY29wZSwgJy5zdGF0cyA-IGRpdicpLmZvckVhY2goZnVuY3Rpb24gKGR2LCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmFib3V0LnN0YXRzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICB2YXIgbiA9IG9uZShkdiwgJy5zdGF0LW51bScpOwogICAgICAgIGlmICh2LnRhcmdldCAhPT0gJycpIHNldENvdW50ZXIobiwgdi50YXJnZXQpOyBlbHNlIHNldEh0bWwobiwgdi52YWx1ZSk7CiAgICAgICAgc2V0VGV4dChvbmUoZHYsICcuc3RhdC1sYWJlbCcpLCB2LmxhYmVsKTsKICAgICAgfSk7CiAgICAgIHZhciBhbSA9IG9uZShzY29wZSwgJy5hYm91dC1tZWRpYSBpbWcnKTsKICAgICAgaWYgKGFtKSB7IGFtLnNldEF0dHJpYnV0ZSgnc3JjJywgZC5hYm91dC5pbWcpOyBhbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIGQuYWJvdXQuYWx0KTsgfQogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hYm91dC10YWcnKSwgZC5hYm91dC50YWcpOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcubW9kdWxlcy1zZWN0aW9uIC5sYWJlbCcpLCBkLnByb2dyYW0ubGFiZWwpOwogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5tb2R1bGVzLXNlY3Rpb24gLmgyJyksIGQucHJvZ3JhbS5oMik7CgogICAgICBhbGwoc2NvcGUsICcucm0tbm9kZScpLmZvckVhY2goZnVuY3Rpb24gKG4sIGkpIHsKICAgICAgICB2YXIgdiA9IGQucm9hZG1hcFtpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUobiwgJy5ybS1ub2RlLXRpcCcpLCB2LnRpcCk7CiAgICAgICAgc2V0VGV4dChvbmUobiwgJy5ybS1ub2RlLW51bScpLCB2Lm51bSk7CiAgICAgIH0pOwoKICAgICAgYWxsKHNjb3BlLCAnLm1vZC1jYXJkJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIHZhciB2ID0gZC5tb2R1bGVzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShjLCAnLm1vZC1udW0nKSwgdi5udW0pOwogICAgICAgIHNldFRleHQob25lKGMsICcubW9kLXRhZycpLCB2LnRhZyk7CiAgICAgICAgc2V0VGV4dChvbmUoYywgJ2gzJyksIHYuaDMpOwogICAgICAgIHNldFRleHQob25lKGMsICdwJyksIHYucCk7CiAgICAgICAgdmFyIGZvb3QgPSBhbGwoYywgJy5tb2QtZm9vdCA-IHNwYW4nKTsKICAgICAgICBpZiAoZm9vdFswXSkgc2V0VGV4dChmb290WzBdLCB2LnRhc2tzKTsKICAgICAgICBpZiAoZm9vdFsxXSkgc2V0VGV4dChmb290WzFdLCB2LnRvb2wpOwogICAgICB9KTsKCiAgICAgIHZhciBhZCA9IG9uZShzY29wZSwgJy5hZGRvbicpOwogICAgICBpZiAoYWQpIHsKICAgICAgICBzZXRUZXh0KG9uZShhZCwgJy5hZGRvbi1jaGlwJyksIGQuYWRkb24uY2hpcCk7CiAgICAgICAgc2V0SHRtbChvbmUoYWQsICdoMycpLCBkLmFkZG9uLmgzKTsKICAgICAgICBzZXRIdG1sKG9uZShhZCwgJy5hZGRvbi1zdWInKSwgZC5hZGRvbi5zdWIpOwogICAgICAgIGFsbChhZCwgJy5hZGRvbi1saXN0IGxpJykuZm9yRWFjaChmdW5jdGlvbiAobGksIGspIHsgc2V0VGV4dChvbmUobGksICdzcGFuOm5vdCguaWNvbiknKSwgZC5hZGRvbi5pdGVtc1trXSk7IH0pOwogICAgICAgIGFsbChhZCwgJy5hZGRvbi1tZXRhIC5jaGlwJykuZm9yRWFjaChmdW5jdGlvbiAoYywgaykgeyBzZXRUZXh0KGMsIGQuYWRkb24ubWV0YVtrXSk7IH0pOwogICAgICAgIGFsbChhZCwgJy5hZGRvbi1vZmZlcicpLmZvckVhY2goZnVuY3Rpb24gKG8sIGspIHsKICAgICAgICAgIHZhciB2ID0gZC5hZGRvbi5vZmZlcnNba107IGlmICghdikgcmV0dXJuOwogICAgICAgICAgc2V0VGV4dChvbmUobywgJy5hby13aG8nKSwgdi53aG8pOwogICAgICAgICAgc2V0VGV4dChvbmUobywgJy5hby10ZXh0JyksIHYudGV4dCk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGFiID0gb25lKGFkLCAnLmFkZG9uLWJ0bicpOwogICAgICAgIGlmIChhYikgeyBzZXRUZXh0KG9uZShhYiwgJ3NwYW46bm90KC5pY29uKScpLCBkLmFkZG9uLmJ0bik7IGFiLnNldEF0dHJpYnV0ZSgnaHJlZicsIGQuYWRkb24uaHJlZik7IH0KICAgICAgfQoKICAgICAgYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuZmFxW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5mYXEtcS10ZXh0JyksIHYucSk7CiAgICAgICAgc2V0SHRtbChvbmUoaXQsICcuZmFxLWEtaW5uZXInKSwgdi5hKTsKICAgICAgfSk7CgogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5jdGEgLmgyJyksIGQuY3RhLmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmN0YSAuYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuYnV0dG9uc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgYWxsKGIsICcuYnRuLWxhYmVsIHNwYW4nKS5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7IHNldFRleHQocywgdi50ZXh0KTsgfSk7CiAgICAgICAgYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB2LmhyZWYpOwogICAgICB9KTsKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuZm9vdC1ub3RlJyksIGQuZm9vdE5vdGUpOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YHQutGA0LjQv9GCOiDRgtC-0LvRjNC60L4g0LHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBqc1N0cihzKSB7IHJldHVybiAiJyIgKyBTdHJpbmcocykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsgfQoKICAgIGZ1bmN0aW9uIHBhdGNoU2NyaXB0KHNyYywgZCkgewogICAgICB2YXIgbWlzc2VkID0gW107CiAgICAgIGlmICghL3ZhciBpdGVtcyA9IFxbLy50ZXN0KHNyYykpIHsgbWlzc2VkLnB1c2goJ9Cx0LXQs9GD0YnQsNGPINGB0YLRgNC-0LrQsCcpOyByZXR1cm4geyB0ZXh0OiBzcmMsIG1pc3NlZDogbWlzc2VkIH07IH0KICAgICAgdmFyIGJvZHkgPSBkLnRpY2tlci5tYXAoanNTdHIpLmpvaW4oJywgJyk7CiAgICAgIHZhciBvdXQgPSBzcmMucmVwbGFjZSgvdmFyIGl0ZW1zID0gXFtbXHNcU10qP1xdOy8sICd2YXIgaXRlbXMgPSBbXG4gICAgICAgICcgKyBib2R5ICsgJ1xuICAgICAgXTsnKTsKICAgICAgdHJ5IHsgbmV3IEZ1bmN0aW9uKG91dCk7IH0KICAgICAgY2F0Y2ggKGUpIHsgdGhyb3cgbmV3IEVycm9yKCfQv9C-0YHQu9C1INC_0YDQsNCy0LrQuCDRgdC60YDQuNC_0YIg0YHRgtGA0LDQvdC40YbRiyDRgdGC0LDQuyDQvdC10LrQvtGA0YDQtdC60YLQvdGL0LwgKCcgKyBlLm1lc3NhZ2UgKyAnKS4g0KHQsdC-0YDQutCwINC-0YLQvNC10L3QtdC90LAuJyk7IH0KICAgICAgcmV0dXJuIHsgdGV4dDogb3V0LCBtaXNzZWQ6IG1pc3NlZCB9OwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYnVpbGRMZChkb2MsIHNjb3BlLCBkKSB7CiAgICAgIHZhciBzID0gYWxsKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKVswXTsKICAgICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiBsZCtqc29uJyB9OwogICAgICB2YXIgbzsKICAgICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAnbGQranNvbiDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQogICAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgICBzeW5jQ2Fub24oZyk7CgogICAgICB2YXIgcGFnZSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnV2ViUGFnZSc7IH0pWzBdOwogICAgICBpZiAocGFnZSkgewogICAgICAgIHBhZ2UubmFtZSA9IGQuc2VvLnBhZ2VOYW1lOwogICAgICAgIHBhZ2UuZGVzY3JpcHRpb24gPSBkLnNlby5wYWdlRGVzY3JpcHRpb247CiAgICAgICAgcGFnZS5kYXRlTW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApOwogICAgICB9CgogICAgICB2YXIgY291cnNlID0gZy5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gPT09ICdDb3Vyc2UnOyB9KVswXTsKICAgICAgaWYgKGNvdXJzZSkgewogICAgICAgIGNvdXJzZS5uYW1lID0gZC5zZW8uY291cnNlTmFtZTsKICAgICAgICBjb3Vyc2UuZGVzY3JpcHRpb24gPSBkLnNlby5jb3Vyc2VEZXNjcmlwdGlvbjsKCiAgICAgICAgLyog0YbQtdC90Ysg4oCUINC40Lcg0LrQsNGA0YLQvtGH0LXQuiDQvdCwINGB0YLRgNCw0L3QuNGG0LUgKi8KICAgICAgICB2YXIgYnlOYW1lID0ge307CiAgICAgICAgKGNvdXJzZS5vZmZlcnMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG9mZiwgaSkgeyBieU5hbWVbaV0gPSBvZmY7IH0pOwogICAgICAgIC8qINGC0YDQuCDRhtC10L3Riywg0Lgg0LLRgdC1INGC0YDQuCDigJQg0LjQtyDQutCw0YDRgtC-0YfQtdC6INC90LDQstC10YDRhdGDINGB0YLRgNCw0L3QuNGG0Ys6CiAgICAgICAgICAg0LjQvdGC0LXQvdGB0LjQsiwg0LrRg9GA0YEg0Lgg0LTQvtC_LdC80L7QtNGD0LvRjCDQstC90YPRgtGA0Lgg0LrQsNGA0YLQvtGH0LrQuCDQutGD0YDRgdCwICovCiAgICAgICAgdmFyIHdpdGhBZGRvbiA9IGQuZm9ya3MuZmlsdGVyKGZ1bmN0aW9uIChmKSB7IHJldHVybiBmLmFkZG9uOyB9KVswXTsKICAgICAgICB2YXIgcHJpY2VzID0gWwogICAgICAgICAgZGlnaXRzKChkLmZvcmtzWzBdIHx8IHt9KS5wcmljZSksCiAgICAgICAgICBkaWdpdHMoKGQuZm9ya3NbMV0gfHwge30pLnByaWNlKSwKICAgICAgICAgIHdpdGhBZGRvbiA_IGRpZ2l0cyh3aXRoQWRkb24uYWRkb24ucHJpY2UpIDogJycKICAgICAgICBdOwogICAgICAgIChjb3Vyc2Uub2ZmZXJzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChvZmYsIGkpIHsKICAgICAgICAgIGlmIChwcmljZXNbaV0pIG9mZi5wcmljZSA9IHByaWNlc1tpXTsKICAgICAgICB9KTsKICAgICAgICAoY291cnNlLmhhc0NvdXJzZUluc3RhbmNlIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChjaSwgaSkgewogICAgICAgICAgdmFyIHAgPSBwcmljZXNbaV07CiAgICAgICAgICBpZiAoY2kub2ZmZXJzICYmIHApIGNpLm9mZmVycy5wcmljZSA9IHA7CiAgICAgICAgfSk7CgogICAgICAgIC8qINC_0YDQvtCz0YDQsNC80LzQsCDigJQg0LjQtyDQutCw0YDRgtC-0YfQtdC6INC80L7QtNGD0LvQtdC5INC4INC00L7Qvy3QvNC-0LTRg9C70Y8gKi8KICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb3Vyc2Uuc3lsbGFidXNTZWN0aW9ucykpIHsKICAgICAgICAgIHZhciBjYXJkcyA9IGFsbChzY29wZSwgJy5tb2QtY2FyZCcpLm1hcChmdW5jdGlvbiAoYykgewogICAgICAgICAgICB2YXIgbnVtID0gdChvbmUoYywgJy5tb2QtbnVtJykpOwogICAgICAgICAgICB2YXIgdGFnID0gdChvbmUoYywgJy5tb2QtdGFnJykpOwogICAgICAgICAgICB2YXIgbmFtZSA9IC9eXGQrJC8udGVzdChudW0pID8gKHRhZyArICcgJyArIG51bSArICc6ICcgKyB0KG9uZShjLCAnaDMnKSkpIDogKHRhZyArICc6ICcgKyB0KG9uZShjLCAnaDMnKSkpOwogICAgICAgICAgICByZXR1cm4geyAnQHR5cGUnOiAnU3lsbGFidXMnLCBuYW1lOiBuYW1lLCBkZXNjcmlwdGlvbjogdChvbmUoYywgJ3AnKSkgfTsKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIGFkID0gb25lKHNjb3BlLCAnLmFkZG9uJyk7CiAgICAgICAgICBpZiAoYWQpIHsKICAgICAgICAgICAgY2FyZHMucHVzaCh7CiAgICAgICAgICAgICAgJ0B0eXBlJzogJ1N5bGxhYnVzJywKICAgICAgICAgICAgICBuYW1lOiAn0JTQvtC_LdC80L7QtNGD0LvRjDogJyArIHQob25lKGFkLCAnaDMnKSksCiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHQob25lKGFkLCAnLmFkZG9uLXN1YicpKQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvdXJzZS5zeWxsYWJ1c1NlY3Rpb25zID0gY2FyZHM7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKiDQstC-0L_RgNC-0YHRiyDigJQg0LjQtyDQstC40LTQuNC80L7Qs9C-INGC0LXQutGB0YLQsCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4gKi8KICAgICAgdmFyIGZhcSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pWzBdOwogICAgICBpZiAoZmFxKSB7CiAgICAgICAgZmFxLm1haW5FbnRpdHkgPSBhbGwoc2NvcGUsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnQHR5cGUnOiAnUXVlc3Rpb24nLAogICAgICAgICAgICBuYW1lOiB0KG9uZShpdCwgJy5mYXEtcS10ZXh0JykpLAogICAgICAgICAgICBhY2NlcHRlZEFuc3dlcjogeyAnQHR5cGUnOiAnQW5zd2VyJywgdGV4dDogdGV4dFdpdGhCcmVha3Mob25lKGl0LCAnLmZhcS1hLWlubmVyJykpIH0KICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcuYXYtbGVhcm4nKTsKICAgICAgICB2YXIgc3R5bGUgPSBhbGwoZG9jLCAnc3R5bGUnKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2LWxlYXJuIC5tb2QtY2FyZCcpID4gLTE7IH0pWzBdOwogICAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ2F2bC10aWNrZXInKSA-IC0xOyB9KVswXTsKCiAgICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6IC5hdi1sZWFybicpOwogICAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgnPHN0eWxlPiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgaWYgKCFzY3JpcHQpIG1pc3NpbmcucHVzaCgnPHNjcmlwdD4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LUg0L3QsNC50LTQtdC90L46ICcgKyBtaXNzaW5nLmpvaW4oJywgJykpOwoKICAgICAgICAvKiDRiNCw0L_QutGDINCx0LvQvtC60LAg0LHQtdGA0ZHQvCDRgdGL0YDQvtC5INC40Lcg0LjRgdGF0L7QtNC90LjQutCwOiDRgdGC0YDQvtC60LggPGhlYWQ-INGDIHdmb2xpbyDRgdCy0L7QuCwKICAgICAgICAgICDRgdC-0LHQuNGA0LDRgtGMINC40YUg0L_QvtC40YHQutC-0Lwg0L_QviDQtNC-0LrRg9C80LXQvdGC0YMg0L3QtdC70YzQt9GPICovCiAgICAgICAgdmFyIHN0YXJ0QXQgPSBzcmMuaW5kZXhPZignPCEtLVxuICA9Jyk7CiAgICAgICAgaWYgKHN0YXJ0QXQgPCAwKSBzdGFydEF0ID0gc3JjLmluZGV4T2YoJzwhLS0nKTsKICAgICAgICB2YXIgc3R5bGVBdCA9IHNyYy5pbmRleE9mKCc8c3R5bGU-Jywgc3RhcnRBdCk7CiAgICAgICAgaWYgKHN0YXJ0QXQgPCAwIHx8IHN0eWxlQXQgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ9C90LUg0YPQtNCw0LvQvtGB0Ywg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LPRgNCw0L3QuNGG0Ysg0LHQu9C-0LrQsCcpOwogICAgICAgIHZhciBoZWFkID0gc3JjLnNsaWNlKHN0YXJ0QXQsIHN0eWxlQXQpLnRyaW0oKTsKCiAgICAgICAgd3JpdGVBbGwoc2NvcGUsIGQpOwogICAgICAgIHZhciBzYyA9IHBhdGNoU2NyaXB0KHNjcmlwdC50ZXh0Q29udGVudCwgZCk7CiAgICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgICB2YXIgdGV4dCA9IFsKICAgICAgICAgIGhlYWQsCiAgICAgICAgICAnJywKICAgICAgICAgIHN0eWxlLm91dGVySFRNTCwKICAgICAgICAgICcnLAogICAgICAgICAgc2NvcGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdD4nLAogICAgICAgICAgc2MudGV4dC50cmltKCksCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nLAogICAgICAgICAgbGQudGV4dCwKICAgICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgICBdLmpvaW4oJ1xuJyk7CgogICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIG1pc3NlZDogc2MubWlzc2VkIH07CiAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvcHkodGV4dCwgbm90ZSkgewogICAgICAvKiDQn9C-0YHQu9C10LTQvdGP0Y8g0YfQtdGA0YLQsDog0L3QtdCy0LjQtNC40LzRi9C1IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNGB0YLRjAogICAgICAgICDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDQtNCw0LbQtSDQuNC3INGC0LXRhSDQutGD0YHQutC-0LIsINC60L7RgtC-0YDRi9C1INC_0LDQvdC10LvRjCDQutC-0L_QuNGA0YPQtdGCCiAgICAgICAgINC00L7RgdC70L7QstC90L4g4oCUINC40Lcg0YHRgtC40LvQtdC5LCDRgdC60YDQuNC_0YLQsCDQuCDRgNCw0LfQvNC10YLQutC4INCy0L3QtSDQv9C-0LvQtdC5LiDQotGD0LTQsCDQuNGFCiAgICAgICAgINC80L7QsyDQt9Cw0L3QtdGB0YLQuCDRgNC10LTQsNC60YLQvtGAIHdmb2xpbywg0LzQuNC90YPRjyDQv9C-0LvRjyDQv9Cw0L3QtdC70LguICovCiAgICAgIHRleHQgPSBTdHJpbmcodGV4dCkucmVwbGFjZSgvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2csICcnKTsKICAgICAgdmFyIHRhID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6bC1vdXQnKTsKICAgICAgdGEudmFsdWUgPSB0ZXh0OyB0YS5zZWxlY3QoKTsKICAgICAgdmFyIG9rID0gZmFsc2U7CiAgICAgIHRyeSB7IG9rID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaCAoZSkge30KICAgICAgaWYgKG9rKSB7IG1zZyhub3RlKTsgcmV0dXJuOyB9CiAgICAgIC8qINCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0L3QtdC70YzQt9GPINGC0LXRgNGP0YLRjCDQstC80LXRgdGC0LUg0YEg0YHQvtC-0LHRidC10L3QuNC10Lwg0L7QsSDRg9GB0L_QtdGF0LU6CiAgICAgICAgINC10YHQu9C4INCx0YPRhNC10YAg0L3QtSDRgdGA0LDQsdC-0YLQsNC7LCDRh9C10LvQvtCy0LXQuiDQstGB0ZEg0YDQsNCy0L3QviDQtNC-0LvQttC10L0g0LjRhSDRg9Cy0LjQtNC10YLRjC4gKi8KICAgICAgdmFyIG1hbnVhbCA9ICfQktGL0LTQtdC70LjRgtC1INGC0LXQutGB0YIg0L3QuNC20LUg0Lgg0YHQutC-0L_QuNGA0YPQudGC0LUg0LLRgNGD0YfQvdGD0Y4gKENtZCtDKS4gJzsKICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUpOyB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9KTsKICAgICAgfSBlbHNlIHsgbXNnKG1hbnVhbCArIG5vdGUpOyB9CiAgICB9CgogICAgLyog0KfQuNGB0LvQsCDQstC90YPRgtGA0Lgg0LbQuNCy0YvRhSDRhNGA0LDQtyDQv9Cw0L3QtdC70Ywg0L3QtSDQv9C-0LTQvNC10L3Rj9C10YIsINCwINGB0LLQtdGA0Y_QtdGCOgogICAgICAg0L_QvtC00YHRgtCw0LLQu9GP0YLRjCDRhtC10L3RgyDQsiDQv9GA0LXQtNC70L7QttC10L3QuNC1INCy0YHQu9C10L_Rg9GOINC-0L_QsNGB0L3QtdC1LCDRh9C10Lwg0YHQutCw0LfQsNGC0YwuICovCiAgICBmdW5jdGlvbiB3YXJuaW5ncyhkKSB7CiAgICAgIHZhciB3ID0gW107CiAgICAgIHZhciBzdW0gPSAwLCBzZWVuID0gZmFsc2U7CiAgICAgIGQubW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7CiAgICAgICAgdmFyIG4gPSBwYXJzZUludChkaWdpdHMobS50YXNrcyksIDEwKTsKICAgICAgICBpZiAoIWlzTmFOKG4pKSB7IHN1bSArPSBuOyBzZWVuID0gdHJ1ZTsgfQogICAgICB9KTsKICAgICAgdmFyIHN0YXQgPSAoZC5hYm91dC5zdGF0cy5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIC_Qt9Cw0LTQsNC9L2kudGVzdChzLmxhYmVsKTsgfSlbMF0gfHwge30pLnRhcmdldDsKICAgICAgaWYgKHNlZW4gJiYgc3RhdCAmJiBkaWdpdHMoc3RhdCkgIT09IFN0cmluZyhzdW0pKSB7CiAgICAgICAgdy5wdXNoKCfQsiDRgdGH0ZHRgtGH0LjQutC1INC30LDQtNCw0L3QuNC5INGB0YLQvtC40YIgJyArIHN0YXQgKyAnLCDQsCDQv9C-INC80L7QtNGD0LvRj9C8INCy0YvRhdC-0LTQuNGCICcgKyBzdW0pOwogICAgICB9CiAgICAgIHZhciBtb2RzID0gKGQuYWJvdXQuc3RhdHMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7IHJldHVybiAv0LzQvtC00YPQuy9pLnRlc3Qocy5sYWJlbCk7IH0pWzBdIHx8IHt9KS50YXJnZXQ7CiAgICAgIGlmIChtb2RzICYmIGRpZ2l0cyhtb2RzKSAhPT0gU3RyaW5nKGQubW9kdWxlcy5sZW5ndGgpKSB7CiAgICAgICAgdy5wdXNoKCfQsiDRgdGH0ZHRgtGH0LjQutC1INC80L7QtNGD0LvQtdC5INGB0YLQvtC40YIgJyArIG1vZHMgKyAnLCDQsCDQutCw0YDRgtC-0YfQtdC6ICcgKyBkLm1vZHVsZXMubGVuZ3RoKTsKICAgICAgfQoKICAgICAgLyog0YbQtdC90YssINGD0L_QvtC80Y_QvdGD0YLRi9C1INCyINC-0YLQstC10YLQsNGFINC90LAg0LLQvtC_0YDQvtGB0YsgKi8KICAgICAgdmFyIHdpdGhBZGRvbiA9IGQuZm9ya3MuZmlsdGVyKGZ1bmN0aW9uIChmKSB7IHJldHVybiBmLmFkZG9uOyB9KVswXTsKICAgICAgdmFyIG51bXMgPSBbCiAgICAgICAgZGlnaXRzKChkLmZvcmtzWzBdIHx8IHt9KS5wcmljZSksCiAgICAgICAgZGlnaXRzKChkLmZvcmtzWzFdIHx8IHt9KS5wcmljZSksCiAgICAgICAgZGlnaXRzKChkLmZvcmtzWzFdIHx8IHt9KS5vbGRQcmljZSksCiAgICAgICAgd2l0aEFkZG9uID8gZGlnaXRzKHdpdGhBZGRvbi5hZGRvbi5wcmljZSkgOiAnJwogICAgICBdLmZpbHRlcihCb29sZWFuKTsKICAgICAgZC5mYXEuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICAgIHZhciBpblRleHQgPSAoZi5hLm1hdGNoKC9cZFtcZCAgXXszLH0vZykgfHwgW10pLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4gZGlnaXRzKHgpOyB9KTsKICAgICAgICBpblRleHQuZm9yRWFjaChmdW5jdGlvbiAoeCkgewogICAgICAgICAgaWYgKHgubGVuZ3RoID49IDQgJiYgbnVtcy5pbmRleE9mKHgpIDwgMCkgewogICAgICAgICAgICB3LnB1c2goJ9CyINC-0YLQstC10YLQtSAnICsgKGkgKyAxKSArICcg0YPQv9C-0LzRj9C90YPRgtCwINGB0YPQvNC80LAgJyArIG1vbmV5KHgpICsgJyDigr0sINC60L7RgtC-0YDQvtC5INC90LXRgiDQvdCwINGB0YLRgNCw0L3QuNGG0LUnKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybiB3OwogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emwtYnVpbGQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICB2YXIgZCA9IGNvbGxlY3QoKTsKICAgICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgICAgYXNzZW1ibGUoZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIG5vdGUgPSAn0KHQutC-0L_QuNGA0L7QstCw0L0g0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0YbQtdC70LjQutC-0LwgKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLiAnICsKICAgICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6INC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLic7CiAgICAgICAgaWYgKHJlcy5taXNzZWQubGVuZ3RoKSBub3RlICs9ICcg0J3QtSDQvdCw0LnQtNC10L3QviDQsiDRgdC60YDQuNC_0YLQtTogJyArIHJlcy5taXNzZWQuam9pbignLCAnKSArICcuJzsKICAgICAgICB2YXIgdyA9IHdhcm5pbmdzKGQpOwogICAgICAgIGlmICh3Lmxlbmd0aCkgbm90ZSArPSAnINCf0YDQvtCy0LXRgNGM0YLQtTogJyArIHcuam9pbignOyAnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emwtdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgICB2YXIgc25hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIHNjID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCdhdmwtdGlja2VyJykgPiAtMTsgfSlbMF07CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MucXVlcnlTZWxlY3RvcignLmF2LWxlYXJuJyksIHNjID8gc2MudGV4dENvbnRlbnQgOiAnJyk7CiAgICAgICAgcmVhZExkKGRvYywgYWdhaW4pOwogICAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgICAgaWYgKGEgPT09IGIpIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLicpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INCx0YvQu9C-JywgSlNPTi5wYXJzZShhKSk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0YHRgtCw0LvQvicsIEpTT04ucGFyc2UoYikpOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwogIH0KCiAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2LWxlYXJuJyk7CiAgICBpZiAoIXNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgLmF2LWxlYXJuJyk7CiAgICB2YXIgc2MgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgIHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJ2F2bC10aWNrZXInKSA-IC0xOwogICAgfSlbMF07CiAgICBjZmcgPSByZWFkQ2ZnKHNjb3BlLCBzYyA_IHNjLnRleHRDb250ZW50IDogJycpOwogICAgcmVhZExkKGRvYywgY2ZnKTsKICAgIHN0YXJ0KCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgIHJvb3QuaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6bC13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6bC1oZWFkIj48aDI-0J_QsNC90LXQu9GMINC-0LHRg9GH0LXQvdC40Y88L2gyPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6bC1ib2R5Ij48cCBjbGFzcz0iYXZ6bC1oaW50Ij7QndC1INGD0LTQsNC70L7RgdGMINC_0YDQvtGH0LjRgtCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizogJyArCiAgICAgIGVzYyhlLm1lc3NhZ2UpICsgJzwvcD48L2Rpdj48L2Rpdj4nOwogIH0pOwoKICByZXR1cm4gJ9Cf0LDQvdC10LvRjCDQvtCx0YPRh9C10L3QuNGPINC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJ3ZWIiLHRpdGxlOiLQn9Cw0L3QtdC70Ywg0YDQsNC30YDQsNCx0L7RgtC60Lgg0YHQsNC50YLQvtCyIixzaG9ydDoi0KHQsNC50YLRiyIsaGludDoi0LrQtdC50YHRiywg0YLQsNGA0LjRhNGLLCDRgdC-0YHRgtCw0LIsINGA0LDQt9C80LXRgtC60LAiLHBhZ2VzOlsiL3dlYnNpdGUtZGV2ZWxvcG1lbnQiXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0KDQkNCX0KDQkNCR0J7QotCa0Jgg0KHQkNCZ0KLQntCSICB2MiDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgIHYyICgyMDI2LTEwLTIzKTog0LvQvtC20L3QvtC1IMKr0LLQvtC_0YDQvtGB0L7QsiDQvdCwINGB0YLRgNCw0L3QuNGG0LUg0L3QtdGCwrsg0YPQsdGA0LDQvdC-IOKAlCDRgdCy0LXRgNGP0LXRgtGB0Y8KICAg0YfQuNGB0LvQviDQstC-0L_RgNC-0YHQvtCyINCyINGA0LDQt9C80LXRgtC60LUg0YEg0LHQu9C-0LrQsNC80LggLnFhINC90LAg0YHRgtGA0LDQvdC40YbQtS4g0JHQu9C-0Log0YHRgtGA0LDQvdC40YbRiyB2MgogICDCq9C20YPRgNC90LDQu8K7ICjRiNGA0LjRhNGC0Ysg0LggR1NBUCDQstGI0LjRgtGLINCyINGB0YLQuNC70Ywg0Lgg0YHQutGA0LjQv9GCKSDQv9Cw0L3QtdC70Ywg0L_QtdGA0LXQvdC-0YHQuNGCINGG0LXQu9C40LrQvtC8LgogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgL3dlYnNpdGUtZGV2ZWxvcG1lbnQKCiAgINCn0LjRgtCw0LXRgiDQmNCh0KXQntCU0J3Qq9CZINC60L7QtCDRgdGC0YDQsNC90LjRhtGLLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLCiAgINC4INCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvC4KCiAgINCn0YLQviDQv9Cw0L3QtdC70Ywg0LTQtdGA0LbQuNGCINCy0LzQtdGB0YLQtSwg0YfRgtC-0LHRiyDQvdC1INGA0LDQt9C-0YjQu9C-0YHRjDoKICAgICDCtyDRhtC10L3RiyDRgtCw0YDQuNGE0L7QsiDihpIg0L_RgNC10LTQu9C-0LbQtdC90LjRjyDQsiDRgNCw0LfQvNC10YLQutC1INC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyOwogICAgIMK3INC60LXQudGB0Ysg4oaSINGD0LfQu9GLIENyZWF0aXZlV29yayAo0YHQvtC_0L7RgdGC0LDQstC70Y_RjtGC0YHRjyDQv9C-INCw0LTRgNC10YHRgyDRgNCw0LfQsdC-0YDQsCwKICAgICAgINC_0L7RjdGC0L7QvNGDINC_0L7RgNGP0LTQvtC6INC80L7QttC90L4g0LzQtdC90Y_RgtGMLCDQsCDRgdCy0Y_Qt9GMINC90LUg0L_QvtGC0LXRgNGP0LXRgtGB0Y8pLgoKICAg0JfQsNCz0L7Qu9C-0LLQvtC6INGB0LXQutGG0LjQuCDQutC10LnRgdC-0LIg0L3QsCDRgdGC0YDQsNC90LjRhtC1IOKAlCA8aDE-OiDQutC-0L3RgdGC0YDRg9C60YLQvtGAINC_0L7QtNC90Y_QuwogICDQtdCz0L4g0L_RgNC4INGB0L7RhdGA0LDQvdC10L3QuNC4LCDQuCDRjdGC0L4g0L_RgNCw0LLQuNC70YzQvdC-LCDRgyDRgdGC0YDQsNC90LjRhtGLINC00L7Qu9C20LXQvSDQsdGL0YLRjCDQvtC00LjQvQogICDQs9C70LDQstC90YvQuSDQt9Cw0LPQvtC70L7QstC-0LouINCf0LDQvdC10LvRjCDRh9C40YLQsNC10YIg0LXQs9C-INC_0L4g0LrQu9Cw0YHRgdGDIC5oLXNlY3Rpb24sCiAgINCwINC90LUg0L_QviDRgtC10LPRgywg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0YLQtdC8INC20LUg0YLQtdCz0L7QvC4KCiAgINCY0LfQstC10YHRgtC90L7QtSDRgNCw0YHRhdC-0LbQtNC10L3QuNC1OiDQutC-0L3RgdGC0YDRg9C60YLQvtGAINC_0LXRgNC10L_QuNGB0YvQstCw0LXRgiDRgdCw0LzQvtC30LDQutGA0YvQstCw0Y7RidC40LXRgdGPCiAgINGC0LXQs9C4INCy0L3Rg9GC0YDQuCBTVkcgKDxwYXRoLz4g0YHRgtCw0L3QvtCy0LjRgtGB0Y8gPHBhdGg-PC9wYXRoPikuINCe0YLQvtCx0YDQsNC20LDQtdGC0YHRjwogICDQvtC00LjQvdCw0LrQvtCy0L4sINCyINC00LjRhNGE0LUg4oCUINC70LjRiNC90LjQtSDRgdGC0YDQvtC60LguINCt0YLQviDQvdC1INC_0YDQsNCy0LrQsC4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiAtLS0tLS0tLS0tINC_0YDQvtCy0LXRgNC60LAgwqvQtNC-0LvQtdGC0LXQu9C-INC70LjCuyAtLS0tLS0tLS0tCiAgICAg0J_QsNC90LXQu9GMINC_0LjRiNC10YIg0LfQvdCw0YfQtdC90LjRjyDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQtdC3INGB0LXQu9C10LrRgtC-0YDRiy4g0JXRgdC70Lgg0YHQtdC70LXQutGC0L7RgAogICAgINC90LUg0L3QsNGI0ZHQu9GB0Y8g0LjQu9C4INC_0L7QtNGB0YLQsNC90L7QstC60LAg0L3QtSDRgdC-0LLQv9Cw0LvQsCDigJQg0LfQsNC_0LjRgdGMINC80L7Qu9GH0LAg0L3QtSDQv9GA0L7QuNGB0YXQvtC00LjRgi4KICAgICDQmNC80LXQvdC90L4g0YLQsNC6INGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC30LDRgdGC0YDRj9C70L4g0L3QsCAxMjU6INC_0LDQvdC10LvRjCDQv9C-0YHRh9C40YLQsNC70LAgMTI3LAogICAgINC30LDQv9C40YHQsNGC0Ywg0L3QtSDRgdC80L7Qs9C70LAsINCwINC_0YDQvtCy0LXRgNC60LAgwqvRgdCx0L7RgNC60LAg0YHQvtCy0L_QsNC00LDQtdGCINGBINC40YHRhdC-0LTQvdC40LrQvtC8wrsKICAgICDRgdGA0LDQstC90LjQstCw0LvQsCDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3QvtC1INGBINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdGL0LwuCgogICAgINCf0L7RjdGC0L7QvNGDINC_0L7RgdC70LUg0YHQsdC-0YDQutC4INGH0LjRgtCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0J7QkdCg0JDQotCd0J4g0Lgg0YHQstC10YDRj9C10Lwg0YEg0YLQtdC8LCDRh9GC0L4KICAgICDQstCy0ZHQuyDRh9C10LvQvtCy0LXQui4g0J3QtdGB0L7QstC_0LDQstGI0LjQtSDQv9C-0LvRjyDQv9Cw0L3QtdC70Ywg0L3QsNC30YvQstCw0LXRgiDQstGB0LvRg9GFLiAqLwogIGZ1bmN0aW9uIGxhbmRlZChleHBlY3RlZCwgYWN0dWFsLCBza2lwLCBwYXRoLCBvdXQpIHsKICAgIHBhdGggPSBwYXRoIHx8ICcnOyBvdXQgPSBvdXQgfHwgW107CiAgICBpZiAoZXhwZWN0ZWQgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0JyAmJiBhY3R1YWwgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHsKICAgICAgT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgICBsYW5kZWQoZXhwZWN0ZWRba10sIGFjdHVhbFtrXSwgc2tpcCwgcGF0aCA_IHBhdGggKyAnLicgKyBrIDogaywgb3V0KTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKFN0cmluZyhleHBlY3RlZCA9PSBudWxsID8gJycgOiBleHBlY3RlZCkgIT09IFN0cmluZyhhY3R1YWwgPT0gbnVsbCA_ICcnIDogYWN0dWFsKSkgewogICAgICBpZiAoIXNraXAgfHwgIXNraXAudGVzdChwYXRoKSkgb3V0LnB1c2gocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0Lkg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlAogICAgINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40Log0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuAogICAgINCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINGN0YLQuCDRg9C30LvRiwogICAgINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMzAg0L7QutGC0Y_QsdGA0Y8gMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5LTAxLTAxIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICIxNDkwMC01NDkwMCIsCiAgICAgICJvcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICJkYXlPZldlZWsiOiBbCiAgICAgICAgICAgICJNb25kYXkiLAogICAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgICAiVGh1cnNkYXkiLAogICAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICAgIlN1bmRheSIKICAgICAgICAgIF0sCiAgICAgICAgICAib3BlbnMiOiAiMTA6MDAiLAogICAgICAgICAgImNsb3NlcyI6ICIyMDowMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2enctcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIE1BWFcgPSAxMjQwOwoKICBmdW5jdGlvbiBvbmUoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWwpOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9IH0KICBmdW5jdGlvbiBhbGwoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gW10uc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkpOyB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfSB9CiAgZnVuY3Rpb24gdChlbCkgeyByZXR1cm4gZWwgPyBlbC50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGh0bWwoZWwpIHsgcmV0dXJuIGVsID8gZWwuaW5uZXJIVE1MLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gb3duVGV4dChlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuICcnOwogICAgdmFyIHMgPSAnJzsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgcyArPSBlbC5jaGlsZE5vZGVzW2ldLm5vZGVWYWx1ZTsKICAgIH0KICAgIHJldHVybiBzLnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CiAgZnVuY3Rpb24gYXR0cihlbCwgYSkgeyByZXR1cm4gZWwgPyAoZWwuZ2V0QXR0cmlidXRlKGEpIHx8ICcnKSA6ICcnOyB9CiAgZnVuY3Rpb24gZGlnaXRzKHMpIHsgcmV0dXJuIFN0cmluZyhzIHx8ICcnKS5yZXBsYWNlKC9bXjAtOV0vZywgJycpOyB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGxhYmVscyA9IGFsbChzY29wZSwgJy5zZWN0aW9uLWxhYmVsJyk7CiAgICB2YXIgaGVhZHMgPSBhbGwoc2NvcGUsICcuaC1zZWN0aW9uJyk7CiAgICB2YXIgdGllcnMgPSBhbGwoc2NvcGUsICcudGllcicpOwoKICAgIHJldHVybiB7CiAgICAgIGxhYmVsczogbGFiZWxzLm1hcChmdW5jdGlvbiAobCkgewogICAgICAgIHJldHVybiB7IG51bTogdChvbmUobCwgJy5udW0nKSksIGV5ZWJyb3c6IHQob25lKGwsICcuZXllYnJvdycpKSB9OwogICAgICB9KSwKICAgICAgaGVhZHM6IGhlYWRzLm1hcChmdW5jdGlvbiAoaCkgeyByZXR1cm4gaHRtbChoKTsgfSksCiAgICAgIHRvcEJ0bjogewogICAgICAgIHRleHQ6IG93blRleHQob25lKHNjb3BlLCAnLndvcmstaGVhZCAuYnRuJykpLAogICAgICAgIGhyZWY6IGF0dHIob25lKHNjb3BlLCAnLndvcmstaGVhZCAuYnRuJyksICdocmVmJykKICAgICAgfSwKICAgICAgY2FzZXM6IGFsbChzY29wZSwgJy5tLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGEpIHsKICAgICAgICB2YXIgaW0gPSBvbmUoYSwgJ2ltZycpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBocmVmOiBhdHRyKGEsICdocmVmJyksCiAgICAgICAgICBudW06IHQob25lKGEsICcubS1udW0nKSksCiAgICAgICAgICBuYW1lOiB0KG9uZShhLCAnLm0tdHh0IGInKSksCiAgICAgICAgICBzdWI6IHQob25lKGEsICcubS10eHQgaScpKSwKICAgICAgICAgIGltZzogYXR0cihpbSwgJ3NyYycpLAogICAgICAgICAgYWx0OiBhdHRyKGltLCAnYWx0JyksCiAgICAgICAgICBhcmlhOiBhdHRyKGEsICdhcmlhLWxhYmVsJykKICAgICAgICB9OwogICAgICB9KSwKICAgICAgdGllcnM6IHRpZXJzLm1hcChmdW5jdGlvbiAoeCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBuYW1lOiB0KG9uZSh4LCAnaDMnKSksCiAgICAgICAgICB0ZXJtOiB0KG9uZSh4LCAnLnRlcm0nKSksCiAgICAgICAgICBwcmljZTogb3duVGV4dChvbmUoeCwgJy5wcmljZScpKSwKICAgICAgICAgIGN1cjogdChvbmUoeCwgJy5wcmljZSBlbScpKSwKICAgICAgICAgIHRleHQ6IHQob25lKHgsICdwJykpCiAgICAgICAgfTsKICAgICAgfSksCiAgICAgIGluY2w6IHsKICAgICAgICBoZWFkOiB0KG9uZShzY29wZSwgJy5pbmNsLWgnKSksCiAgICAgICAgaXRlbXM6IGFsbChzY29wZSwgJy5pbmNsIGxpJykubWFwKGZ1bmN0aW9uIChsaSkgeyByZXR1cm4gdChsaSk7IH0pLAogICAgICAgIG5vdGU6IHQob25lKHNjb3BlLCAnLmluY2wgLm5vdGUnKSkKICAgICAgfSwKICAgICAgY3RhOiB7CiAgICAgICAgbWFpbjogeyB0ZXh0OiBvd25UZXh0KG9uZShzY29wZSwgJy53ZWItY3RhIC5idG4nKSksIGhyZWY6IGF0dHIob25lKHNjb3BlLCAnLndlYi1jdGEgLmJ0bicpLCAnaHJlZicpIH0sCiAgICAgICAgZ2hvc3Q6IHsgdGV4dDogdChvbmUoc2NvcGUsICcud2ViLWN0YSAuZ2hvc3QnKSksIGhyZWY6IGF0dHIob25lKHNjb3BlLCAnLndlYi1jdGEgLmdob3N0JyksICdocmVmJykgfQogICAgICB9LAogICAgICBzZW86IHsgcGFnZU5hbWU6ICcnLCBwYWdlRGVzY3JpcHRpb246ICcnLCBzcnZOYW1lOiAnJywgc3J2RGVzY3JpcHRpb246ICcnLCByZXRvdWNoOiAnJywgZmFxOiBbXSB9CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcmVhZExkKGRvYywgY2ZnKSB7CiAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgIHRyeSB7IEpTT04ucGFyc2UoeC50ZXh0Q29udGVudCk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfQogICAgfSlbMF07CiAgICBpZiAoIXMpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgKG9bJ0BncmFwaCddIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdXZWJQYWdlJyAmJiBTdHJpbmcoblsnQGlkJ10pLmluZGV4T2YoJ2F2YW56YXRvLnJ1L3dlYnNpdGUtZGV2ZWxvcG1lbnQnKSA-IC0xKSB7CiAgICAgICAgICBjZmcuc2VvLnBhZ2VOYW1lID0gbi5uYW1lIHx8ICcnOwogICAgICAgICAgY2ZnLnNlby5wYWdlRGVzY3JpcHRpb24gPSBuLmRlc2NyaXB0aW9uIHx8ICcnOwogICAgICAgIH0KICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1NlcnZpY2UnKSB7CiAgICAgICAgICBjZmcuc2VvLnNydk5hbWUgPSBuLm5hbWUgfHwgJyc7CiAgICAgICAgICBjZmcuc2VvLnNydkRlc2NyaXB0aW9uID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICAgIChuLm9mZmVycyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAob2ZmKSB7CiAgICAgICAgICAgIGlmICgv0YDQtdGC0YPRiC9pLnRlc3Qob2ZmLm5hbWUgfHwgJycpKSBjZmcuc2VvLnJldG91Y2ggPSBvZmYucHJpY2UgfHwgJyc7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdGQVFQYWdlJykgewogICAgICAgICAgY2ZnLnNlby5mYXEgPSAobi5tYWluRW50aXR5IHx8IFtdKS5tYXAoZnVuY3Rpb24gKHEpIHsKICAgICAgICAgICAgcmV0dXJuIHsgcTogcS5uYW1lIHx8ICcnLCBhOiAoKHEuYWNjZXB0ZWRBbnN3ZXIgfHwge30pLnRleHQpIHx8ICcnIH07CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLyog0J3QsNC30LLQsNC90LjQtSDQutC10LnRgdCwINCyINGA0LDQt9C80LXRgtC60LUg0YDQsNC30LLRkdGA0L3Rg9GC0LXQtSDQv9C-0LTQv9C40YHQuCDQvdCwINC60LDRgNGC0L7Rh9C60LUKICAgICAgICAgICAowqvRgdCw0LnRgiDRgtGD0YDQuNGB0YLQuNGH0LXRgdC60L7Qs9C-INCw0LPQtdC90YLRgdGC0LLQsMK7INC_0YDQvtGC0LjQsiDCq9GC0YPRgNCw0LPQtdC90YLRgdGC0LLQviwKICAgICAgICAgICDQnNCw0LvRjNC00LjQstGLwrspLCDQv9C-0Y3RgtC-0LzRgyDQtNC10YDQttC40Lwg0LXQs9C-INC-0YLQtNC10LvRjNC90YvQvCDQv9C-0LvQtdC8OiDQstGL0LLQtdGB0YLQuAogICAgICAgICAgINC-0LTQvdC-INC40Lcg0LTRgNGD0LPQvtCz0L4g4oCUINC30L3QsNGH0LjRgiDQvtCx0LXQtNC90LjRgtGMINGA0LDQt9C80LXRgtC60YMuICovCiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdDcmVhdGl2ZVdvcmsnKSB7CiAgICAgICAgICB2YXIgYyA9IGNmZy5jYXNlcy5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguaHJlZiA9PT0gbi51cmw7IH0pWzBdOwogICAgICAgICAgaWYgKGMpIHsgYy5zZW9OYW1lID0gbi5uYW1lIHx8ICcnOyBjLnNlb0Rlc2MgPSBuLmRlc2NyaXB0aW9uIHx8ICcnOyB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsgLyog0YHQsdC-0YDQutCwINGB0L7QvtCx0YnQuNGCICovIH0KICB9CgogIC8qIC0tLS0tLS0tLS0g0L_QsNC90LXQu9GMIC0tLS0tLS0tLS0gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6dy1yb290LCNhdnp3LXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnp3LXJvb3QgaW5wdXQsI2F2enctcm9vdCB0ZXh0YXJlYXtiYWNrZ3JvdW5kOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7JywKICAgICdvcGFjaXR5OjEgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjEuNCAhaW1wb3J0YW50fScsCiAgICAnI2F2enctcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1iLnB7YmFja2dyb3VuZDojMWQxZDFmICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiNmZmYgIWltcG9ydGFudH0nLAogICAgJyNhdnp3LXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2enctd2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDEwMDBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enctaGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6dy1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9JywKICAgICcjYXZ6dy1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnp3LWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctc2VjPnN1bW1hcnl7cGFkZGluZzoxMnB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZhZmFmYTtsaXN0LXN0eWxlOm5vbmV9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QkUgICJ9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWYgaW5wdXQsI2F2enctcm9vdCAuYXZ6dy1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1mIHRleHRhcmVhe21pbi1oZWlnaHQ6NzBweDtyZXNpemU6dmVydGljYWx9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmciAxZnI7Z2FwOjEycHh9JywKICAgICdAbWVkaWEgKG1heC13aWR0aDo1NjBweCl7I2F2enctcm9vdCAuYXZ6dy1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6dy13aW57Ym9yZGVyLXJhZGl1czowfX0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LWNhcmQgaDR7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudH0nLAogICAgJyNhdnp3LXJvb3QgLmF2enctaW1ne2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1pbWc-aW1ne3dpZHRoOjk2cHg7aGVpZ2h0OjYycHg7b2JqZWN0LWZpdDpjb3ZlcjtvYmplY3QtcG9zaXRpb246dG9wIGNlbnRlcjtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiNlY2VjZWM7ZmxleDpub25lfScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1pbWcgLmd7ZmxleDoxO21pbi13aWR0aDowfScsCiAgICAnI2F2enctcm9vdCAuYXZ6dy1oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6dy1yb290IC5hdnp3LXdhcm57Zm9udC1zaXplOjEycHg7Y29sb3I6IzhhNGIwMCAhaW1wb3J0YW50O2JhY2tncm91bmQ6I2ZmZjVlNjtib3JkZXI6MXB4IHNvbGlkICNmMGQ1YTg7JywKICAgICdib3JkZXItcmFkaXVzOjhweDtwYWRkaW5nOjEwcHggMTJweDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6dy1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6dy1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIHZhciB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyAnPHRleHRhcmVhIGRhdGEtcD0iJyArIHBhdGggKyAnIj5cbicgKyBlc2ModmFsKSArICc8L3RleHRhcmVhPicKICAgICAgOiAnPGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6dy1mIj48bGFiZWw-JyArIGxhYmVsICsgJzwvbGFiZWw-JyArIHRhZyArICc8L2Rpdj4nOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2enctcm9vdCc7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyb290KTsKCiAgLyogLS0tLS0tLS0tLSDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70YsgLS0tLS0tLS0tLQogICAgINCg0LXQtNCw0LrRgtC-0YAgd2ZvbGlvINC4INC10LPQviDRgdC-0LHRgdGC0LLQtdC90L3Ri9C5INC40L3RgtC10YDRhNC10LnRgSDQstGB0YLQsNCy0LvRj9GO0YIg0LIg0LTQu9C40L3QvdGL0LUKICAgICDRgdGC0YDQvtC60LggwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7IOKAlCBVKzIwMEIg0Lgg0YDQvtC00L3Rjy4g0J3QsCDRjdC60YDQsNC90LUg0LjRhSDQvdC1INCy0LjQtNC90L4sCiAgICAg0LAg0LIg0LDQtNGA0LXRgdC1INGE0LDQudC70LAg0L7QvdC4INC70L7QvNCw0Y7RgiDRgdGB0YvQu9C60YM6INCx0YDQsNGD0LfQtdGAINC-0YLQstC10YfQsNC10YIgwqtGb3JtYXQgZXJyb3LCuywKICAgICDQutCw0YDRgtC40L3QutCwINC40LvQuCDQstC40LTQtdC-INC90LUg0LPRgNGD0LfRj9GC0YHRjy4g0J3QuCDQsiDQvtC00L3QvtC8INC_0L7Qu9C1INC_0LDQvdC10LvQuCDQuNC8INC00LXQu9Cw0YLRjAogICAgINC90LXRh9C10LPQviwg0L_QvtGN0YLQvtC80YMg0LLRi9GH0LjRidCw0LXQvCDQuNGFINC4INC_0YDQuCDQstCy0L7QtNC1LCDQuCDRgdC_0LvQvtGI0L3Ri9C8INC_0YDQvtGF0L7QtNC-0Lwg0L_QtdGA0LXQtAogICAgINGB0LHQvtGA0LrQvtC5IOKAlCDQt9C90LDRh9C10L3QuNC1INC80L7Qs9C70L4g0L_QvtC_0LDRgdGC0Ywg0LIg0L_QvtC70LUg0LzQuNC80L4g0YHQvtCx0YvRgtC40Lkg0LLQstC-0LTQsC4gKi8KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIFpXID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwogICAgZnVuY3Rpb24gc2NydWIoZWwpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgZWwudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gMDsKICAgICAgdmFyIHYgPSBlbC52YWx1ZS5yZXBsYWNlKFpXLCAnJyk7CiAgICAgIGlmICh2ID09PSBlbC52YWx1ZSkgcmV0dXJuIDA7CiAgICAgIGVsLnZhbHVlID0gdjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsgc2NydWIoZS50YXJnZXQpOyB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHNjcnViKGVsKTsgfSwgMCk7CiAgICB9LCB0cnVlKTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBlbHMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LHRleHRhcmVhJyksIG4gPSAwLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSBuICs9IHNjcnViKGVsc1tpXSk7CiAgICAgIGlmIChuKSBjb25zb2xlLndhcm4oJ0FWWjog0YPQsdGA0LDQvdGLINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyDRgNC10LTQsNC60YLQvtGA0LAsINC_0L7Qu9C10Lk6ICcgKyBuKTsKICAgIH0sIHRydWUpOwogIH0pKCk7CgogIGZ1bmN0aW9uIG1zZyhzKSB7IHZhciBlID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6dy1tc2cnKTsgaWYgKGUpIGUudGV4dENvbnRlbnQgPSBzOyB9CgogIHZhciBjZmcgPSBudWxsOwoKICBmdW5jdGlvbiBwYWdlU291cmNlKCkgewogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz90PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KTsKICB9CgogIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgdmFyIFNFQ1QgPSBbJ9Ca0LXQudGB0YsnLCAn0KHRgtC-0LjQvNC-0YHRgtGMJ107CgogICAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnp3LXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnp3LWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0YDQsNC30YDQsNCx0L7RgtC60Lgg0YHQsNC50YLQvtCyPC9oMj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enctYiIgaWQ9ImF2enctY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-PC9kaXY-PGRpdiBpZD0iYXZ6dy1ib2R5Ij4nICsKICAgICAgJzxwIGNsYXNzPSJhdnp3LWhpbnQiPtCm0LXQvdCwINGC0LDRgNC40YTQsCDQv9GA0LDQstC40YLRgdGPINC-0LTQuNC9INGA0LDQtzog0L7QvdCwINC20LUg0YPRhdC-0LTQuNGCINCyINGA0LDQt9C80LXRgtC60YMg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LIuICcgKwogICAgICAn0JrQtdC50YHRiyDRgdCy0Y_Qt9Cw0L3RiyDRgdC-INGB0LLQvtC40LzQuCDQvtC_0LjRgdCw0L3QuNGP0LzQuCDQsiDRgNCw0LfQvNC10YLQutC1INC_0L4g0LDQtNGA0LXRgdGDINGA0LDQt9Cx0L7RgNCwIOKAlCDQv9C-0YDRj9C00L7QuiDQvNC-0LbQvdC-INC80LXQvdGP0YLRjC48L3A-JzsKCiAgICAvKiDQmtCV0JnQodCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6dy1zZWMiIG9wZW4-PHN1bW1hcnk-0JrQtdC50YHRiyAoJyArIGNmZy5jYXNlcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnp3LWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnp3LWhpbnQiPtCh0L3QuNC80L7QuiDQsdC10YDRkdGC0YHRjyDRgSBnaXRodWIuaW8uINCd0LDQt9Cy0LDQvdC40LUg0Lgg0L7Qv9C40YHQsNC90LjQtSDRg9GF0L7QtNGP0YIg0Lgg0LIg0L_QvtC00L_QuNGB0Ywg0L_QvtC0ICcgKwogICAgICAn0LrQsNGA0YLQvtGH0LrQvtC5LCDQuCDQsiDRgNCw0LfQvNC10YLQutGDINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyLjwvcD4nOwogICAgY2ZnLmNhc2VzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6dy1jYXJkIj48aDQ-0JrQtdC50YEgJyArIGVzYyhjLm51bSB8fCAoaSArIDEpKSArICc8L2g0PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnp3LXJvdyI-JyArIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ2Nhc2VzLicgKyBpICsgJy5uYW1lJywgYy5uYW1lKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUnLCAnY2FzZXMuJyArIGkgKyAnLnN1YicsIGMuc3ViKSArICc8L2Rpdj4nICsKICAgICAgICBmaWVsZCgn0KHRgdGL0LvQutCwINC90LAg0YDQsNC30LHQvtGAJywgJ2Nhc2VzLicgKyBpICsgJy5ocmVmJywgYy5ocmVmKSArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enctaW1nIj48aW1nIGRhdGEtcHJldj0iY2FzZXMuJyArIGkgKyAnLmltZyIgc3JjPSInICsgZXNjKGMuaW1nKSArICciIGFsdD0iIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iZyI-JyArIGZpZWxkKCfQodC90LjQvNC-0LonLCAnY2FzZXMuJyArIGkgKyAnLmltZycsIGMuaW1nKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YHQvdC40LzQutCwIChhbHQpJywgJ2Nhc2VzLicgKyBpICsgJy5hbHQnLCBjLmFsdCkgKyAnPC9kaXY-PC9kaXY-JyArCiAgICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0LIg0YDQsNC30LzQtdGC0LrQtSAo0YDQsNC30LLRkdGA0L3Rg9GC0LXQtSDQv9C-0LTQv9C40YHQuCknLCAnY2FzZXMuJyArIGkgKyAnLnNlb05hbWUnLCBjLnNlb05hbWUgfHwgJycpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1JywgJ2Nhc2VzLicgKyBpICsgJy5zZW9EZXNjJywgYy5zZW9EZXNjIHx8ICcnLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCi0JDQoNCY0KTQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enctc2VjIj48c3VtbWFyeT7QotCw0YDQuNGE0Ysg0Lgg0YHQvtGB0YLQsNCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2enctaW4iPic7CiAgICBjZmcudGllcnMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnp3LWNhcmQiPjxoND7QotCw0YDQuNGEICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enctcm93Ij4nICsgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCAndGllcnMuJyArIGkgKyAnLm5hbWUnLCB4Lm5hbWUpICsKICAgICAgICBmaWVsZCgn0KHRgNC-0LonLCAndGllcnMuJyArIGkgKyAnLnRlcm0nLCB4LnRlcm0pICsgJzwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQptC10L3QsCAo0LrQsNC6INC90LAg0YHRgtGA0LDQvdC40YbQtSwg0L3QsNC_0YDQuNC80LXRgCDCq9C-0YIgNTUgMDAwwrspJywgJ3RpZXJzLicgKyBpICsgJy5wcmljZScsIHgucHJpY2UpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtScsICd0aWVycy4nICsgaSArICcudGV4dCcsIHgudGV4dCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0LHQu9C-0LrQsCDCq9CS0YXQvtC00LjRgsK7JywgJ2luY2wuaGVhZCcsIGNmZy5pbmNsLmhlYWQpOwogICAgY2ZnLmluY2wuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgaCArPSBmaWVsZCgn0J_Rg9C90LrRgiAnICsgKGkgKyAxKSwgJ2luY2wuaXRlbXMuJyArIGksIGl0KTsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0KHQvdC-0YHQutCwINC_0L7QtCDRgdC_0LjRgdC60L7QvCcsICdpbmNsLm5vdGUnLCBjZmcuaW5jbC5ub3RlLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Cm0LXQvdCwINGA0LXRgtGD0YjQuCDQsiDRgNCw0LfQvNC10YLQutC1LCDRgtC-0LvRjNC60L4g0YbQuNGE0YDRiycsICdzZW8ucmV0b3VjaCcsIGNmZy5zZW8ucmV0b3VjaCkgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KLQldCa0KHQotCrICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6dy1zZWMiPjxzdW1tYXJ5PtCX0LDQs9C-0LvQvtCy0LrQuCDQuCDQutC90L7Qv9C60Lg8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6dy1pbiI-JzsKICAgIGNmZy5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbiAobCwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnp3LXJvdyI-JyArIGZpZWxkKCfQndC-0LzQtdGAINGA0LDQt9C00LXQu9CwICcgKyAoaSArIDEpLCAnbGFiZWxzLicgKyBpICsgJy5udW0nLCBsLm51bSkgKwogICAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCAnICsgKGkgKyAxKSwgJ2xhYmVscy4nICsgaSArICcuZXllYnJvdycsIGwuZXllYnJvdykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgY2ZnLmhlYWRzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHsKICAgICAgaCArPSBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6IMKrJyArIChTRUNUW2ldIHx8IChpICsgMSkpICsgJ8K7ICjQvNC-0LbQvdC-ICZsdDticiZndDsg0LggJmx0O2VtJmd0OyknLCAnaGVhZHMuJyArIGksIHgpOwogICAgfSk7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnp3LXJvdyI-JyArIGZpZWxkKCfQmtC90L7Qv9C60LAg0LLQstC10YDRhdGDIOKAlCDRgtC10LrRgdGCJywgJ3RvcEJ0bi50ZXh0JywgY2ZnLnRvcEJ0bi50ZXh0KSArCiAgICAgIGZpZWxkKCfQmtC90L7Qv9C60LAg0LLQstC10YDRhdGDIOKAlCDQsNC00YDQtdGBJywgJ3RvcEJ0bi5ocmVmJywgY2ZnLnRvcEJ0bi5ocmVmKSArICc8L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enctcm93Ij4nICsgZmllbGQoJ9Ca0L3QvtC_0LrQsCDQstC90LjQt9GDIOKAlCDRgtC10LrRgdGCJywgJ2N0YS5tYWluLnRleHQnLCBjZmcuY3RhLm1haW4udGV4dCkgKwogICAgICBmaWVsZCgn0JrQvdC-0L_QutCwINCy0L3QuNC30YMg4oCUINCw0LTRgNC10YEnLCAnY3RhLm1haW4uaHJlZicsIGNmZy5jdGEubWFpbi5ocmVmKSArICc8L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2enctcm93Ij4nICsgZmllbGQoJ9Ch0YHRi9C70LrQsCDQstC90LjQt9GDIOKAlCDRgtC10LrRgdGCJywgJ2N0YS5naG9zdC50ZXh0JywgY2ZnLmN0YS5naG9zdC50ZXh0KSArCiAgICAgIGZpZWxkKCfQodGB0YvQu9C60LAg0LLQvdC40LfRgyDigJQg0LDQtNGA0LXRgScsICdjdGEuZ2hvc3QuaHJlZicsIGNmZy5jdGEuZ2hvc3QuaHJlZikgKyAnPC9kaXY-JyArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQoNCQ0JfQnNCV0KLQmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6dy1zZWMiPjxzdW1tYXJ5PtCg0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LI8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6dy1pbiI-JyArCiAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLnBhZ2VOYW1lJywgY2ZnLnNlby5wYWdlTmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLJywgJ3Nlby5wYWdlRGVzY3JpcHRpb24nLCBjZmcuc2VvLnBhZ2VEZXNjcmlwdGlvbiwgJ2FyZWEnKSArCiAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1INGD0YHQu9GD0LPQuCcsICdzZW8uc3J2TmFtZScsIGNmZy5zZW8uc3J2TmFtZSkgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCAnc2VvLnNydkRlc2NyaXB0aW9uJywgY2ZnLnNlby5zcnZEZXNjcmlwdGlvbiwgJ2FyZWEnKSArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQktCe0J_QoNCe0KHQqyAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enctc2VjIj48c3VtbWFyeT7QktC-0L_RgNC-0YHRiyDQsiDRgNCw0LfQvNC10YLQutC1ICgnICsgY2ZnLnNlby5mYXEubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6dy1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6dy13YXJuIj7QrdGC0LjRhSDQstC-0L_RgNC-0YHQvtCyINC90LAg0YHQsNC80L7QuSDRgdGC0YDQsNC90LjRhtC1INC90LXRgiDigJQg0L7QvdC4INGB0YPRidC10YHRgtCy0YPRjtGCINGC0L7Qu9GM0LrQviDQsiDRgNCw0LfQvNC10YLQutC1LiAnICsKICAgICAgJ0dvb2dsZSDQt9Cw0YHRh9C40YLRi9Cy0LDQtdGCINCy0L7Qv9GA0L7RgdGLINC70LjRiNGMINGC0L7Qs9C00LAsINC60L7Qs9C00LAg0YLQvtGCINC20LUg0YLQtdC60YHRgiDQstC40LTQuNGCINGH0LXQu9C-0LLQtdC6LCDRgtCw0Log0YfRgtC-INGB0LXQudGH0LDRgSAnICsKICAgICAgJ9C-0L3QuCDRgNCw0LHQvtGC0LDRjtGCINCy0YXQvtC70L7RgdGC0YPRji4g0JvQuNCx0L4g0LLRi9Cy0LXRgdGC0Lgg0LjRhSDQvdCwINGB0YLRgNCw0L3QuNGG0YMsINC70LjQsdC-INGD0LHRgNCw0YLRjCDQuNC3INGA0LDQt9C80LXRgtC60LguPC9wPic7CiAgICBjZmcuc2VvLmZhcS5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2enctY2FyZCI-PGg0PtCS0L7Qv9GA0L7RgSAnICsgKGkgKyAxKSArICc8L2g0PicgKwogICAgICAgIGZpZWxkKCfQktC-0L_RgNC-0YEnLCAnc2VvLmZhcS4nICsgaSArICcucScsIGYucSkgKwogICAgICAgIGZpZWxkKCfQntGC0LLQtdGCJywgJ3Nlby5mYXEuJyArIGkgKyAnLmEnLCBmLmEsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPC9kaXY-PGRpdiBpZD0iYXZ6dy1mb290Ij4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enctYiBwIiBpZD0iYXZ6dy1idWlsZCI-0KHQvtCx0YDQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enctYiIgaWQ9ImF2enctdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAgICc8c3BhbiBpZD0iYXZ6dy1tc2ciPjwvc3Bhbj48L2Rpdj4nICsKICAgICAgJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAyMHB4IDE4cHgiPjx0ZXh0YXJlYSBpZD0iYXZ6dy1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgICByb290LmlubmVySFRNTCA9IGg7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnp3LWNsb3NlJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcm9vdC5yZW1vdmUoKTsgfTsKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1wJyk7CiAgICAgIGlmICghcCkgcmV0dXJuOwogICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gZS50YXJnZXQudmFsdWU7CiAgICB9KTsKCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBzZXRQYXRoKG9iaiwgcGF0aCwgdmFsKSB7CiAgICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKSwgbyA9IG9iaiwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykgbyA9IG9bcGFydHNbaV1dOwogICAgICBvW3BhcnRzW3BhcnRzLmxlbmd0aCAtIDFdXSA9IHZhbDsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbGxlY3QoKSB7CiAgICAgIHZhciBkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHNldFBhdGgoZCwgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKSwgZWwudmFsdWUpOyB9KTsKICAgICAgcmV0dXJuIGQ7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQt9Cw0L_QuNGB0YwgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFRleHQoZWwsIHYpIHsKICAgICAgaWYgKCFlbCB8fCB0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHJldHVybjsKICAgICAgdmFyIHRleHRzID0gW10sIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHRleHRzLnB1c2goZWwuY2hpbGROb2Rlc1tpXSk7CiAgICAgIH0KICAgICAgaWYgKCF0ZXh0cy5sZW5ndGgpIHsgZWwuYXBwZW5kQ2hpbGQoZWwub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2KSk7IHJldHVybjsgfQogICAgICB2YXIgbWFpbiA9IG51bGw7CiAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0ZXh0c1tpXS5ub2RlVmFsdWUudHJpbSgpICE9PSAnJykgeyBtYWluID0gdGV4dHNbaV07IGJyZWFrOyB9CiAgICAgIH0KICAgICAgaWYgKCFtYWluKSBtYWluID0gdGV4dHNbMF07CiAgICAgIHZhciByYXcgPSBtYWluLm5vZGVWYWx1ZTsKICAgICAgdmFyIHByZSA9IChyYXcubWF0Y2goL15ccyovKSB8fCBbJyddKVswXTsKICAgICAgdmFyIHBvc3QgPSAocmF3Lm1hdGNoKC9ccyokLykgfHwgWycnXSlbMF07CiAgICAgIGlmIChyYXcudHJpbSgpID09PSAnJykgeyBwcmUgPSAnJzsgcG9zdCA9ICcnOyB9CiAgICAgIG1haW4ubm9kZVZhbHVlID0gcHJlICsgdiArIHBvc3Q7CiAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZXh0cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0ZXh0c1tpXSAhPT0gbWFpbiAmJiB0ZXh0c1tpXS5ub2RlVmFsdWUudHJpbSgpICE9PSAnJykgewogICAgICAgICAgdGV4dHNbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXh0c1tpXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBzZXRIdG1sKGVsLCB2KSB7IGlmIChlbCAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGVsLmlubmVySFRNTCA9IHY7IH0KCiAgICBmdW5jdGlvbiB3cml0ZUFsbChzY29wZSwgZCkgewogICAgICBhbGwoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCcpLmZvckVhY2goZnVuY3Rpb24gKGwsIGkpIHsKICAgICAgICB2YXIgdiA9IGQubGFiZWxzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShsLCAnLm51bScpLCB2Lm51bSk7CiAgICAgICAgc2V0VGV4dChvbmUobCwgJy5leWVicm93JyksIHYuZXllYnJvdyk7CiAgICAgIH0pOwogICAgICBhbGwoc2NvcGUsICcuaC1zZWN0aW9uJykuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkgewogICAgICAgIGlmICh0eXBlb2YgZC5oZWFkc1tpXSA9PT0gJ3N0cmluZycpIHNldEh0bWwoeCwgZC5oZWFkc1tpXSk7CiAgICAgIH0pOwoKICAgICAgdmFyIHRiID0gb25lKHNjb3BlLCAnLndvcmstaGVhZCAuYnRuJyk7CiAgICAgIGlmICh0YikgeyBzZXRUZXh0KHRiLCBkLnRvcEJ0bi50ZXh0KTsgdGIuc2V0QXR0cmlidXRlKCdocmVmJywgZC50b3BCdG4uaHJlZik7IH0KCiAgICAgIGFsbChzY29wZSwgJy5tLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmNhc2VzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB2Lm5hbWUgKyAnIOKAlCDRgdC80L7RgtGA0LXRgtGMINGA0LDQt9Cx0L7RgCDQv9GA0L7QtdC60YLQsCcpOwogICAgICAgIHZhciBpbSA9IG9uZShhLCAnaW1nJyk7CiAgICAgICAgaWYgKGltKSB7IGltLnNldEF0dHJpYnV0ZSgnc3JjJywgdi5pbWcpOyBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHYuYWx0KTsgfQogICAgICAgIHNldFRleHQob25lKGEsICcubS10eHQgYicpLCB2Lm5hbWUpOwogICAgICAgIHNldFRleHQob25lKGEsICcubS10eHQgaScpLCB2LnN1Yik7CiAgICAgIH0pOwoKICAgICAgYWxsKHNjb3BlLCAnLnRpZXInKS5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLnRpZXJzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZSh4LCAnaDMnKSwgdi5uYW1lKTsKICAgICAgICBzZXRUZXh0KG9uZSh4LCAnLnRlcm0nKSwgdi50ZXJtKTsKICAgICAgICBzZXRUZXh0KG9uZSh4LCAnLnByaWNlJyksIHYucHJpY2UpOwogICAgICAgIHNldFRleHQob25lKHgsICdwJyksIHYudGV4dCk7CiAgICAgIH0pOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaW5jbC1oJyksIGQuaW5jbC5oZWFkKTsKICAgICAgYWxsKHNjb3BlLCAnLmluY2wgbGknKS5mb3JFYWNoKGZ1bmN0aW9uIChsaSwgaSkgeyBzZXRUZXh0KGxpLCBkLmluY2wuaXRlbXNbaV0pOyB9KTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaW5jbCAubm90ZScpLCBkLmluY2wubm90ZSk7CgogICAgICB2YXIgbWIgPSBvbmUoc2NvcGUsICcud2ViLWN0YSAuYnRuJyk7CiAgICAgIGlmIChtYikgeyBzZXRUZXh0KG1iLCBkLmN0YS5tYWluLnRleHQpOyBtYi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkLmN0YS5tYWluLmhyZWYpOyB9CiAgICAgIHZhciBnYiA9IG9uZShzY29wZSwgJy53ZWItY3RhIC5naG9zdCcpOwogICAgICBpZiAoZ2IpIHsgc2V0VGV4dChnYiwgZC5jdGEuZ2hvc3QudGV4dCk7IGdiLnNldEF0dHJpYnV0ZSgnaHJlZicsIGQuY3RhLmdob3N0LmhyZWYpOyB9CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDRgNCw0LfQvNC10YLQutCwIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBidWlsZExkKGRvYywgc2NvcGUsIGQpIHsKICAgICAgdmFyIHMgPSBhbGwoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgIHRyeSB7IEpTT04ucGFyc2UoeC50ZXh0Q29udGVudCk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfQogICAgICB9KVswXTsKICAgICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiDRgNCw0LfQvNC10YLQutC4JyB9OwogICAgICB2YXIgbzsKICAgICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0YDQsNC30LzQtdGC0LrQsCDQvdC1INGH0LjRgtCw0LXRgtGB0Y86ICcgKyBlLm1lc3NhZ2UgfTsgfQogICAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgICBzeW5jQ2Fub24oZyk7CgogICAgICBnLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnICYmIFN0cmluZyhuWydAaWQnXSkuaW5kZXhPZignYXZhbnphdG8ucnUvd2Vic2l0ZS1kZXZlbG9wbWVudCcpID4gLTEpIHsKICAgICAgICAgIG4ubmFtZSA9IGQuc2VvLnBhZ2VOYW1lOwogICAgICAgICAgbi5kZXNjcmlwdGlvbiA9IGQuc2VvLnBhZ2VEZXNjcmlwdGlvbjsKICAgICAgICAgIG4uZGF0ZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdTZXJ2aWNlJykgewogICAgICAgICAgbi5uYW1lID0gZC5zZW8uc3J2TmFtZTsKICAgICAgICAgIG4uZGVzY3JpcHRpb24gPSBkLnNlby5zcnZEZXNjcmlwdGlvbjsKICAgICAgICAgIC8qINGG0LXQvdGLIOKAlCDQuNC3INGC0LDRgNC40YTQvtCyINC90LAg0YHRgtGA0LDQvdC40YbQtSwg0L_QvtGN0YLQvtC80YMg0YDQsNC30L7QudGC0LjRgdGMINC40Lwg0L3QtdGH0LXQvCAqLwogICAgICAgICAgKG4ub2ZmZXJzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChvZmYpIHsKICAgICAgICAgICAgaWYgKC_RgNC10YLRg9GIL2kudGVzdChvZmYubmFtZSB8fCAnJykpIHsKICAgICAgICAgICAgICBpZiAoZC5zZW8ucmV0b3VjaCkgb2ZmLnByaWNlID0gZGlnaXRzKGQuc2VvLnJldG91Y2gpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgdGllciA9IGQudGllcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICAgICAgcmV0dXJuIG9mZi5uYW1lICYmIG9mZi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih4Lm5hbWUudG9Mb3dlckNhc2UoKSkgPiAtMTsKICAgICAgICAgICAgfSlbMF07CiAgICAgICAgICAgIGlmICh0aWVyKSBvZmYucHJpY2UgPSBkaWdpdHModGllci5wcmljZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLyog0LrQtdC50YHRiyDRgdC-0L_QvtGB0YLQsNCy0LvRj9C10Lwg0L_QviDQsNC00YDQtdGB0YMg0YDQsNC30LHQvtGA0LAsINCwINC90LUg0L_QviDQv9C-0YDRj9C00LrRgyAqLwogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnQ3JlYXRpdmVXb3JrJykgewogICAgICAgICAgLyog0JjRidC10Lwg0L_QviDQsNC00YDQtdGB0YMsINC60L7RgtC-0YDRi9C5INGB0YLQvtGP0Lsg0LIg0LrQvtC00LUg0JTQniDQv9GA0LDQstC-0LosINCwINC30LDQv9C40YHRi9Cy0LDQtdC8CiAgICAgICAgICAgICDQvdC-0LLRi9C5OiDQuNC90LDRh9C1INGB0YLQvtC40YIg0L_QvtC80LXQvdGP0YLRjCDRgdGB0YvQu9C60YMg0LrQtdC50YHQsCDigJQg0Lgg0YDQsNC30LzQtdGC0LrQsCDRgtC10YDRj9C10YIKICAgICAgICAgICAgINGBINC90LjQvCDRgdCy0Y_Qt9GMLCDQv9C-0YLQvtC80YMg0YfRgtC-INC40YHQutCw0YLRjCDRg9C20LUg0L3QtdGH0LXQs9C-LiAqLwogICAgICAgICAgdmFyIGlkeCA9IC0xOwogICAgICAgICAgY2ZnLmNhc2VzLmZvckVhY2goZnVuY3Rpb24gKHgsIGspIHsgaWYgKHguaHJlZiA9PT0gbi51cmwpIGlkeCA9IGs7IH0pOwogICAgICAgICAgdmFyIGMgPSBpZHggPiAtMSA_IGQuY2FzZXNbaWR4XSA6IGQuY2FzZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmhyZWYgPT09IG4udXJsOyB9KVswXTsKICAgICAgICAgIGlmIChjKSB7CiAgICAgICAgICAgIGlmIChjLmhyZWYpIG4udXJsID0gYy5ocmVmOwogICAgICAgICAgICBpZiAoYy5zZW9OYW1lKSBuLm5hbWUgPSBjLnNlb05hbWU7CiAgICAgICAgICAgIGlmIChjLnNlb0Rlc2MpIG4uZGVzY3JpcHRpb24gPSBjLnNlb0Rlc2M7CiAgICAgICAgICAgIGlmIChuLmFib3V0ICYmIG4uYWJvdXQubmFtZSkgbi5hYm91dC5uYW1lID0gYy5uYW1lOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ0ZBUVBhZ2UnKSB7CiAgICAgICAgICBuLm1haW5FbnRpdHkgPSBkLnNlby5mYXEubWFwKGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgIHJldHVybiB7ICdAdHlwZSc6ICdRdWVzdGlvbicsIG5hbWU6IGYucSwgYWNjZXB0ZWRBbnN3ZXI6IHsgJ0B0eXBlJzogJ0Fuc3dlcicsIHRleHQ6IGYuYSB9IH07CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMiksIGVycjogbnVsbCB9OwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICAgIHJldHVybiBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdnotd2ViJyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJy5hdnotd2ViIC5tLWZyYW1lJykgPiAtMTsgfSlbMF07CiAgICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2ei13ZWIgLnJldmVhbCcpID4gLTE7IH0pWzBdOwoKICAgICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICAgIGlmICghc2NvcGUpIG1pc3NpbmcucHVzaCgn0LHQu9C-0LogLmF2ei13ZWInKTsKICAgICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgICAgLyog0YjQsNC_0LrRgyDQsdC70L7QutCwINCx0LXRgNGR0Lwg0YHRi9GA0L7QuSDQuNC3INC40YHRhdC-0LTQvdC40LrQsDog0YHRgtGA0L7QutC4IDxoZWFkPiDRgyB3Zm9saW8g0YHQstC-0LgsCiAgICAgICAgICAg0YHQvtCx0LjRgNCw0YLRjCDQuNGFINC_0L7QuNGB0LrQvtC8INC_0L4g0LTQvtC60YPQvNC10L3RgtGDINC90LXQu9GM0LfRjyAqLwogICAgICAgIHZhciBzdGFydEF0ID0gc3JjLmluZGV4T2YoJzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgIEFWQU5aQVRPIMK3INCx0LvQvtC6Jyk7CiAgICAgICAgdmFyIHN0eWxlQXQgPSBzcmMuaW5kZXhPZignPHN0eWxlPicsIHN0YXJ0QXQpOwogICAgICAgIGlmIChzdGFydEF0IDwgMCB8fCBzdHlsZUF0IDwgMCkgdGhyb3cgbmV3IEVycm9yKCfQvdC1INGD0LTQsNC70L7RgdGMINC-0L_RgNC10LTQtdC70LjRgtGMINCz0YDQsNC90LjRhtGLINCx0LvQvtC60LAnKTsKICAgICAgICB2YXIgaGVhZCA9IHNyYy5zbGljZShzdGFydEF0LCBzdHlsZUF0KS50cmltKCk7CgogICAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgICB2YXIgbGQgPSBidWlsZExkKGRvYywgc2NvcGUsIGQpOwogICAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICAgIC8qINC60L7QvNC80LXQvdGC0LDRgNC40Lkg0L_QtdGA0LXQtCDRgNCw0LfQvNC10YLQutC-0Lkg4oCUINGC0L7QttC1INC40Lcg0LjRgdGF0L7QtNC90LjQutCwICovCiAgICAgICAgdmFyIGxkQ29tbWVudCA9IChzcmMubWF0Y2goLzwhLS0gPStcbiAgICAg0KDQsNC30LzQtdGC0LrQsCDQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsltcc1xTXSo_PSsgLS0-LykgfHwgW251bGxdKVswXTsKCiAgICAgICAgdmFyIHRleHQgPSBbCiAgICAgICAgICBoZWFkLAogICAgICAgICAgJycsCiAgICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQ-JywKICAgICAgICAgIHNjcmlwdC50ZXh0Q29udGVudC50cmltKCksCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICAgJycKICAgICAgICBdLmNvbmNhdChsZENvbW1lbnQgPyBbbGRDb21tZW50XSA6IFtdKS5jb25jYXQoWwogICAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICAgIGxkLnRleHQsCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgICAgXSkuam9pbignXG4nKTsKCiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCB9OwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2enctb3V0Jyk7CiAgICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogICAgfQoKICAgIC8qINCf0LDQvdC10LvRjCDRgdCy0LXRgNGP0LXRgiDQuCDQs9C-0LLQvtGA0LjRgiDQstGB0LvRg9GFLCDQvdC-INC90LUg0L_QvtC00LzQtdC90Y_QtdGCOgogICAgICAg0YfQuNGB0LvQsCDQstC90YPRgtGA0Lgg0LbQuNCy0YvRhSDRhNGA0LDQtyDQvtC_0LDRgdC90LXQtSDQv9GA0LDQstC40YLRjCDQstGB0LvQtdC_0YPRji4gKi8KICAgIGZ1bmN0aW9uIHdhcm5pbmdzKGQpIHsKICAgICAgdmFyIHcgPSBbXTsKICAgICAgLyogdjI6INCy0L7Qv9GA0L7RgdGLINC90LAg0YHRgtGA0LDQvdC40YbQtSDQtdGB0YLRjCAo0LHQu9C-0LogLnFhKSDigJQg0L_RgNC10LTRg9C_0YDQtdC20LTQsNC10Lwg0YLQvtC70YzQutC-INC-INGA0LDRgdGF0L7QttC00LXQvdC40Lgg0YfQuNGB0LvQsCAqLwogICAgICB2YXIgb25QYWdlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmF2ei13ZWIgLnFhJykubGVuZ3RoOwogICAgICBpZiAoZC5zZW8uZmFxLmxlbmd0aCAmJiBkLnNlby5mYXEubGVuZ3RoICE9PSBvblBhZ2UpIHsKICAgICAgICB3LnB1c2goJ9CyINGA0LDQt9C80LXRgtC60LUgJyArIGQuc2VvLmZhcS5sZW5ndGggKyAnINCy0L7Qv9GA0L7RgdC-0LIsINCwINC90LAg0YHRgtGA0LDQvdC40YbQtSAnICsgb25QYWdlICsgJyDigJQgR29vZ2xlINC30LDRgdGH0LjRgtCw0LXRgiDRgtC-0LvRjNC60L4g0YHQvtCy0L_QsNC00LDRjtGJ0LjQtScpOwogICAgICB9CiAgICAgIGQuY2FzZXMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICAgIGlmICghYy5ocmVmKSB3LnB1c2goJ9GDINC60LXQudGB0LAgwqsnICsgYy5uYW1lICsgJ8K7INC90LUg0YPQutCw0LfQsNC90LAg0YHRgdGL0LvQutCwINC90LAg0YDQsNC30LHQvtGAJyk7CiAgICAgIH0pOwogICAgICB2YXIga25vd24gPSBkLnRpZXJzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4gZGlnaXRzKHgucHJpY2UpOyB9KS5maWx0ZXIoQm9vbGVhbik7CiAgICAgIGQuaW5jbC5pdGVtcy5jb25jYXQoW2QuaW5jbC5ub3RlXSkuZm9yRWFjaChmdW5jdGlvbiAodHh0LCBpKSB7CiAgICAgICAgKFN0cmluZyh0eHQpLm1hdGNoKC9cZFtcZCAgXXszLH0vZykgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG51bSkgewogICAgICAgICAgdmFyIG4gPSBkaWdpdHMobnVtKTsKICAgICAgICAgIGlmIChuLmxlbmd0aCA-PSA0ICYmIGtub3duLmluZGV4T2YobikgPCAwICYmIG4gIT09IGRpZ2l0cyhkLnNlby5yZXRvdWNoKSkgewogICAgICAgICAgICB3LnB1c2goJ9CyINGB0L7RgdGC0LDQstC1INGD0L_QvtC80Y_QvdGD0YLQsCDRgdGD0LzQvNCwICcgKyBudW0udHJpbSgpICsgJywg0LrQvtGC0L7RgNC-0Lkg0L3QtdGCINCyINGC0LDRgNC40YTQsNGFJyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gdzsKICAgIH0KCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnp3LWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGQgPSBjb2xsZWN0KCk7CiAgICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICAgIGFzc2VtYmxlKGQpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIC8qINGB0LLQtdGA0Y_QtdC8OiDQstGB0ZEg0LvQuCDQstCy0LXQtNGR0L3QvdC-0LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0L_QvtC_0LDQu9C-INCyINC60L7QtCAqLwogICAgICAgIHZhciBkb2MyID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jMi5xdWVyeVNlbGVjdG9yKCcuYXZ6LXdlYicpKTsKICAgICAgICBpZiAoYWdhaW4pIHJlYWRMZChkb2MyLCBhZ2Fpbik7CiAgICAgICAgdmFyIG5vdExhbmRlZCA9IGFnYWluID8gbGFuZGVkKGQsIGFnYWluLCAvXiQvKSA6IFsn0YHRgtGA0LDQvdC40YbQsCDQvdC1INGA0LDQt9C-0LHRgNCw0LvQsNGB0YwnXTsKICAgICAgICB2YXIgbm90ZSA9ICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuICcgKwogICAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0Log0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuJzsKICAgICAgICB2YXIgdyA9IHdhcm5pbmdzKGQpOwogICAgICAgIGlmIChub3RMYW5kZWQubGVuZ3RoKSB3LnB1c2goJ9Cd0JUg0JfQkNCf0JjQodCQ0JvQntCh0Kwg0LIg0LrQvtC0OiAnICsgbm90TGFuZGVkLnNsaWNlKDAsIDYpLmpvaW4oJywgJykgKwogICAgICAgICAgKG5vdExhbmRlZC5sZW5ndGggPiA2ID8gJyDQuCDQtdGJ0ZEgJyArIChub3RMYW5kZWQubGVuZ3RoIC0gNikgOiAnJykpOwogICAgICAgIGlmICh3Lmxlbmd0aCkgbm90ZSArPSAnINCf0YDQvtCy0LXRgNGM0YLQtTogJyArIHcuam9pbignOyAnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enctdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgICB2YXIgc25hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MucXVlcnlTZWxlY3RvcignLmF2ei13ZWInKSk7CiAgICAgICAgcmVhZExkKGRvYywgYWdhaW4pOwogICAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgICAgaWYgKGEgPT09IGIpIG1zZygn0KHRhdC-0LTQuNGC0YHRjzog0YHQsdC-0YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Log0LTQsNGR0YIg0YLQtSDQttC1INC30L3QsNGH0LXQvdC40Y8gKCcgKyByZXMudGV4dC5sZW5ndGggKyAnINGB0LjQvNCy0L7Qu9C-0LIpLicpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INCx0YvQu9C-JywgSlNPTi5wYXJzZShhKSk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0YHRgtCw0LvQvicsIEpTT04ucGFyc2UoYikpOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQn9GA0L7QstC10YDQutCwINC90LUg0L_RgNC-0YjQu9CwOiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwogIH0KCiAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2ei13ZWInKTsKICAgIGlmICghc2NvcGUpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0LHQu9C-0LrQsCAuYXZ6LXdlYicpOwogICAgY2ZnID0gcmVhZENmZyhzY29wZSk7CiAgICByZWFkTGQoZG9jLCBjZmcpOwogICAgc3RhcnQoKTsKICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgcm9vdC5pbm5lckhUTUwgPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnp3LXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnp3LWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0YDQsNC30YDQsNCx0L7RgtC60Lgg0YHQsNC50YLQvtCyPC9oMj48L2Rpdj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enctYm9keSI-PHAgY2xhc3M9ImF2enctaGludCI-0J3QtSDRg9C00LDQu9C-0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys6ICcgKwogICAgICBlc2MoZS5tZXNzYWdlKSArICc8L3A-PC9kaXY-PC9kaXY-JzsKICB9KTsKCiAgcmV0dXJuICfQn9Cw0L3QtdC70Ywg0YDQsNC30YDQsNCx0L7RgtC60Lgg0YHQsNC50YLQvtCyINC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJibG9nIix0aXRsZToi0J_QsNC90LXQu9GMINCx0LvQvtCz0LAiLHNob3J0OiLQkdC70L7QsyIsaGludDoi0YDQsNC30LTQtdC70YssINGC0LXQutGB0YLRiywg0YTQvtGC0L7Qs9GA0LDRhNC40LgsINGA0LDQt9C80LXRgtC60LAiLHBhZ2VzOlsiL2Jsb2ciXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0JHQm9Ce0JPQkCAgdjEg4oCUINCz0LXQvdC10YDQsNGC0L7RgCDQutC-0LTQsAogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgL2Jsb2cKCiAgINCn0LjRgtCw0LXRgiDQmNCh0KXQntCU0J3Qq9CZINC60L7QtCDRgdGC0YDQsNC90LjRhtGLLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLCiAgINC4INCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvC4KCiAgINCh0YLRgNCw0L3QuNGG0LAg0L_RgNC-0YHRgtCw0Y86INGI0LDQv9C60LAg0Lgg0LTQstC1INC60LDRgNGC0L7Rh9C60Lgt0YDQsNC30LTQtdC70LAuINCd0L4g0YHQstGP0LfQtdC5CiAgINGBINGA0LDQt9C80LXRgtC60L7QuSDQtNCy0LUsINC4INC-0LHQtSDQu9C10LPQutC-INGA0LDQt9GK0LXQt9C20LDRjtGC0YHRjzoKCiAgICAgwrcg0LDQtNGA0LXRgSDQutCw0YDRgtC-0YfQutC4IOKGkiDQsNC00YDQtdGBINGA0LDQt9C00LXQu9CwINCyIEl0ZW1MaXN0LiDQmNGJ0LXQvCDRg9C30LXQuwogICAgICAg0L_QviDQsNC00YDQtdGB0YMsINC60L7RgtC-0YDRi9C5INGB0YLQvtGP0Lsg0LIg0LrQvtC00LUg0JTQniDQv9GA0LDQstC-0LosINCwINC30LDQv9C40YHRi9Cy0LDQtdC8CiAgICAgICDQvdC-0LLRi9C5OiDQuNC90LDRh9C1INGB0YLQvtC40YIg0L_QvtC80LXQvdGP0YLRjCDRgdGB0YvQu9C60YMg4oCUINC4INGB0LLRj9C30Ywg0L_QvtGC0LXRgNGP0L3QsDsKICAgICDCtyDQvtC_0LjRgdCw0L3QuNC1INC60LDRgNGC0L7Rh9C60Lgg4oaSINC-0L_QuNGB0LDQvdC40LUg0YDQsNC30LTQtdC70LAg0LIg0YDQsNC30LzQtdGC0LrQtSwg0LTQvtGB0LvQvtCy0L3Qvi4KCiAgINCd0LDQt9Cy0LDQvdC40LUg0YDQsNC30LTQtdC70LAg0LIg0YDQsNC30LzQtdGC0LrQtSDQv9GA0LDQstC40YLRgdGPINC-0YLQtNC10LvRjNC90YvQvCDQv9C-0LvQtdC8LgogICDQl9Cw0LPQvtC70L7QstC-0Log0LrQsNGA0YLQvtGH0LrQuCDQvdCw0LHRgNCw0L0g0YEg0L_QtdGA0LXQvdC-0YHQvtC8ICjCq9CQ0L3QvtC90YHRizxicj7RgdGK0ZHQvNC-0LrCuyksCiAgINC4INCy0YvRgtCw0YnQuNGC0Ywg0LjQtyDQvdC10LPQviDQuNC80Y8g0L_RgNC-0YHRgtGL0Lwg0YLQtdC60YHRgtC-0Lwg0L3QtdC70YzQt9GPOiDRgdC70L7QstCwINGB0LvQuNC_0L3Rg9GC0YHRjy4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCihmdW5jdGlvbiAoKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICAvKiAtLS0tLS0tLS0tINC_0YDQvtCy0LXRgNC60LAgwqvQtNC-0LvQtdGC0LXQu9C-INC70LjCuyAtLS0tLS0tLS0tCiAgICAg0J_QsNC90LXQu9GMINC_0LjRiNC10YIg0LfQvdCw0YfQtdC90LjRjyDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQtdC3INGB0LXQu9C10LrRgtC-0YDRiy4g0JXRgdC70Lgg0YHQtdC70LXQutGC0L7RgAogICAgINC90LUg0L3QsNGI0ZHQu9GB0Y8g0LjQu9C4INC_0L7QtNGB0YLQsNC90L7QstC60LAg0L3QtSDRgdC-0LLQv9Cw0LvQsCDigJQg0LfQsNC_0LjRgdGMINC80L7Qu9GH0LAg0L3QtSDQv9GA0L7QuNGB0YXQvtC00LjRgi4KICAgICDQmNC80LXQvdC90L4g0YLQsNC6INGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC30LDRgdGC0YDRj9C70L4g0L3QsCAxMjU6INC_0LDQvdC10LvRjCDQv9C-0YHRh9C40YLQsNC70LAgMTI3LAogICAgINC30LDQv9C40YHQsNGC0Ywg0L3QtSDRgdC80L7Qs9C70LAsINCwINC_0YDQvtCy0LXRgNC60LAgwqvRgdCx0L7RgNC60LAg0YHQvtCy0L_QsNC00LDQtdGCINGBINC40YHRhdC-0LTQvdC40LrQvtC8wrsKICAgICDRgdGA0LDQstC90LjQstCw0LvQsCDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3QvtC1INGBINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdGL0LwuCgogICAgINCf0L7RjdGC0L7QvNGDINC_0L7RgdC70LUg0YHQsdC-0YDQutC4INGH0LjRgtCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0J7QkdCg0JDQotCd0J4g0Lgg0YHQstC10YDRj9C10Lwg0YEg0YLQtdC8LCDRh9GC0L4KICAgICDQstCy0ZHQuyDRh9C10LvQvtCy0LXQui4g0J3QtdGB0L7QstC_0LDQstGI0LjQtSDQv9C-0LvRjyDQv9Cw0L3QtdC70Ywg0L3QsNC30YvQstCw0LXRgiDQstGB0LvRg9GFLiAqLwogIGZ1bmN0aW9uIGxhbmRlZChleHBlY3RlZCwgYWN0dWFsLCBza2lwLCBwYXRoLCBvdXQpIHsKICAgIHBhdGggPSBwYXRoIHx8ICcnOyBvdXQgPSBvdXQgfHwgW107CiAgICBpZiAoZXhwZWN0ZWQgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0JyAmJiBhY3R1YWwgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHsKICAgICAgT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgICBsYW5kZWQoZXhwZWN0ZWRba10sIGFjdHVhbFtrXSwgc2tpcCwgcGF0aCA_IHBhdGggKyAnLicgKyBrIDogaywgb3V0KTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKFN0cmluZyhleHBlY3RlZCA9PSBudWxsID8gJycgOiBleHBlY3RlZCkgIT09IFN0cmluZyhhY3R1YWwgPT0gbnVsbCA_ICcnIDogYWN0dWFsKSkgewogICAgICBpZiAoIXNraXAgfHwgIXNraXAudGVzdChwYXRoKSkgb3V0LnB1c2gocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0Lkg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlAogICAgINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40Log0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuAogICAgINCy0LXRgNC40YLRjC4g0J_QsNC90LXQu9GMINC_0YDQuNCy0L7QtNC40YIg0Y3RgtC4INGD0LfQu9GLINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMzAg0L7QutGC0Y_QsdGA0Y8gMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5LTAxLTAxIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICIxNDkwMC01NDkwMCIsCiAgICAgICJvcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICJkYXlPZldlZWsiOiBbCiAgICAgICAgICAgICJNb25kYXkiLAogICAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgICAiVGh1cnNkYXkiLAogICAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICAgIlN1bmRheSIKICAgICAgICAgIF0sCiAgICAgICAgICAib3BlbnMiOiAiMTA6MDAiLAogICAgICAgICAgImNsb3NlcyI6ICIyMDowMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2emItcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIE1BWFcgPSAxMjQwOwoKICBmdW5jdGlvbiBvbmUoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWwpOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9IH0KICBmdW5jdGlvbiBhbGwoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gW10uc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkpOyB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfSB9CiAgZnVuY3Rpb24gdChlbCkgeyByZXR1cm4gZWwgPyBlbC50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGh0bWwoZWwpIHsgcmV0dXJuIGVsID8gZWwuaW5uZXJIVE1MLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gb3duVGV4dChlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuICcnOwogICAgdmFyIHMgPSAnJzsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgcyArPSBlbC5jaGlsZE5vZGVzW2ldLm5vZGVWYWx1ZTsKICAgIH0KICAgIHJldHVybiBzLnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKTsKICB9CiAgZnVuY3Rpb24gYXR0cihlbCwgYSkgeyByZXR1cm4gZWwgPyAoZWwuZ2V0QXR0cmlidXRlKGEpIHx8ICcnKSA6ICcnOyB9CgogIC8qIC0tLS0tLS0tLS0g0YfRgtC10L3QuNC1IC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gcmVhZENmZyhzY29wZSkgewogICAgdmFyIGlubmVycyA9IGFsbChzY29wZSwgJy5kaXNwbGF5IC5pbm5lcicpOwogICAgdmFyIGxhYmVsID0gb25lKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwnKTsKCiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllYnJvdzogb3duVGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpKSwKICAgICAgICBsaW5lMTogdChpbm5lcnNbMF0pLAogICAgICAgIGxpbmUyOiBpbm5lcnNbMV0gPyB0KG9uZShpbm5lcnNbMV0sICdlbScpIHx8IGlubmVyc1sxXSkgOiAnJywKICAgICAgICBsZWRlOiB0KG9uZShzY29wZSwgJy5sZWRlJykpCiAgICAgIH0sCiAgICAgIGxhYmVsOiB7CiAgICAgICAgaDI6IHQob25lKGxhYmVsLCAnaDInKSksCiAgICAgICAgYXNpZGU6IHQob25lKGxhYmVsLCAnLnNsLWFzaWRlJykpCiAgICAgIH0sCiAgICAgIGNhcmRzOiBhbGwoc2NvcGUsICcuaHViLWNhcmQnKS5tYXAoZnVuY3Rpb24gKGEpIHsKICAgICAgICB2YXIgaW0gPSBvbmUoYSwgJy5odWItcGhvdG8nKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgaHJlZjogYXR0cihhLCAnaHJlZicpLAogICAgICAgICAgZ2hvc3Q6IHQob25lKGEsICcuaHViLWdob3N0JykpLAogICAgICAgICAgbnVtOiB0KG9uZShhLCAnLmh1Yi1udW0nKSksCiAgICAgICAgICBoMzogaHRtbChvbmUoYSwgJ2gzJykpLAogICAgICAgICAgZGVzYzogdChvbmUoYSwgJy5odWItZGVzYycpKSwKICAgICAgICAgIGxhYmVsOiB0KG9uZShhLCAnLmh1Yi1sYWJlbCcpKSwKICAgICAgICAgIGltZzogYXR0cihpbSwgJ3NyYycpLAogICAgICAgICAgYWx0OiBhdHRyKGltLCAnYWx0JykKICAgICAgICB9OwogICAgICB9KSwKICAgICAgZm9vdE5vdGU6IGh0bWwob25lKHNjb3BlLCAnLmZvb3Qtbm90ZScpKSwKICAgICAgc2VvOiB7IHBhZ2VOYW1lOiAnJywgcGFnZURlc2NyaXB0aW9uOiAnJyB9CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcmVhZExkKGRvYywgY2ZnKSB7CiAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgIHRyeSB7IEpTT04ucGFyc2UoeC50ZXh0Q29udGVudCk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfQogICAgfSlbMF07CiAgICBpZiAoIXMpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHZhciBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsKICAgICAgKG9bJ0BncmFwaCddIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdDb2xsZWN0aW9uUGFnZScgJiYgU3RyaW5nKG5bJ0BpZCddKS5pbmRleE9mKCcvYmxvZyNwYWdlJykgPiAtMSkgewogICAgICAgICAgY2ZnLnNlby5wYWdlTmFtZSA9IG4ubmFtZSB8fCAnJzsKICAgICAgICAgIGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKG5bJ0B0eXBlJ10gPT09ICdJdGVtTGlzdCcpIHsKICAgICAgICAgIChuLml0ZW1MaXN0RWxlbWVudCB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobGkpIHsKICAgICAgICAgICAgdmFyIGl0ID0gbGkuaXRlbSB8fCB7fTsKICAgICAgICAgICAgdmFyIGMgPSBjZmcuY2FyZHMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmhyZWYgPT09IGl0LnVybDsgfSlbMF07CiAgICAgICAgICAgIGlmIChjKSBjLnNlb05hbWUgPSBpdC5uYW1lIHx8ICcnOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsgLyog0YHQsdC-0YDQutCwINGB0L7QvtCx0YnQuNGCICovIH0KICB9CgogIC8qIC0tLS0tLS0tLS0g0L_QsNC90LXQu9GMIC0tLS0tLS0tLS0gKi8KCiAgdmFyIGNzcyA9IFsKICAgICcjYXZ6Yi1yb290LCNhdnpiLXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnpiLXJvb3QgaW5wdXQsI2F2emItcm9vdCB0ZXh0YXJlYXtiYWNrZ3JvdW5kOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7JywKICAgICdvcGFjaXR5OjEgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OjEuNCAhaW1wb3J0YW50fScsCiAgICAnI2F2emItcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1iLnB7YmFja2dyb3VuZDojMWQxZDFmICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiNmZmYgIWltcG9ydGFudH0nLAogICAgJyNhdnpiLXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2emItd2lue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjE0cHg7d2lkdGg6bWluKDk0MHB4LDEwMCUpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2×1bW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjM1KTtvdmVyZmxvdzpoaWRkZW59JywKICAgICcjYXZ6Yi1oZWFke3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnpiLWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0nLAogICAgJyNhdnpiLWJvZHl7ZmxleDoxO292ZXJmbG93OmF1dG87cGFkZGluZzo4cHggMjBweCAyNHB4fScsCiAgICAnI2F2emItZm9vdHtwYWRkaW5nOjE0cHggMjBweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6Yi1yb290IC5hdnpiLWJ7Zm9udDppbmhlcml0O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcn0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItYi5we2JvcmRlci1jb2xvcjojMWQxZDFmfScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1zZWN7Ym9yZGVyOjFweCBzb2xpZCAjZTZlNmU5O2JvcmRlci1yYWRpdXM6MTBweDttYXJnaW4tdG9wOjE0cHg7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItc2VjPnN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1zZWM-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCOCAgIjtjb2xvcjojODY4NjhifScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1zZWNbb3Blbl0-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCRSAgIn0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItaW57cGFkZGluZzoxNHB4fScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1me21hcmdpbi1ib3R0b206MTJweH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItZiBpbnB1dCwjYXZ6Yi1yb290IC5hdnpiLWYgdGV4dGFyZWF7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7cGFkZGluZzo4cHggMTBweDsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6Yi1yb290IC5hdnpiLWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0nLAogICAgJ0BtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsjYXZ6Yi1yb290IC5hdnpiLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnpiLXdpbntib3JkZXItcmFkaXVzOjB9fScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1pbWd7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9JywKICAgICcjYXZ6Yi1yb290IC5hdnpiLWltZz5pbWd7d2lkdGg6OTBweDtoZWlnaHQ6MTEycHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjZweDtiYWNrZ3JvdW5kOiNlY2VjZWM7ZmxleDpub25lfScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1pbWcgLmd7ZmxleDoxO21pbi13aWR0aDowfScsCiAgICAnI2F2emItcm9vdCAuYXZ6Yi1oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6Yi1yb290IC5hdnpiLWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNDBweCwxZnIpKTtnYXA6MTBweH0nLAogICAgJyNhdnpiLXJvb3QgLmF2emItZ3JpZCBpbWd7d2lkdGg6MTAwJTtoZWlnaHQ6MTIwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2emItb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2emItbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICB2YXIgdGFnID0gdHlwZSA9PT0gJ2FyZWEnCiAgICAgID8gJzx0ZXh0YXJlYSBkYXRhLXA9IicgKyBwYXRoICsgJyI–XG4nICsgZXNjKHZhbCkgKyAnPC90ZXh0YXJlYT4nCiAgICAgIDogJzxpbnB1dCBkYXRhLXA9IicgKyBwYXRoICsgJyIgdmFsdWU9IicgKyBlc2ModmFsKSArICciPic7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImF2emItZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnpiLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emItbXNnJyk7IGlmIChlKSBlLnRleHRDb250ZW50ID0gczsgfQoKICB2YXIgY2ZnID0gbnVsbDsKCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzdGFydCgpIHsKICAgIHZhciBoID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6Yi13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6Yi1oZWFkIj48aDI-0J_QsNC90LXQu9GMINCx0LvQvtCz0LA8L2gyPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6Yi1iIiBpZD0iYXZ6Yi1jbG9zZSI-0JfQsNC60YDRi9GC0Yw8L2J1dHRvbj48L2Rpdj48ZGl2IGlkPSJhdnpiLWJvZHkiPicgKwogICAgICAnPHAgY2xhc3M9ImF2emItaGludCI-0JDQtNGA0LXRgSDQuCDQvtC_0LjRgdCw0L3QuNC1INGA0LDQt9C00LXQu9CwINGD0YXQvtC00Y_RgiDQuCDQvdCwINC60LDRgNGC0L7Rh9C60YMsINC4INCyINGA0LDQt9C80LXRgtC60YMgJyArCiAgICAgICfQtNC70Y8g0L_QvtC40YHQutC-0LLQuNC60L7Qsi4g0J3QsNC30LLQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1INC_0YDQsNCy0LjRgtGB0Y8g0L7RgtC00LXQu9GM0L3Qvjog0LIg0LfQsNCz0L7Qu9C-0LLQutC1INC60LDRgNGC0L7Rh9C60Lgg0YHRgtC-0LjRgiAnICsKICAgICAgJ9C_0LXRgNC10L3QvtGBINGB0YLRgNC-0LrQuCwg0Lgg0LLRi9GC0LDRidC40YLRjCDQuNC80Y8g0L7RgtGC0YPQtNCwINCx0LXQtyDRgdC60LvQtdC50LrQuCDRgdC70L7QsiDQvdC10LvRjNC30Y8uPC9wPic7CgogICAgLyog0KDQkNCX0JTQldCb0KsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnpiLXNlYyIgb3Blbj48c3VtbWFyeT7QoNCw0LfQtNC10LvRiyAoJyArIGNmZy5jYXJkcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnpiLWluIj4nOwogICAgY2ZnLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6Yi1jYXJkIj48aDQ-0KDQsNC30LTQtdC7ICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2NhcmRzLicgKyBpICsgJy5oMycsIGMuaDMpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtScsICdjYXJkcy4nICsgaSArICcuZGVzYycsIGMuZGVzYywgJ2FyZWEnKSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEg0YDQsNC30LTQtdC70LAnLCAnY2FyZHMuJyArIGkgKyAnLmhyZWYnLCBjLmhyZWYpICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6Yi1yb3ciPicgKyBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0LLQvdC40LfRgyDQutCw0YDRgtC-0YfQutC4JywgJ2NhcmRzLicgKyBpICsgJy5sYWJlbCcsIGMubGFiZWwpICsKICAgICAgICBmaWVsZCgn0J3QvtC80LXRgCAo0L3QsNC_0YDQuNC80LXRgCDCqzAxIOKAlCDQoNCw0LfQtNC10LvCuyknLCAnY2FyZHMuJyArIGkgKyAnLm51bScsIGMubnVtKSArICc8L2Rpdj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6Yi1yb3ciPicgKyBmaWVsZCgn0JrRgNGD0L_QvdGL0Lkg0L3QvtC80LXRgCDQvdCwINGE0L7QvdC1JywgJ2NhcmRzLicgKyBpICsgJy5naG9zdCcsIGMuZ2hvc3QpICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDQsiDRgNCw0LfQvNC10YLQutC1JywgJ2NhcmRzLicgKyBpICsgJy5zZW9OYW1lJywgYy5zZW9OYW1lIHx8ICcnKSArICc8L2Rpdj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6Yi1pbWciPjxpbWcgZGF0YS1wcmV2PSJjYXJkcy4nICsgaSArICcuaW1nIiBzcmM9IicgKyBlc2MoYy5pbWcpICsgJyIgYWx0PSIiPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsgZmllbGQoJ9Ck0L7RgtC-0LPRgNCw0YTQuNGPJywgJ2NhcmRzLicgKyBpICsgJy5pbWcnLCBjLmltZykgKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpiLWIiIGRhdGEtY2hvb3NlPSJjYXJkcy4nICsgaSArICcuaW1nIiBzdHlsZT0icGFkZGluZzo0cHggOXB4O2ZvbnQtc2l6ZToxMnB4O21hcmdpbi1ib3R0b206MTJweCI-0JLRi9Cx0YDQsNGC0Ywg0YHQviDRgdGC0YDQsNC90LjRhtGLINGA0LDQt9C00LXQu9CwPC9idXR0b24-JyArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0YTQvtGC0L7Qs9GA0LDRhNC40LggKGFsdCknLCAnY2FyZHMuJyArIGkgKyAnLmFsdCcsIGMuYWx0KSArICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQqNCQ0J_QmtCQICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6Yi1zZWMiPjxzdW1tYXJ5PtCo0LDQv9C60LAg0Lgg0YLQtdC60YHRgtGLPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emItaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uZXllYnJvdycsIGNmZy5oZXJvLmV5ZWJyb3cpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emItcm93Ij4nICsgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDigJQg0YHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMiAo0LrRg9GA0YHQuNCyKScsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0JLRgdGC0YPQv9C40YLQtdC70YzQvdGL0Lkg0YLQtdC60YHRgicsICdoZXJvLmxlZGUnLCBjZmcuaGVyby5sZWRlLCAnYXJlYScpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emItcm93Ij4nICsgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2xhYmVsLmgyJywgY2ZnLmxhYmVsLmgyKSArCiAgICAgIGZpZWxkKCfQn9C-0LzQtdGC0LrQsCDRgdC_0YDQsNCy0LAnLCAnbGFiZWwuYXNpZGUnLCBjZmcubGFiZWwuYXNpZGUpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHQvdC-0YHQutCwINCy0L3QuNC30YMgKNC80L7QttC90L4gSFRNTCknLCAnZm9vdE5vdGUnLCBjZmcuZm9vdE5vdGUsICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0KDQkNCX0JzQldCi0JrQkCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emItc2VjIj48c3VtbWFyeT7QoNCw0LfQvNC10YLQutCwINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emItaW4iPicgKwogICAgICAnPHAgY2xhc3M9ImF2emItaGludCI-0K3RgtC-INC90LXQstC40LTQuNC80LDRjyDRh9Cw0YHRgtGMINGB0YLRgNCw0L3QuNGG0YsuINCe0L_QuNGB0LDQvdC40Y8g0YDQsNC30LTQtdC70L7QsiDQsdC10YDRg9GC0YHRjyDRgSDQutCw0YDRgtC-0YfQtdC6ICcgKwogICAgICAn0YHQsNC80Lgg4oCUINC30LTQtdGB0Ywg0YLQvtC70YzQutC-INC90LDQt9Cy0LDQvdC40LUg0Lgg0L7Qv9C40YHQsNC90LjQtSDQstGB0LXQuSDRgdGC0YDQsNC90LjRhtGLLjwvcD4nICsKICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0YHRgtGA0LDQvdC40YbRiycsICdzZW8ucGFnZU5hbWUnLCBjZmcuc2VvLnBhZ2VOYW1lKSArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCAnc2VvLnBhZ2VEZXNjcmlwdGlvbicsIGNmZy5zZW8ucGFnZURlc2NyaXB0aW9uLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2emItZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpiLWIgcCIgaWQ9ImF2emItYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnpiLWIiIGlkPSJhdnpiLXRlc3QiPtCf0YDQvtCy0LXRgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QujwvYnV0dG9uPicgKwogICAgICAnPHNwYW4gaWQ9ImF2emItbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxOHB4Ij48dGV4dGFyZWEgaWQ9ImF2emItb3V0IiBzcGVsbGNoZWNrPSJmYWxzZSIgJyArCiAgICAgICdwbGFjZWhvbGRlcj0i0JfQtNC10YHRjCDQv9C-0Y_QstC40YLRgdGPINC60L7QtCDRgdGC0YDQsNC90LjRhtGLIj48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6Yi1jbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJvb3QucmVtb3ZlKCk7IH07CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOwogICAgfSk7CgogICAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINGE0L7RgtC-0LPRgNCw0YTQuNC4INGB0L4g0YHRgtGA0LDQvdC40YbRiyDRgNCw0LfQtNC10LvQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYWJzKHUpIHsKICAgICAgaWYgKCF1KSByZXR1cm4gJyc7CiAgICAgIGlmICh1LmluZGV4T2YoJy8vJykgPT09IDApIHJldHVybiAnaHR0cHM6JyArIHU7CiAgICAgIGlmICh1LmluZGV4T2YoJy8nKSA9PT0gMCkgcmV0dXJuIGxvY2F0aW9uLm9yaWdpbiArIHU7CiAgICAgIHJldHVybiB1OwogICAgfQogICAgZnVuY3Rpb24gZnJvbVNyY3NldChzZXQsIHNyYykgewogICAgICBpZiAoIXNldCkgeyB2YXIgdSA9IGFicyhzcmMpOyByZXR1cm4geyBmdWxsOiB1LCBzbWFsbDogdSB9OyB9CiAgICAgIHZhciBsaXN0ID0gc2V0LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgdmFyIHAgPSB4LnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgICAgcmV0dXJuIHsgdTogYWJzKHBbMF0pLCB3OiBwYXJzZUludChwWzFdLCAxMCkgfHwgMCB9OwogICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudTsgfSk7CiAgICAgIGlmICghbGlzdC5sZW5ndGgpIHsgdmFyIHYgPSBhYnMoc3JjKTsgcmV0dXJuIHsgZnVsbDogdiwgc21hbGw6IHYgfTsgfQogICAgICB2YXIgYmlnID0gbGlzdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudyAtIGEudzsgfSk7CiAgICAgIHZhciBzbWFsbCA9IGxpc3Quc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLncgLSBiLnc7IH0pOwogICAgICByZXR1cm4gewogICAgICAgIGZ1bGw6IChiaWcuZmlsdGVyKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLncgPD0gTUFYVzsgfSlbMF0gfHwgYmlnW2JpZy5sZW5ndGggLSAxXSkudSwKICAgICAgICBzbWFsbDogKHNtYWxsLmZpbHRlcihmdW5jdGlvbiAocCkgeyByZXR1cm4gcC53ID49IDI4MDsgfSlbMF0gfHwgc21hbGxbMF0pLnUKICAgICAgfTsKICAgIH0KCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWNob29zZScpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAvKiDQsNC00YDQtdGBINCx0LXRgNGR0Lwg0LjQtyDQv9C-0LvRjyDRgdGB0YvQu9C60Lg6INC10YHQu9C4INGA0LDQt9C00LXQuyDRgtC-0LvRjNC60L4g0YfRgtC-INC_0LXRgNC10L3QsNC_0YDQsNCy0LjQu9C4LAogICAgICAgICDQutCw0LTRgNGLINC90YPQttC90Ysg0YPQttC1INGBINC90L7QstC-0Lkg0YHRgtGA0LDQvdC40YbRiyAqLwogICAgICB2YXIgaWR4ID0gcC5zcGxpdCgnLicpWzFdOwogICAgICB2YXIgaHJlZklucHV0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtkYXRhLXA9ImNhcmRzLicgKyBpZHggKyAnLmhyZWYiXScpOwogICAgICB2YXIgdXJsID0gaHJlZklucHV0ID8gaHJlZklucHV0LnZhbHVlLnRyaW0oKSA6ICcnOwogICAgICBpZiAoIXVybCkgeyBtc2coJ9CjINGA0LDQt9C00LXQu9CwINC90LUg0YPQutCw0LfQsNC9INCw0LTRgNC10YEg4oCUINCy0YvQsdC40YDQsNGC0Ywg0L3QtSDQuNC3INGH0LXQs9C-LicpOyByZXR1cm47IH0KCiAgICAgIHZhciBwYW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIHBhbmUuc3R5bGUuY3NzVGV4dCA9ICdwb3NpdGlvbjpmaXhlZDtpbnNldDo4JTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxMnB4O3otaW5kZXg6MjE0NzQ4MzY0NzsnICsKICAgICAgICAncGFkZGluZzoxNnB4O292ZXJmbG93OmF1dG87Ym94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC40KSc7CiAgICAgIHBhbmUuaW5uZXJIVE1MID0gJzxwIHN0eWxlPSJtYXJnaW46MCAwIDEwcHgiPtCX0LDQs9GA0YPQttCw0Y4g0YHQvdC40LzQutC4INGB0L4g0YHRgtGA0LDQvdC40YbRiyAnICsgZXNjKHVybCkgKyAn4oCmPC9wPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnpiLWdyaWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPjwvZGl2Pic7CiAgICAgIHZhciBjYW5jZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgICAgY2FuY2VsLmNsYXNzTmFtZSA9ICdhdnpiLWInOyBjYW5jZWwudGV4dENvbnRlbnQgPSAn0J7RgtC80LXQvdCwJzsKICAgICAgY2FuY2VsLnN0eWxlLm1hcmdpblRvcCA9ICcxMnB4JzsKICAgICAgY2FuY2VsLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHBhbmUucmVtb3ZlKCk7IH07CiAgICAgIHBhbmUuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICAgICAgcm9vdC5hcHBlbmRDaGlsZChwYW5lKTsKCiAgICAgIGZldGNoKHVybCArICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgJ3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICAgIHZhciBzZWVuID0ge30sIG91dCA9IFtdOwogICAgICAgICAgYWxsKGRvYywgJ2ltZycpLmZvckVhY2goZnVuY3Rpb24gKGltKSB7CiAgICAgICAgICAgIHZhciBzZXQgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCAnJzsKICAgICAgICAgICAgdmFyIHMgPSBpbS5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8IGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSB8fCAnJzsKICAgICAgICAgICAgaWYgKHNldC5pbmRleE9mKCdpLndmb2xpby5ydScpIDwgMCAmJiBzLmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwKSByZXR1cm47CiAgICAgICAgICAgIHZhciBwYWlyID0gZnJvbVNyY3NldChzZXQsIHMpOwogICAgICAgICAgICBpZiAoIXBhaXIuZnVsbCB8fCBzZWVuW3BhaXIuZnVsbF0pIHJldHVybjsKICAgICAgICAgICAgc2VlbltwYWlyLmZ1bGxdID0gMTsgb3V0LnB1c2gocGFpcik7CiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBoZWFkID0gcGFuZS5xdWVyeVNlbGVjdG9yKCdwJyk7CiAgICAgICAgICB2YXIgZ3JpZCA9IHBhbmUucXVlcnlTZWxlY3RvcignLmF2emItZ3JpZCcpOwogICAgICAgICAgaWYgKCFvdXQubGVuZ3RoKSB7IGhlYWQudGV4dENvbnRlbnQgPSAn0J3QsCDRgdGC0YDQsNC90LjRhtC1ICcgKyB1cmwgKyAnINGB0L3QuNC80LrQvtCyINC90LUg0L3QsNGI0LvQvtGB0YwuJzsgcmV0dXJuOyB9CiAgICAgICAgICBoZWFkLnRleHRDb250ZW50ID0gJ9CS0YvQsdC10YDQuNGC0LUg0YHQvdC40LzQvtC6ICgnICsgb3V0Lmxlbmd0aCArICcpJzsKICAgICAgICAgIGdyaWQuc3R5bGUuZGlzcGxheSA9ICdncmlkJzsKICAgICAgICAgIG91dC5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgICB2YXIgaW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICAgICAgICAgICAgaW0uc3JjID0gaXQuc21hbGw7IGltLmxvYWRpbmcgPSAnbGF6eSc7CiAgICAgICAgICAgIGltLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGlucCA9IHJvb3QucXVlcnlTZWxlY3RvcignaW5wdXRbZGF0YS1wPSInICsgcCArICciXScpOwogICAgICAgICAgICAgIGlmIChpbnApIGlucC52YWx1ZSA9IGl0LmZ1bGw7CiAgICAgICAgICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgICAgICAgICAgaWYgKHByZXYpIHByZXYuc3JjID0gaXQuZnVsbDsKICAgICAgICAgICAgICBwYW5lLnJlbW92ZSgpOwogICAgICAgICAgICB9OwogICAgICAgICAgICBncmlkLmFwcGVuZENoaWxkKGltKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgIHBhbmUucXVlcnlTZWxlY3RvcigncCcpLnRleHRDb250ZW50ID0gJ9Ch0YLRgNCw0L3QuNGG0LAg0L3QtSDQvtGC0LrRgNGL0LvQsNGB0Yw6ICcgKyBlcnIubWVzc2FnZTsKICAgICAgICB9KTsKICAgIH0pOwoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqLCBpOwogICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twYXJ0c1tpXV07CiAgICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQogICAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgICAgdmFyIGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgc2V0UGF0aChkLCBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpLCBlbC52YWx1ZSk7IH0pOwogICAgICByZXR1cm4gZDsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgcmV0dXJuOwogICAgICB2YXIgdGV4dHMgPSBbXSwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoZWwuY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykgdGV4dHMucHVzaChlbC5jaGlsZE5vZGVzW2ldKTsKICAgICAgfQogICAgICBpZiAoIXRleHRzLmxlbmd0aCkgeyBlbC5hcHBlbmRDaGlsZChlbC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHYpKTsgcmV0dXJuOyB9CiAgICAgIHZhciBtYWluID0gbnVsbDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7IG1haW4gPSB0ZXh0c1tpXTsgYnJlYWs7IH0KICAgICAgfQogICAgICBpZiAoIW1haW4pIG1haW4gPSB0ZXh0c1swXTsKICAgICAgdmFyIHJhdyA9IG1haW4ubm9kZVZhbHVlOwogICAgICB2YXIgcHJlID0gKHJhdy5tYXRjaCgvXlxzKi8pIHx8IFsnJ10pWzBdOwogICAgICB2YXIgcG9zdCA9IChyYXcubWF0Y2goL1xzKiQvKSB8fCBbJyddKVswXTsKICAgICAgaWYgKHJhdy50cmltKCkgPT09ICcnKSB7IHByZSA9ICcnOyBwb3N0ID0gJyc7IH0KICAgICAgbWFpbi5ub2RlVmFsdWUgPSBwcmUgKyB2ICsgcG9zdDsKICAgICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRleHRzW2ldICE9PSBtYWluICYmIHRleHRzW2ldLm5vZGVWYWx1ZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgICB0ZXh0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHRzW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldEh0bWwoZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwuaW5uZXJIVE1MID0gdjsgfQoKICAgIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICAgIHZhciBpbm5lcnMgPSBhbGwoc2NvcGUsICcuZGlzcGxheSAuaW5uZXInKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuZXllYnJvdycpLCBkLmhlcm8uZXllYnJvdyk7CiAgICAgIGlmIChpbm5lcnNbMF0pIHNldFRleHQoaW5uZXJzWzBdLCBkLmhlcm8ubGluZTEpOwogICAgICBpZiAoaW5uZXJzWzFdKSBzZXRUZXh0KG9uZShpbm5lcnNbMV0sICdlbScpIHx8IGlubmVyc1sxXSwgZC5oZXJvLmxpbmUyKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcubGVkZScpLCBkLmhlcm8ubGVkZSk7CgogICAgICB2YXIgbGFiZWwgPSBvbmUoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCcpOwogICAgICBzZXRUZXh0KG9uZShsYWJlbCwgJ2gyJyksIGQubGFiZWwuaDIpOwogICAgICBzZXRUZXh0KG9uZShsYWJlbCwgJy5zbC1hc2lkZScpLCBkLmxhYmVsLmFzaWRlKTsKCiAgICAgIGFsbChzY29wZSwgJy5odWItY2FyZCcpLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuY2FyZHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgICBzZXRIdG1sKG9uZShhLCAnaDMnKSwgdi5oMyk7CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5odWItZGVzYycpLCB2LmRlc2MpOwogICAgICAgIHNldFRleHQob25lKGEsICcuaHViLWdob3N0JyksIHYuZ2hvc3QpOwogICAgICAgIHNldFRleHQob25lKGEsICcuaHViLW51bScpLCB2Lm51bSk7CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5odWItbGFiZWwnKSwgdi5sYWJlbCk7CiAgICAgICAgdmFyIGltID0gb25lKGEsICcuaHViLXBob3RvJyk7CiAgICAgICAgaWYgKGltKSB7IGltLnNldEF0dHJpYnV0ZSgnc3JjJywgdi5pbWcpOyBpbS5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHYuYWx0KTsgfQogICAgICB9KTsKCiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmZvb3Qtbm90ZScpLCBkLmZvb3ROb3RlKTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGJ1aWxkTGQoZG9jLCBzY29wZSwgZCkgewogICAgICB2YXIgcyA9IGFsbChkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgdHJ5IHsgSlNPTi5wYXJzZSh4LnRleHRDb250ZW50KTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIH0pWzBdOwogICAgICBpZiAoIXMpIHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINGA0LDQt9C80LXRgtC60LgnIH07CiAgICAgIHZhciBvOwogICAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgICBjYXRjaCAoZSkgeyByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfRgNCw0LfQvNC10YLQutCwINC90LUg0YfQuNGC0LDQtdGC0YHRjzogJyArIGUubWVzc2FnZSB9OyB9CgogICAgICBzeW5jQ2Fub24ob1snQGdyYXBoJ10gfHwgW10pOwogICAgICAob1snQGdyYXBoJ10gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ0NvbGxlY3Rpb25QYWdlJyAmJiBTdHJpbmcoblsnQGlkJ10pLmluZGV4T2YoJy9ibG9nI3BhZ2UnKSA-IC0xKSB7CiAgICAgICAgICBuLm5hbWUgPSBkLnNlby5wYWdlTmFtZTsKICAgICAgICAgIG4uZGVzY3JpcHRpb24gPSBkLnNlby5wYWdlRGVzY3JpcHRpb247CiAgICAgICAgICBuLmRhdGVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgICAgfQogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnSXRlbUxpc3QnKSB7CiAgICAgICAgICBuLm51bWJlck9mSXRlbXMgPSBkLmNhcmRzLmxlbmd0aDsKICAgICAgICAgIChuLml0ZW1MaXN0RWxlbWVudCB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobGksIGspIHsKICAgICAgICAgICAgdmFyIGl0ID0gbGkuaXRlbTsgaWYgKCFpdCkgcmV0dXJuOwogICAgICAgICAgICAvKiDQuNGJ0LXQvCDQv9C-INC_0YDQtdC20L3QtdC80YMg0LDQtNGA0LXRgdGDLCDQt9Cw0L_QuNGB0YvQstCw0LXQvCDQvdC-0LLRi9C5IOKAlCDQuNC90LDRh9C1INGB0LzQtdC90LAKICAgICAgICAgICAgICAg0YHRgdGL0LvQutC4INGA0LLRkdGCINGB0LLRj9C30Ywg0LrQsNGA0YLQvtGH0LrQuCDRgSDQtdGRINC-0L_QuNGB0LDQvdC40LXQvCDQsiDRgNCw0LfQvNC10YLQutC1ICovCiAgICAgICAgICAgIHZhciBpZHggPSAtMTsKICAgICAgICAgICAgY2ZnLmNhcmRzLmZvckVhY2goZnVuY3Rpb24gKHgsIG0pIHsgaWYgKHguaHJlZiA9PT0gaXQudXJsKSBpZHggPSBtOyB9KTsKICAgICAgICAgICAgdmFyIGMgPSBpZHggPiAtMSA_IGQuY2FyZHNbaWR4XSA6IGQuY2FyZHNba107CiAgICAgICAgICAgIGlmICghYykgcmV0dXJuOwogICAgICAgICAgICBpdC51cmwgPSBjLmhyZWY7CiAgICAgICAgICAgIGlmIChjLnNlb05hbWUpIGl0Lm5hbWUgPSBjLnNlb05hbWU7CiAgICAgICAgICAgIGl0LmRlc2NyaXB0aW9uID0gYy5kZXNjOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwgfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcjYXZ6Jyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnRleHRDb250ZW50LmluZGV4T2YoJyNhdnogLmh1Yi1jYXJkJykgPiAtMTsgfSlbMF07CiAgICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignI2F2eiAuaHViLWdyaWQnKSA-IC0xOyB9KVswXTsKCiAgICAgICAgdmFyIG1pc3NpbmcgPSBbXTsKICAgICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6ICNhdnonKTsKICAgICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJzxzdHlsZT4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJzxzY3JpcHQ-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgICAgLyog0YjQsNC_0LrRgyDQsdC70L7QutCwINCx0LXRgNGR0Lwg0YHRi9GA0L7QuSDQuNC3INC40YHRhdC-0LTQvdC40LrQsDog0YHRgtGA0L7QutC4IDxoZWFkPiDRgyB3Zm9saW8g0YHQstC-0LgsCiAgICAgICAgICAg0YHQvtCx0LjRgNCw0YLRjCDQuNGFINC_0L7QuNGB0LrQvtC8INC_0L4g0LTQvtC60YPQvNC10L3RgtGDINC90LXQu9GM0LfRjyAqLwogICAgICAgIHZhciBzdGFydEF0ID0gc3JjLmluZGV4T2YoJzwhLS1cbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIEFWQU5aQVRPLlJVIOKAlCAvYmxvZycpOwogICAgICAgIHZhciBzdHlsZUF0ID0gc3JjLmluZGV4T2YoJzxzdHlsZT4nLCBzdGFydEF0KTsKICAgICAgICBpZiAoc3RhcnRBdCA8IDAgfHwgc3R5bGVBdCA8IDApIHRocm93IG5ldyBFcnJvcign0L3QtSDRg9C00LDQu9C-0YHRjCDQvtC_0YDQtdC00LXQu9C40YLRjCDQs9GA0LDQvdC40YbRiyDQsdC70L7QutCwJyk7CiAgICAgICAgdmFyIGhlYWQgPSBzcmMuc2xpY2Uoc3RhcnRBdCwgc3R5bGVBdCkudHJpbSgpOwoKICAgICAgICB3cml0ZUFsbChzY29wZSwgZCk7CiAgICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgICAvKiDQvNC10YLQutCwINC60L7QvdGG0LAg0LHQu9C-0LrQsCDRgdGC0L7QuNGCINCX0JAg0LfQsNC60YDRi9Cy0LDRjtGJ0LjQvCDRgtC10LPQvtC8LCDQv9C-0Y3RgtC-0LzRgwogICAgICAgICAgINCyIG91dGVySFRNTCDQvdC1INC_0L7Qv9Cw0LTQsNC10YIg4oCUINC30LDQsdC40YDQsNC10Lwg0LXRkSDQuNC3INC40YHRhdC-0LTQvdC40LrQsCAqLwogICAgICAgIHZhciBlbmRNYXJrID0gKHNyYy5tYXRjaCgvPFwvZGl2Pig8IS0tW14-XSotLT4pLykgfHwgW251bGwsICcnXSlbMV07CgogICAgICAgIHZhciB0ZXh0ID0gWwogICAgICAgICAgaGVhZCwKICAgICAgICAgICcnLAogICAgICAgICAgc3R5bGUub3V0ZXJIVE1MLAogICAgICAgICAgJycsCiAgICAgICAgICBzY29wZS5vdXRlckhUTUwgKyBlbmRNYXJrLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdD4nLAogICAgICAgICAgc2NyaXB0LnRleHRDb250ZW50LnRyaW0oKSwKICAgICAgICAgICc8JyArICcvc2NyaXB0PicsCiAgICAgICAgICAnJywKICAgICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgICBsZC50ZXh0LAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JwogICAgICAgIF0uam9pbignXG4nKTsKCiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCB9OwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5KHRleHQsIG5vdGUpIHsKICAgICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgICAg0LIg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ysg0LTQsNC20LUg0LjQtyDRgtC10YUg0LrRg9GB0LrQvtCyLCDQutC-0YLQvtGA0YvQtSDQv9Cw0L3QtdC70Ywg0LrQvtC_0LjRgNGD0LXRggogICAgICAgICDQtNC-0YHQu9C-0LLQvdC-IOKAlCDQuNC3INGB0YLQuNC70LXQuSwg0YHQutGA0LjQv9GC0LAg0Lgg0YDQsNC30LzQtdGC0LrQuCDQstC90LUg0L_QvtC70LXQuS4g0KLRg9C00LAg0LjRhQogICAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgICB0ZXh0ID0gU3RyaW5nKHRleHQpLnJlcGxhY2UoL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nLCAnJyk7CiAgICAgIHZhciB0YSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emItb3V0Jyk7CiAgICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogICAgfQoKICAgIGZ1bmN0aW9uIHdhcm5pbmdzKGQpIHsKICAgICAgdmFyIHcgPSBbXTsKICAgICAgZC5jYXJkcy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgaWYgKCFjLmhyZWYpIHcucHVzaCgn0YMg0YDQsNC30LTQtdC70LAgJyArIChpICsgMSkgKyAnINC90LUg0YPQutCw0LfQsNC9INCw0LTRgNC10YEnKTsKICAgICAgICBpZiAoIWMuc2VvTmFtZSkgdy5wdXNoKCfRgyDRgNCw0LfQtNC10LvQsCAnICsgKGkgKyAxKSArICcg0L_Rg9GB0YLQvtC1INC90LDQt9Cy0LDQvdC40LUg0LIg0YDQsNC30LzQtdGC0LrQtScpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHc7CiAgICB9CgogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6Yi1idWlsZCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBkID0gY29sbGVjdCgpOwogICAgICBtc2coJ9Cn0LjRgtCw0Y4g0LjRgdGF0L7QtNC90YvQuSDQutC-0LQg0YHRgtGA0LDQvdC40YbRi-KApicpOwogICAgICBhc3NlbWJsZShkKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAvKiDRgdCy0LXRgNGP0LXQvDog0LLRgdGRINC70Lgg0LLQstC10LTRkdC90L3QvtC1INC00LXQudGB0YLQstC40YLQtdC70YzQvdC-INC_0L7Qv9Cw0LvQviDQsiDQutC-0LQgKi8KICAgICAgICB2YXIgZG9jMiA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocmVzLnRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYzIucXVlcnlTZWxlY3RvcignI2F2eicpKTsKICAgICAgICBpZiAoYWdhaW4pIHJlYWRMZChkb2MyLCBhZ2Fpbik7CiAgICAgICAgdmFyIG5vdExhbmRlZCA9IGFnYWluID8gbGFuZGVkKGQsIGFnYWluLCAvXiQvKSA6IFsn0YHRgtGA0LDQvdC40YbQsCDQvdC1INGA0LDQt9C-0LHRgNCw0LvQsNGB0YwnXTsKICAgICAgICB2YXIgbm90ZSA9ICfQodC60L7Qv9C40YDQvtCy0LDQvSDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRhtC10LvQuNC60L7QvCAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuICcgKwogICAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0Log0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuJzsKICAgICAgICB2YXIgdyA9IHdhcm5pbmdzKGQpOwogICAgICAgIGlmIChub3RMYW5kZWQubGVuZ3RoKSB3LnB1c2goJ9Cd0JUg0JfQkNCf0JjQodCQ0JvQntCh0Kwg0LIg0LrQvtC0OiAnICsgbm90TGFuZGVkLnNsaWNlKDAsIDYpLmpvaW4oJywgJykgKwogICAgICAgICAgKG5vdExhbmRlZC5sZW5ndGggPiA2ID8gJyDQuCDQtdGJ0ZEgJyArIChub3RMYW5kZWQubGVuZ3RoIC0gNikgOiAnJykpOwogICAgICAgIGlmICh3Lmxlbmd0aCkgbm90ZSArPSAnINCf0YDQvtCy0LXRgNGM0YLQtTogJyArIHcuam9pbignOyAnKSArICcuJzsKICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgICB9OwoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emItdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgICB2YXIgc25hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MucXVlcnlTZWxlY3RvcignI2F2eicpKTsKICAgICAgICByZWFkTGQoZG9jLCBhZ2Fpbik7CiAgICAgICAgdmFyIGEgPSBKU09OLnN0cmluZ2lmeShzbmFwKSwgYiA9IEpTT04uc3RyaW5naWZ5KGFnYWluKTsKICAgICAgICBpZiAoYSA9PT0gYikgbXNnKCfQodGF0L7QtNC40YLRgdGPOiDRgdCx0L7RgNC60LAg0LHQtdC3INC_0YDQsNCy0L7QuiDQtNCw0ZHRgiDRgtC1INC20LUg0LfQvdCw0YfQtdC90LjRjyAoJyArIHJlcy50ZXh0Lmxlbmd0aCArICcg0YHQuNC80LLQvtC70L7QsikuJyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBtc2coJ9Cg0JDQodCl0J7QltCU0JXQndCY0JUg4oCUINGB0LzQvtGC0YDQuNGC0LUg0LrQvtC90YHQvtC70YwuJyk7CiAgICAgICAgICBjb25zb2xlLndhcm4oJ0FWWjog0LHRi9C70L4nLCBKU09OLnBhcnNlKGEpKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cf0YDQvtCy0LXRgNC60LAg0L3QtSDQv9GA0L7RiNC70LA6ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CiAgfQoKICBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcjYXZ6Jyk7CiAgICBpZiAoIXNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCINCx0LvQvtC60LAgI2F2eicpOwogICAgY2ZnID0gcmVhZENmZyhzY29wZSk7CiAgICByZWFkTGQoZG9jLCBjZmcpOwogICAgc3RhcnQoKTsKICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgcm9vdC5pbm5lckhUTUwgPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnpiLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpiLWhlYWQiPjxoMj7Qn9Cw0L3QtdC70Ywg0LHQu9C-0LPQsDwvaDI-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnpiLWJvZHkiPjxwIGNsYXNzPSJhdnpiLWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINCx0LvQvtCz0LAg0L7RgtC60YDRi9GC0LAuJzsKfSkoKTsKCn19LAp7aWQ6InZpZGVvIix0aXRsZToi0J_QsNC90LXQu9GMINCy0LjQtNC10L7RgdGK0ZHQvNC60LgiLHNob3J0OiLQktC40LTQtdC-IixoaW50OiLRgNC-0LvQuNC60LgsINGC0LXQutGB0YLRiywg0YDQsNC30LzQtdGC0LrQsCDQstC40LTQtdC-IixwYWdlczpbIi92aWRlb19zaG9vdGluZ19rYXphbiJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQktCY0JTQldCe0KHQqtCB0JzQmtCYICB2MiDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvdmlkZW9fc2hvb3Rpbmdfa2F6YW4KCiAgINCj0YHRgtGA0L7QudGB0YLQstC-INGB0YLRgNCw0L3QuNGG0Ysg0L7RgtC70LjRh9Cw0LXRgtGB0Y8g0L7RgiDQvtGB0YLQsNC70YzQvdGL0YU6INC60LDRgNGC0L7Rh9C60Lgg0YDQvtC70LjQutC-0LIKICAg0L3QtSDQvdCw0L_QuNGB0LDQvdGLINCyINGA0LDQt9C80LXRgtC60LUsINCwINGB0YLRgNC-0Y_RgtGB0Y8g0YHQutGA0LjQv9GC0L7QvCDQuNC3INC80LDRgdGB0LjQstCwCiAgIGB2YXIgdmlkZW9zID0gWy4uLl1gLiDQn9C-0Y3RgtC-0LzRgyDQv9Cw0L3QtdC70Ywg0L_RgNCw0LLQuNGCINC80LDRgdGB0LjQsiDQsiDRgdC60YDQuNC_0YLQtSwKICAg0LAg0L3QtSBET00uCgogICDQoNCw0LfQvNC10YLQutCwIFZpZGVvT2JqZWN0INC00LXRgNC20LjRgtGB0Y8g0LLQvNC10YHRgtC1INGBINC70LXQvdGC0L7QuTog0YPQt9C70YsKICAg0YHQvtC_0L7RgdGC0LDQstC70Y_RjtGC0YHRjyDRgSDRgNC-0LvQuNC60LDQvNC4INC_0L4g0LDQtNGA0LXRgdGDINGE0LDQudC70LAgKGNvbnRlbnRVcmwpLAogICDQsCDQvdC1INC_0L4g0L_QvtGA0Y_QtNC60YMg4oCUINC_0L7RgNGP0LTQvtC6INC80L7QttC90L4g0LzQtdC90Y_RgtGMLCDRgNC-0LvQuNC60Lgg0LTQvtCx0LDQstC70Y_RgtGMLgoKICAg0JfQvdCw0YfQtdC90LjRjyDRh9C40YLQsNGO0YLRgdGPINC40Lcg0JjQodCl0J7QlNCd0J7Qk9CeINC60L7QtNCwINGB0YLRgNCw0L3QuNGG0YssINCwINC90LUg0LjQtyDQttC40LLQvtCz0L4KICAgRE9NOiDRgdC60YDQuNC_0YLRiyB3Zm9saW8g0L_RgNCw0LLRj9GCINGA0LDQt9C80LXRgtC60YMg0LIg0LHRgNCw0YPQt9C10YDQtSwg0Lgg0Y3RgtC4INC_0YDQsNCy0LrQuAogICDQvdC1INC00L7Qu9C20L3RiyDQv9C-0L_QsNC00LDRgtGMINCyINCy0LDRiCDQutC-0LQuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0KPQt9C70YsgI3Bob3RvZ3JhcGhlciwgI2J1c2luZXNzINC4ICN3ZWJzaXRlINC-0L_QuNGB0YvQstCw0Y7RgiDQvtC00L3QvtCz0L4g0Lgg0YLQvtCz0L4g0LbQtQogICAgINGH0LXQu9C-0LLQtdC60LAsINC-0LTQvdC-INC00LXQu9C-INC4INC-0LTQuNC9INGB0LDQudGCLiDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuQogICAgINC_0L4t0YDQsNC30L3QvtC80YMg0L3QsCDRgNCw0LfQvdGL0YUg0YHRgtGA0LDQvdC40YbQsNGFLCDigJQg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQugogICAgINC4INCY0Jgg0LLRi9Cx0LjRgNCw0Y7RgiDRgdCw0LzQuCwg0LrQsNC60L7QuSDQstC10YDRgdC40Lgg0LLQtdGA0LjRgtGMLCDQuCDQvdCw0LPRgNCw0LTRiyDQvNC-0LPRg9GCINC_0YDQvtGB0YLQvgogICAgINC90LUg0LfQsNGB0YfQuNGC0LDRgtGM0YHRjy4g0J_QsNC90LXQu9GMINC_0YDQuNCy0L7QtNC40YIg0LjRhSDQuiDRjdGC0LDQu9C-0L3RgyDQv9GA0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQtSwKICAgICDQv9C-0Y3RgtC-0LzRgyDRgNCw0YHRhdC-0LTQuNGC0YzRgdGPINC40Lwg0LHQvtC70YzRiNC1INC90LXRh9C10LwuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAzMCDQvtC60YLRj9Cx0YDRjyAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgLyog0KHRgdGL0LvQutCwINC90LAg0YjRgNC40YTRgtGLINCx0LvQvtC60LA6IEpvc3Qg0LggUnViaWsg0L3Rg9C20L3Ri9GFINC90LDRh9C10YDRgtCw0L3QuNC5INC_0LvRjtGBCiAgICAgTWF0ZXJpYWwgU3ltYm9scyDQtNC70Y8g0LfQvdCw0YfQutC-0LIuINCU0LXRgNC20LjQvCDQutC-0L_QuNGOINC30LTQtdGB0Ywg0L3QsCDRgdC70YPRh9Cw0LksINC10YHQu9C4CiAgICAg0L3QsCDRgdGC0YDQsNC90LjRhtC1INC10ZEg0L3QtSDQvtGB0YLQsNC70L7RgdGMIOKAlCDQuNC90LDRh9C1INCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQsdGD0LTQtdGCINC90LXRh9C10LwuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMjAwOzMwMDs0MDA7NTAwJyArCiAgICAnJmFtcDtmYW1pbHk9UnViaWs6aXRhbCx3Z2h0QDAsMTAwOzAsMjAwOzAsMzAwOzEsMjAwJyArCiAgICAnJmFtcDtmYW1pbHk9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDI0LDMwMCwwLDAnICsKICAgICcmYW1wO2Rpc3BsYXk9YmxvY2siIHJlbD0ic3R5bGVzaGVldCI-JzsKCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTktMDEtMDEiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogIjE0OTAwLTU0OTAwIiwKICAgICAgIm9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iLAogICAgICAgICAgImRheU9mV2VlayI6IFsKICAgICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAgICJUdWVzZGF5IiwKICAgICAgICAgICAgIldlZG5lc2RheSIsCiAgICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAgICJGcmlkYXkiLAogICAgICAgICAgICAiU2F0dXJkYXkiLAogICAgICAgICAgICAiU3VuZGF5IgogICAgICAgICAgXSwKICAgICAgICAgICJvcGVucyI6ICIxMDowMCIsCiAgICAgICAgICAiY2xvc2VzIjogIjIwOjAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIGZ1bmN0aW9uIHN5bmNDYW5vbihncmFwaCkgewogICAgaWYgKCFncmFwaCB8fCAhZ3JhcGgubGVuZ3RoKSByZXR1cm4gW107CiAgICB2YXIgZG9uZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaWQgPSBncmFwaFtpXSAmJiBncmFwaFtpXVsnQGlkJ107CiAgICAgIGlmIChpZCAmJiBBVlpfQ0FOT05baWRdKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdyYXBoW2ldKSAhPT0gSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpIHsKICAgICAgICAgIGRvbmUucHVzaChTdHJpbmcoaWQpLnNwbGl0KCcjJylbMV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFtpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZhciBvbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6di1yb290Jyk7CiAgaWYgKG9sZCkgb2xkLnJlbW92ZSgpOwoKICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hdi12aWRlb3MnKSkgewogICAgYWxlcnQoJ0FWWjog0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1INC90LXRgiDQsdC70L7QutCwIC5hdi12aWRlb3MnKTsKICAgIHJldHVybjsKICB9CgogIGZ1bmN0aW9uIG9uZShlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBlbC5xdWVyeVNlbGVjdG9yKHNlbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfQogIGZ1bmN0aW9uIGFsbChlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBbXS5zbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKSk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9IH0KICBmdW5jdGlvbiB0KGVsKSB7IHJldHVybiBlbCA_IGVsLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gaHRtbChlbCkgeyByZXR1cm4gZWwgPyBlbC5pbm5lckhUTUwgOiAnJzsgfQogIGZ1bmN0aW9uIG93blRleHQoZWwpIHsKICAgIGlmICghZWwpIHJldHVybiAnJzsKICAgIHZhciBzID0gJyc7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGVsLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDMpIHMgKz0gZWwuY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWU7CiAgICB9CiAgICByZXR1cm4gcy5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQoKICB2YXIgY2ZnID0gbnVsbDsKCiAgZnVuY3Rpb24gcGFnZVNvdXJjZSgpIHsKICAgIHJldHVybiBmZXRjaChsb2NhdGlvbi5wYXRobmFtZSArICc_dD0nICsgRGF0ZS5ub3coKSwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSAtLS0tLS0tLS0tICovCgogIC8qINCc0LDRgdGB0LjQsiDRgNC-0LvQuNC60L7QsiDQu9C10LbQuNGCINCyINGB0LrRgNC40L_RgtC1INGB0YLRgNCw0L3QuNGG0YsuINCg0LDQt9Cx0LjRgNCw0LXQvCDQtdCz0L4g0L_QviDQv9C-0LvRj9C8LAogICAgINC90LUg0LLRi9C_0L7Qu9C90Y_RjyDQutC-0LQ6INCy0YvQv9C-0LvQvdGP0YLRjCDRh9GD0LbQvtC5INGC0LXQutGB0YIg0YDQsNC00Lgg0YfRgtC10L3QuNGPIOKAlCDQv9C70L7RhdCw0Y8g0LjQtNC10Y8uICovCiAgZnVuY3Rpb24gcmVhZFZpZGVvcyhzcmMpIHsKICAgIHZhciBtID0gc3JjLm1hdGNoKC92YXIgdmlkZW9zID0gXFsoW1xzXFNdKj8pXG5ccypcXTsvKTsKICAgIGlmICghbSkgcmV0dXJuIFtdOwogICAgdmFyIG91dCA9IFtdOwogICAgLyog0KDQsNC30LHQuNGA0LDQtdC8INC_0L4g0L7QtNC90L7QuSDQt9Cw0L_QuNGB0Lgg0Lgg0LTQvtGB0YLQsNGR0Lwg0L_QvtC70Y8g0L_QviDQuNC80LXQvdC4OiDRgyDQv9GA0LXQttC90LjRhQogICAgICAg0YDQvtC70LjQutC-0LIg0L_QvtC70LXQuSDRh9C10YLRi9GA0LUsINGDINC90L7QstGL0YUg0YjQtdGB0YLRjCwg0Lgg0L_QvtGA0Y_QtNC-0Log0LzQvtC20LXRgiDQuNC30LzQtdC90LjRgtGM0YHRjy4KICAgICAgINCW0ZHRgdGC0LrQsNGPINC_0L7RgdC70LXQtNC-0LLQsNGC0LXQu9GM0L3QvtGB0YLRjCDQv9C-0LvQtdC5INC70L7QvNCw0LvQsNGB0Ywg0LHRiyDQvdCwINC_0LXRgNCy0L7QuSDQv9GA0LDQstC60LUuICovCiAgICB2YXIgcmUgPSAvXHsoW157fV0qKVx9L2csIGhpdDsKICAgIC8qIG51bGwg0LfQvdCw0YfQuNGCIMKr0L_QvtC70Y8g0L3QtdGCINCy0L7QstGB0LXCuyDigJQg0YLQsNC60L7QuSDRgNC-0LvQuNC6INC30LDQv9C40YHQsNC9INC_0L4t0YHRgtCw0YDQvtC80YMg0LgKICAgICAgINC-0LHQu9C-0LbQutGDINC90LDQtNC-INCy0LfRj9GC0Ywg0LjQtyDRgNCw0LfQvNC10YLQutC4LiDQn9GD0YHRgtCw0Y8g0YHRgtGA0L7QutCwINC30L3QsNGH0LjRgiDQtNGA0YPQs9C-0LU6CiAgICAgICDQv9C-0LvQtSDQtdGB0YLRjCDQuCDQvtGB0YLQsNCy0LvQtdC90L4g0L_Rg9GB0YLRi9C8INC90LDQvNC10YDQtdC90L3Qviwg0L_QvtC00YHRgtCw0LLQu9GP0YLRjCDRgtGD0LTQsCDQvdC10YfQtdCz0L4uICovCiAgICBmdW5jdGlvbiBwaWNrKGJvZHksIGtleSkgewogICAgICB2YXIgbTIgPSBib2R5Lm1hdGNoKG5ldyBSZWdFeHAoa2V5ICsgIjpcXHMqJygoPzpbXidcXFxcXXxcXFxcLikqKSciKSk7CiAgICAgIHJldHVybiBtMiA_IG0yWzFdLnJlcGxhY2UoL1xcJy9nLCAiJyIpLnJlcGxhY2UoL1xcXFwvZywgJ1xcJykgOiBudWxsOwogICAgfQogICAgd2hpbGUgKChoaXQgPSByZS5leGVjKG1bMV0pKSkgewogICAgICB2YXIgYiA9IGhpdFsxXTsKICAgICAgaWYgKCEvdXJsOi8udGVzdChiKSkgY29udGludWU7CiAgICAgIG91dC5wdXNoKHsKICAgICAgICB1cmw6IHBpY2soYiwgJ3VybCcpIHx8ICcnLCB0aXRsZTogcGljayhiLCAndGl0bGUnKSB8fCAnJywKICAgICAgICBzdWI6IHBpY2soYiwgJ3N1YicpIHx8ICcnLCBhbHQ6IHBpY2soYiwgJ2FsdCcpIHx8ICcnLAogICAgICAgIHBvc3RlcjogcGljayhiLCAncG9zdGVyJyksIGZtdDogcGljayhiLCAnZm10JykgPT09ICdoJyA_ICdoJyA6ICd2JwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiDQlNC70LjRgtC10LvRjNC90L7RgdGC0Ywg0LIg0YDQsNC30LzQtdGC0LrQtSDQv9C40YjQtdGC0YHRjyDQutCw0LogUFQzMFMg4oCUINGH0LXQu9C-0LLQtdC60YMg0YPQtNC-0LHQvdC10LUKICAgICDRgdC10LrRg9C90LTQsNC80LgsINC_0L7RjdGC0L7QvNGDINCyINC_0LDQvdC10LvQuCDQv9C-0LrQsNC30YvQstCw0LXQvCDRh9C40YHQu9C-LCDQsCDQvdCw0YDRg9C20YMg0L7RgtC00LDRkdC8CiAgICAg0LIg0YLQvtC8INCy0LjQtNC1LCDQutC-0YLQvtGA0L7Qs9C-INC20LTRkdGCINC_0L7QuNGB0LrQvtCy0LjQui4gKi8KICBmdW5jdGlvbiBpc29Ub1NlYyh2KSB7CiAgICBpZiAoIXYpIHJldHVybiAnJzsKICAgIHZhciBtID0gU3RyaW5nKHYpLm1hdGNoKC9eUFQoPzooXGQrKU0pPyg_OihcZCspUyk_JC8pOwogICAgaWYgKCFtKSByZXR1cm4gJyc7CiAgICByZXR1cm4gU3RyaW5nKChwYXJzZUludChtWzFdIHx8IDAsIDEwKSAqIDYwKSArIHBhcnNlSW50KG1bMl0gfHwgMCwgMTApKTsKICB9CiAgZnVuY3Rpb24gc2VjVG9Jc28odikgewogICAgdmFyIHMgPSBwYXJzZUludChTdHJpbmcodikucmVwbGFjZSgvXEQvZywgJycpLCAxMCk7CiAgICBpZiAoIXMgfHwgcyA8IDEpIHJldHVybiAnJzsKICAgIHJldHVybiBzID49IDYwID8gJ1BUJyArIE1hdGguZmxvb3IocyAvIDYwKSArICdNJyArIChzICUgNjApICsgJ1MnIDogJ1BUJyArIHMgKyAnUyc7CiAgfQoKICBmdW5jdGlvbiByZWFkQ2ZnKGRvYywgc3JjKSB7CiAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2LXZpZGVvcycpOwogICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmRpc3BsYXkgLmlubmVyJyk7CiAgICB2YXIgbGFiZWxzID0gYWxsKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwnKTsKICAgIHZhciB2aWRzID0gcmVhZFZpZGVvcyhzcmMpOwoKICAgIC8qINGA0LDQt9C80LXRgtC60LAg0YDQvtC70LjQutC-0LIg4oCUINGB0L7Qv9C-0YHRgtCw0LLQu9GP0LXQvCDQv9C-INCw0LTRgNC10YHRgyDRhNCw0LnQu9CwICovCiAgICB2YXIgYnlVcmwgPSB7fTsKICAgIHRyeSB7CiAgICAgIHZhciBsZCA9IEpTT04ucGFyc2Uob25lKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKS50ZXh0Q29udGVudCk7CiAgICAgIChsZFsnQGdyYXBoJ10gfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1ZpZGVvT2JqZWN0JyAmJiBuLmNvbnRlbnRVcmwpIGJ5VXJsW24uY29udGVudFVybF0gPSBuOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsgLyog0YDQsNC30LHQtdGA0ZHQvNGB0Y8g0L_RgNC4INGB0LHQvtGA0LrQtSAqLyB9CgogICAgdmlkcy5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CiAgICAgIHZhciBuID0gYnlVcmxbdi51cmxdIHx8IHt9OwogICAgICB2LnNlb05hbWUgPSBuLm5hbWUgfHwgJyc7CiAgICAgIHYuc2VvRGVzYyA9IG4uZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgIC8qINCe0LHQu9C-0LbQutCwINGC0LXQv9C10YDRjCDQvtC00L3QsCDQvdCwINC00LLQsCDQtNC10LvQsDog0LXRkSDQstC40LTQvdC-INC90LAg0LrQsNGA0YLQvtGH0LrQtSDQuCDQtdGRINC20LUKICAgICAgICAg0LfQsNCx0LjRgNCw0LXRgiDQv9C-0LjRgdC60L7QstC40LouINCY0Lcg0YDQsNC30LzQtdGC0LrQuCDQv9C-0LTRgtGP0LPQuNCy0LDQtdC8INGC0L7Qu9GM0LrQviDRgtC-0LPQtNCwLCDQutC-0LPQtNCwCiAgICAgICAgINCyINGB0L_QuNGB0LrQtSDRgNC-0LvQuNC60L7QsiDQv9C-0LvRjyDQvdC10YIg0YHQvtCy0YHQtdC8LCDigJQg0YLQviDQtdGB0YLRjCDRgNC-0LvQuNC6INC30LDQv9C40YHQsNC9INC_0L4KICAgICAgICAg0YHRgtCw0YDQvtC80YMg0L7QsdGA0LDQt9GG0YMuINCf0YPRgdGC0L7QtSDQv9C-0LvQtSDQvtGB0YLQsNCy0LvRj9C10Lwg0L_Rg9GB0YLRi9C8OiDQtdCz0L4g0YLQsNC6INC-0YHRgtCw0LLQuNC70LguICovCiAgICAgIGlmICh2LnBvc3RlciA9PT0gbnVsbCkgdi5wb3N0ZXIgPSBuLnRodW1ibmFpbFVybCB8fCAnJzsKICAgICAgdi5kYXRlID0gbi51cGxvYWREYXRlIHx8ICcnOwogICAgICB2LmR1ciA9IGlzb1RvU2VjKG4uZHVyYXRpb24pOwogICAgICB2LmluU2NoZW1hID0gISFieVVybFt2LnVybF07CiAgICB9KTsKCiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllOiB0KG9uZShzY29wZSwgJy5oZXJvLWV5ZScpKSwKICAgICAgICBsaW5lMTogdChsaW5lc1swXSksCiAgICAgICAgbGluZTI6IHQobGluZXNbMV0pLAogICAgICAgIGxpbmUzOiBsaW5lc1syXSA_IHQob25lKGxpbmVzWzJdLCAnZW0nKSB8fCBsaW5lc1syXSkgOiAnJywKICAgICAgICBsZWRlOiBodG1sKG9uZShzY29wZSwgJy5sZWRlJykpLAogICAgICAgIG1ldGE6IGFsbChzY29wZSwgJy5oZXJvLW1ldGEgPiBkaXYnKS5tYXAoZnVuY3Rpb24gKGQpIHsKICAgICAgICAgIHJldHVybiB7IGtleTogdChvbmUoZCwgJy5obS1rZXknKSksIHZhbDogaHRtbChvbmUoZCwgJy5obS12YWwnKSkgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICB3b3JrczogewogICAgICAgIGhlYWQ6IHQob25lKGxhYmVsc1swXSwgJ2gyJykpLAogICAgICAgIGFzaWRlOiBvd25UZXh0KG9uZShsYWJlbHNbMF0sICcuc2wtYXNpZGUnKSksCiAgICAgICAgaGludDogb3duVGV4dChvbmUoc2NvcGUsICcuc2Nyb2xsLWhpbnQnKSksCiAgICAgICAgaXRlbXM6IHZpZHMKICAgICAgfSwKICAgICAgY3RhOiB7CiAgICAgICAgaGVhZDogdChvbmUobGFiZWxzWzFdLCAnaDInKSksCiAgICAgICAgZXllOiB0KG9uZShzY29wZSwgJy5jdGEtZXllJykpLAogICAgICAgIHRpdGxlOiBodG1sKG9uZShzY29wZSwgJy5jdGEtdGl0bGUnKSksCiAgICAgICAgc3ViOiBodG1sKG9uZShzY29wZSwgJy5jdGEtc3ViJykpLAogICAgICAgIHBpbGxzOiBhbGwoc2NvcGUsICcuY3RhLXBpbGwnKS5tYXAoZnVuY3Rpb24gKHApIHsgcmV0dXJuIG93blRleHQocCk7IH0pLAogICAgICAgIGJ1dHRvbnM6IGFsbChzY29wZSwgJy5idG4nKS5tYXAoZnVuY3Rpb24gKGIpIHsKICAgICAgICAgIHJldHVybiB7IHRleHQ6IHQoYWxsKGIsICcuYnRuLWxhYmVsID4gc3BhbicpWzBdKSwgaHJlZjogYi5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJyB9OwogICAgICAgIH0pLAogICAgICAgIGhpbnQ6IHQob25lKHNjb3BlLCAnLmN0YS1oaW50JykpCiAgICAgIH0sCiAgICAgIG1ldGE6IHsKICAgICAgICBuYW1lOiAnJywKICAgICAgICBkZXNjOiAnJwogICAgICB9CiAgICB9OwogIH0KCiAgLyogLS0tLS0tLS0tLSDQvtC60L3QviAtLS0tLS0tLS0tICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2enYtcm9vdCwjYXZ6di1yb290ICp7Y29sb3I6IzFkMWQxZiAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWYgIWltcG9ydGFudDsnLAogICAgJ2xldHRlci1zcGFjaW5nOm5vcm1hbCAhaW1wb3J0YW50O3RleHQtdHJhbnNmb3JtOm5vbmUgIWltcG9ydGFudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6di1yb290IGlucHV0LCNhdnp2LXJvb3QgdGV4dGFyZWF7YmFja2dyb3VuZDojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IzFkMWQxZiAhaW1wb3J0YW50OycsCiAgICAnb3BhY2l0eToxICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudDtsaW5lLWhlaWdodDoxLjQgIWltcG9ydGFudH0nLAogICAgJyNhdnp2LXJvb3QgYnV0dG9ue2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1zaXplOjE0cHggIWltcG9ydGFudH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtYi5we2JhY2tncm91bmQ6IzFkMWQxZiAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjojZmZmICFpbXBvcnRhbnR9JywKICAgICcjYXZ6di1yb290e3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O2JhY2tncm91bmQ6cmdiYSgyMCwyMCwyMiwuNTUpOycsCiAgICAnZm9udDoxNHB4LzEuNSAtYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MjRweH0nLAogICAgJyNhdnp2LXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2enYtaGVhZHtwYWRkaW5nOjE2cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU5O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXB9JywKICAgICcjYXZ6di1oZWFkIGgye21hcmdpbjowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjYwMDtmbGV4OjF9JywKICAgICcjYXZ6di1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnp2LWZvb3R7cGFkZGluZzoxNHB4IDIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWIucHtib3JkZXItY29sb3I6IzFkMWQxZn0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtc2VjPnN1bW1hcnl7cGFkZGluZzoxMnB4IDE0cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NjAwO2JhY2tncm91bmQ6I2ZhZmFmYTtsaXN0LXN0eWxlOm5vbmV9JywKICAgICcjYXZ6di1yb290IC5hdnp2LXNlYz5zdW1tYXJ5Ojotd2Via2l0LWRldGFpbHMtbWFya2Vye2Rpc3BsYXk6bm9uZX0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtc2VjW29wZW5dPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QkUgICJ9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWlue3BhZGRpbmc6MTRweH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWYgbGFiZWx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTFweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo0cHh9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWYgaW5wdXQsI2F2enYtcm9vdCAuYXZ6di1mIHRleHRhcmVhLCNhdnp2LXJvb3QgLmF2enYtZiBzZWxlY3R7d2lkdGg6MTAwJTtmb250OmluaGVyaXQ7JywKICAgICdwYWRkaW5nOjhweCAxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjdweDtiYWNrZ3JvdW5kOiNmZmZ9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWYgdGV4dGFyZWF7bWluLWhlaWdodDo2NHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0nLAogICAgJ0BtZWRpYSAobWF4LXdpZHRoOjU2MHB4KXsjYXZ6di1yb290IC5hdnp2LXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfSNhdnp2LXdpbntib3JkZXItcmFkaXVzOjB9fScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1jYXJke2JvcmRlcjoxcHggc29saWQgI2VjZWNlZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEycHg7bWFyZ2luLWJvdHRvbToxMnB4O2JhY2tncm91bmQ6I2ZjZmNmZH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtY2FyZC53YXJue2JvcmRlci1jb2xvcjojYzhhMDIwO2JhY2tncm91bmQ6I2ZmZmRmNH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1jYXJkIGg0IGJ7Y29sb3I6I2EzNzgwMCAhaW1wb3J0YW50fScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1jYXJkIGg0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtY2FyZCBoNCAuYXZ6di1vcHN7bWFyZ2luLWxlZnQ6YXV0bztkaXNwbGF5OmZsZXg7Z2FwOjZweDtmbGV4Om5vbmV9JywKICAgICcjYXZ6di1yb290IC5hdnp2LW9wcyBidXR0b257Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4ICFpbXBvcnRhbnQ7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6NnB4OycsCiAgICAnYm9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDoxLjN9JywKICAgICcjYXZ6di1yb290IC5hdnp2LW9wcyBidXR0b246aG92ZXJ7Ym9yZGVyLWNvbG9yOiM4Njg2OGJ9JywKICAgICcjYXZ6di1yb290IC5hdnp2LW9wcyBidXR0b25bZGlzYWJsZWRde29wYWNpdHk6LjM1O2N1cnNvcjpkZWZhdWx0fScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di1vcHMgYnV0dG9uLmRlbDpob3Zlcntib3JkZXItY29sb3I6I2MwMzkyYjtjb2xvcjojYzAzOTJiICFpbXBvcnRhbnR9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWFkZHttYXJnaW46MnB4IDAgNnB4O3BhZGRpbmc6OXB4IDE2cHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBkYXNoZWQgI2I2YjZiYjsnLAogICAgJ2JhY2tncm91bmQ6I2ZmZjtmb250OmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWFkZDpob3Zlcntib3JkZXItY29sb3I6IzFkMWQxZjtib3JkZXItc3R5bGU6c29saWR9JywKICAgICcjYXZ6di1yb290IC5hdnp2LWltZ3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtaW1nPmltZ3t3aWR0aDo2MHB4O2hlaWdodDo5NnB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZDojZWNlY2VjO2ZsZXg6bm9uZX0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtaW1nIC5ne2ZsZXg6MX0nLAogICAgJyNhdnp2LXJvb3QgLmF2enYtaGludHtmb250LXNpemU6MTJweDtjb2xvcjojODY4NjhiICFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAxMnB4fScsCiAgICAnI2F2enYtb3V0e3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMmQ3O2JvcmRlci1yYWRpdXM6OHB4fScsCiAgICAnI2F2enYtcm9vdCAuYXZ6di13YXJue2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNhMzc4MDAgIWltcG9ydGFudDttYXJnaW46NnB4IDAgMDttaW4taGVpZ2h0OjB9JywKICAgICcjYXZ6di1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINC70LjRiNC90LjQuSDQv9C10YDQtdC90L7RgTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIg0L_QtdGA0LLRi9C5INC_0L7RgdC70LUgPHRleHRhcmVhPiAqLwogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnp2LWYiPjxsYWJlbD4nICsgbGFiZWwgKyAnPC9sYWJlbD4nICsgdGFnICsgJzwvZGl2Pic7CiAgfQoKICB2YXIgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIHJvb3QuaWQgPSAnYXZ6di1yb290JzsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOwoKICAvKiAtLS0tLS0tLS0tINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyAtLS0tLS0tLS0tCiAgICAg0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtQogICAgINGB0YLRgNC-0LrQuCDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg4oCUIFUrMjAwQiDQuCDRgNC-0LTQvdGPLiDQndCwINGN0LrRgNCw0L3QtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0YTQsNC50LvQsCDQvtC90Lgg0LvQvtC80LDRjtGCINGB0YHRi9C70LrRgzog0LHRgNCw0YPQt9C10YAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LAogICAgINC60LDRgNGC0LjQvdC60LAg0LjQu9C4INCy0LjQtNC10L4g0L3QtSDQs9GA0YPQt9GP0YLRgdGPLiDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMCiAgICAg0L3QtdGH0LXQs9C-LCDQv9C-0Y3RgtC-0LzRgyDQstGL0YfQuNGJ0LDQtdC8INC40YUg0Lgg0L_RgNC4INCy0LLQvtC00LUsINC4INGB0L_Qu9C-0YjQvdGL0Lwg0L_RgNC-0YXQvtC00L7QvCDQv9C10YDQtdC0CiAgICAg0YHQsdC-0YDQutC-0Lkg4oCUINC30L3QsNGH0LXQvdC40LUg0LzQvtCz0LvQviDQv9C-0L_QsNGB0YLRjCDQsiDQv9C-0LvQtSDQvNC40LzQviDRgdC-0LHRi9GC0LjQuSDQstCy0L7QtNCwLiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgWlcgPSAvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2c7CiAgICBmdW5jdGlvbiBzY3J1YihlbCkgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiBlbC52YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAwOwogICAgICB2YXIgdiA9IGVsLnZhbHVlLnJlcGxhY2UoWlcsICcnKTsKICAgICAgaWYgKHYgPT09IGVsLnZhbHVlKSByZXR1cm4gMDsKICAgICAgZWwudmFsdWUgPSB2OwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2NydWIoZWwpOyB9LCAwKTsKICAgIH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGVscyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnp2LW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2enYtd2luIj4nICsKICAgICAgJzxkaXYgaWQ9ImF2enYtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQstC40LTQtdC-0YHRitGR0LzQutC4PC9oMj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enYtYiIgaWQ9ImF2enYtY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-PC9kaXY-PGRpdiBpZD0iYXZ6di1ib2R5Ij4nOwoKICAgIC8qINCg0J7Qm9CY0JrQmCAqLwogICAgdmFyIG5vU2NoZW1hID0gY2ZnLndvcmtzLml0ZW1zLmZpbHRlcihmdW5jdGlvbiAodikgeyByZXR1cm4gIXYuaW5TY2hlbWE7IH0pLmxlbmd0aDsKICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnp2LXNlYyIgb3Blbj48c3VtbWFyeT7QoNC-0LvQuNC60LggKCcgKyBjZmcud29ya3MuaXRlbXMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6di1pbiI-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6di1oaW50Ij7QmtCw0YDRgtC-0YfQutC4INC90LAg0YHRgtGA0LDQvdC40YbQtSDRgdGC0YDQvtC40YIg0YHQutGA0LjQv9GCINC40Lcg0YHQv9C40YHQutCwINC90LjQttC1LiAnICsKICAgICAgJ9Cg0LDQt9C80LXRgtC60LAg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutC-0LIg0YHQvtCx0LjRgNCw0LXRgtGB0Y8g0LjQtyDRjdGC0L7Qs9C-INC20LUg0YHQv9C40YHQutCwIOKAlCDRgNCw0LfQvtC50YLQuNGB0Ywg0LjQvCDQvdC10YfQtdC8LicgKwogICAgICAobm9TY2hlbWEgPyAnIDxiPtCg0L7Qu9C40LrQvtCyINCx0LXQtyDQvtC_0LjRgdCw0L3QuNGPINC00LvRjyDQv9C-0LjRgdC60LA6ICcgKyBub1NjaGVtYSArICc8L2I–IOKAlCDQvtC90Lgg0L7RgtC80LXRh9C10L3RiyDQttGR0LvRgtGL0LwuJyA6ICcnKSArCiAgICAgICc8L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnp2LXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQsiDQu9C10L3RgtC1JywgJ3dvcmtzLmhlYWQnLCBjZmcud29ya3MuaGVhZCkgKwogICAgICBmaWVsZCgn0J_QvtC80LXRgtC60LAg0YHQv9GA0LDQstCwJywgJ3dvcmtzLmFzaWRlJywgY2ZnLndvcmtzLmFzaWRlKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9Cf0L7QtNGB0LrQsNC30LrQsCDQviDRgdCy0LDQudC_0LUgKNC90LAg0YLQtdC70LXRhNC-0L3QtSknLCAnd29ya3MuaGludCcsIGNmZy53b3Jrcy5oaW50KTsKCiAgICBjZmcud29ya3MuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkgewogICAgICB2YXIgbGFzdCA9IGNmZy53b3Jrcy5pdGVtcy5sZW5ndGggLSAxOwogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnp2LWNhcmQnICsgKHYuaW5TY2hlbWEgPyAnJyA6ICcgd2FybicpICsgJyI-PGg0PjxzcGFuPtCg0L7Qu9C40LogJyArIChpICsgMSkgKwogICAgICAgICh2LmluU2NoZW1hID8gJycgOiAnIOKAlCA8Yj7QvdC10YIg0L7Qv9C40YHQsNC90LjRjyDQtNC70Y8g0L_QvtC40YHQutCwPC9iPicpICsgJzwvc3Bhbj4nICsKICAgICAgICAnPHNwYW4gY2xhc3M9ImF2enYtb3BzIj4nICsKICAgICAgICAnPGJ1dHRvbiBkYXRhLWFjdD0idXAiIGRhdGEtaT0iJyArIGkgKyAnIiB0aXRsZT0i0JLRi9GI0LUg0LIg0LvQtdC90YLQtSInICsgKGkgPT09IDAgPyAnIGRpc2FibGVkJyA6ICcnKSArICc-XHUyMTkxPC9idXR0b24-JyArCiAgICAgICAgJzxidXR0b24gZGF0YS1hY3Q9ImRvd24iIGRhdGEtaT0iJyArIGkgKyAnIiB0aXRsZT0i0J3QuNC20LUg0LIg0LvQtdC90YLQtSInICsgKGkgPT09IGxhc3QgPyAnIGRpc2FibGVkJyA6ICcnKSArICc-XHUyMTkzPC9idXR0b24-JyArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImRlbCIgZGF0YS1hY3Q9ImRlbCIgZGF0YS1pPSInICsgaSArICciIHRpdGxlPSLQo9Cx0YDQsNGC0Ywg0YDQvtC70LjQuiDRgdC-INGB0YLRgNCw0L3QuNGG0YsiPtCj0LTQsNC70LjRgtGMPC9idXR0b24-JyArCiAgICAgICAgJzwvc3Bhbj48L2g0PicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnp2LXJvdyI-JyArIGZpZWxkKCfQmNC80Y8g0L3QsCDQutCw0YDRgtC-0YfQutC1JywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy50aXRsZScsIHYudGl0bGUpICsKICAgICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0L3QsCDQutCw0YDRgtC-0YfQutC1JywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5zdWInLCB2LnN1YikgKyAnPC9kaXY-JyArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEg0LLQuNC00LXQvtGE0LDQudC70LAnLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLnVybCcsIHYudXJsKSArCiAgICAgICAgZmllbGQoJ0FsdC3RgtC10LrRgdGCJywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5hbHQnLCB2LmFsdCkgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnp2LXJvdyI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enYtZiI-PGxhYmVsPtCk0L7RgNC80LDRgiDQutCw0LTRgNCwPC9sYWJlbD48c2VsZWN0IGRhdGEtcD0id29ya3MuaXRlbXMuJyArIGkgKyAnLmZtdCI-JyArCiAgICAgICAgJzxvcHRpb24gdmFsdWU9InYiJyArICh2LmZtdCA9PT0gJ2gnID8gJycgOiAnIHNlbGVjdGVkJykgKyAnPtCS0LXRgNGC0LjQutCw0LvRjNC90YvQuSA5OjE2PC9vcHRpb24-JyArCiAgICAgICAgJzxvcHRpb24gdmFsdWU9ImgiJyArICh2LmZtdCA9PT0gJ2gnID8gJyBzZWxlY3RlZCcgOiAnJykgKyAnPtCo0LjRgNC-0LrQuNC5IDE2Ojk8L29wdGlvbj4nICsKICAgICAgICAnPC9zZWxlY3Q-PC9kaXY-JyArCiAgICAgICAgZmllbGQoJ9CU0LvQuNGC0LXQu9GM0L3QvtGB0YLRjCwg0YHQtdC60YPQvdC0JywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5kdXInLCB2LmR1cikgKyAnPC9kaXY-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2enYtZiI-PGxhYmVsPtCe0LHQu9C-0LbQutCwIOKAlCDQstC40LTQvdCwINC90LAg0LrQsNGA0YLQvtGH0LrQtSDQuCDQsiDQv9C-0LjRgdC60LU8L2xhYmVsPjxkaXYgY2xhc3M9ImF2enYtaW1nIj4nICsKICAgICAgICAnPGltZyBzcmM9IicgKyBlc2Modi5wb3N0ZXIpICsgJyIgZGF0YS1wcmV2PSJ3b3Jrcy5pdGVtcy4nICsgaSArICcucG9zdGVyIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iZyI-PGlucHV0IGRhdGEtcD0id29ya3MuaXRlbXMuJyArIGkgKyAnLnBvc3RlciIgdmFsdWU9IicgKyBlc2Modi5wb3N0ZXIpICsgJyI-JyArCiAgICAgICAgJzxwIGNsYXNzPSJhdnp2LWhpbnQiIHN0eWxlPSJtYXJnaW46NnB4IDAgMCI-0JHQtdC3INC-0LHQu9C-0LbQutC4INC60LDRgNGC0L7Rh9C60LAg0LLQvtC30YzQvNGR0YIg0LrQsNC00YAg0LjQtyDRgdCw0LzQvtCz0L4g0YTQsNC50LvQsCDigJQgJyArCiAgICAgICAgJ9GN0YLQviDQu9C40YjQvdC40LUg0LTQstCwINC80LXQs9Cw0LHQsNC50YLQsCDRgyDQutCw0LbQtNC-0LPQviDQv9C-0YHQtdGC0LjRgtC10LvRjy48L3A-JyArCiAgICAgICAgJzxwIGNsYXNzPSJhdnp2LXdhcm4iIGRhdGEtd2Fybj0iJyArIGkgKyAnIj48L3A-PC9kaXY-PC9kaXY-PC9kaXY-JyArCiAgICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUg0LTQu9GPINC_0L7QuNGB0LrQsCcsICd3b3Jrcy5pdGVtcy4nICsgaSArICcuc2VvTmFtZScsIHYuc2VvTmFtZSkgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INC00LvRjyDQv9C-0LjRgdC60LAnLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLnNlb0Rlc2MnLCB2LnNlb0Rlc2MsICdhcmVhJykgKwogICAgICAgIGZpZWxkKCfQlNCw0YLQsCDQv9GD0LHQu9C40LrQsNGG0LjQuCAo0JPQk9CT0JMt0JzQnC3QlNCUINC40LvQuCDQk9CT0JPQkyknLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLmRhdGUnLCB2LmRhdGUpICsKICAgICAgICAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPGJ1dHRvbiBjbGFzcz0iYXZ6di1hZGQiIGRhdGEtYWN0PSJhZGQiPisg0JTQvtCx0LDQstC40YLRjCDRgNC-0LvQuNC6PC9idXR0b24-JzsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCo0JDQn9Ca0JAgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnp2LXNlYyI-PHN1bW1hcnk-0KjQsNC_0LrQsDwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnp2LWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuicsICdoZXJvLmV5ZScsIGNmZy5oZXJvLmV5ZSkgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6di1yb3ciPicgKyBmaWVsZCgn0KHRgtGA0L7QutCwIDEnLCAnaGVyby5saW5lMScsIGNmZy5oZXJvLmxpbmUxKSArCiAgICAgIGZpZWxkKCfQodGC0YDQvtC60LAgMicsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KHRgtGA0L7QutCwIDMgKNC60YPRgNGB0LjQsiknLCAnaGVyby5saW5lMycsIGNmZy5oZXJvLmxpbmUzKSArCiAgICAgIGZpZWxkKCfQn9C-0LTQt9Cw0LPQvtC70L7QstC-0LogKNC80L7QttC90L4gJmx0O3N0cm9uZyZndDspJywgJ2hlcm8ubGVkZScsIGNmZy5oZXJvLmxlZGUsICdhcmVhJyk7CiAgICBjZmcuaGVyby5tZXRhLmZvckVhY2goZnVuY3Rpb24gKG0sIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6di1jYXJkIj48aDQ-0KHRgtGA0L7QutCwINGB0L_RgNCw0LLQsCAnICsgKGkgKyAxKSArICc8L2g0PjxkaXYgY2xhc3M9ImF2enYtcm93Ij4nICsKICAgICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0YwnLCAnaGVyby5tZXRhLicgKyBpICsgJy5rZXknLCBtLmtleSkgKwogICAgICAgIGZpZWxkKCfQl9C90LDRh9C10L3QuNC1ICjQvNC-0LbQvdC-ICZsdDtlbSZndDspJywgJ2hlcm8ubWV0YS4nICsgaSArICcudmFsJywgbS52YWwpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCf0KDQmNCX0KvQkiAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2enYtc2VjIj48c3VtbWFyeT7Qn9GA0LjQt9GL0LI8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6di1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnp2LXJvdyI-JyArIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQsiDQu9C10L3RgtC1JywgJ2N0YS5oZWFkJywgY2ZnLmN0YS5oZWFkKSArCiAgICAgIGZpZWxkKCfQndCw0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnY3RhLmV5ZScsIGNmZy5jdGEuZXllKSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviAmbHQ7YnImZ3Q7INC4ICZsdDtlbSZndDspJywgJ2N0YS50aXRsZScsIGNmZy5jdGEudGl0bGUpICsKICAgICAgZmllbGQoJ9Ci0LXQutGB0YIgKNC80L7QttC90L4gJmx0O3N0cm9uZyZndDspJywgJ2N0YS5zdWInLCBjZmcuY3RhLnN1YiwgJ2FyZWEnKTsKICAgIGNmZy5jdGEucGlsbHMuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkgewogICAgICBoICs9IGZpZWxkKCfQnNC10YLQutCwICcgKyAoaSArIDEpLCAnY3RhLnBpbGxzLicgKyBpLCBwKTsKICAgIH0pOwogICAgY2ZnLmN0YS5idXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6di1jYXJkIj48aDQ-0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6di1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQotC10LrRgdGCJywgJ2N0YS5idXR0b25zLicgKyBpICsgJy50ZXh0JywgYi50ZXh0KSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEnLCAnY3RhLmJ1dHRvbnMuJyArIGkgKyAnLmhyZWYnLCBiLmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gZmllbGQoJ9Ch0YLRgNC-0LrQsCDQv9C-0LQg0LrQvdC-0L_QutCw0LzQuCcsICdjdGEuaGludCcsIGNmZy5jdGEuaGludCkgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPC9kaXY-PGRpdiBpZD0iYXZ6di1mb290Ij4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enYtYiBwIiBpZD0iYXZ6di1idWlsZCI-0KHQvtCx0YDQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2enYtYiIgaWQ9ImF2enYtdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAgICc8c3BhbiBpZD0iYXZ6di1tc2ciPjwvc3Bhbj48L2Rpdj4nICsKICAgICAgJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAyMHB4IDE4cHgiPjx0ZXh0YXJlYSBpZD0iYXZ6di1vdXQiIHNwZWxsY2hlY2s9ImZhbHNlIiAnICsKICAgICAgJ3BsYWNlaG9sZGVyPSLQl9C00LXRgdGMINC_0L7Rj9Cy0LjRgtGB0Y8g0LrQvtC0INGB0YLRgNCw0L3QuNGG0YsiPjwvdGV4dGFyZWE-PC9kaXY-PC9kaXY-JzsKCiAgICByb290LmlubmVySFRNTCA9IGg7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnp2LWNsb3NlJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcm9vdC5yZW1vdmUoKTsgfTsKICAgIC8qINCh0LvRg9GI0LDRgtC10LvQuCDQstC10YjQsNC10Lwg0L3QsCDQutC-0YDQtdC90Ywg0L7QtNC40L0g0YDQsNC3OiBzdGFydCgpINCy0YvQt9GL0LLQsNC10YLRgdGPINC30LDQvdC-0LLQvgogICAgICAg0L_RgNC4INC60LDQttC00L7QvCDQtNC-0LHQsNCy0LvQtdC90LjQuCwg0YPQtNCw0LvQtdC90LjQuCDQuCDQv9C10YDQtdGB0YLQsNC90L7QstC60LUg0YDQvtC70LjQutC-0LIsINCwINC60L7RgNC10L3RjAogICAgICAg0L7RgdGC0LDRkdGC0YHRjyDQv9GA0LXQttC90LjQvCDigJQg0LjQvdCw0YfQtSDQvtCx0YDQsNCx0L7RgtGH0LjQutC4INC60L7Qv9C40LvQuNGB0Ywg0LHRiy4gKi8KICAgIGlmICghcm9vdC5kYXRhc2V0LmJvdW5kKSB7CiAgICAgIHJvb3QuZGF0YXNldC5ib3VuZCA9ICcxJzsKICAgICAgYmluZFJvb3QoKTsKICAgIH0KICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2enYtYnVpbGQnKS5vbmNsaWNrID0gYnVpbGQ7CiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnp2LXRlc3QnKS5vbmNsaWNrID0gc2VsZlRlc3Q7CiAgICBjaGVja1Bvc3RlcnMoKTsKICB9CgogIC8qINCe0LHQu9C-0LbQutCwINCy0LXRgNGC0LjQutCw0LvRjNC90LDRjywg0LAg0YDQvtC70LjQuiDRiNC40YDQvtC60LjQuSDigJQg0LrQsNGA0YLQvtGH0LrQsCDQvtCx0YDQtdC20LXRgiDQutCw0YDRgtC40L3QutGDCiAgICAg0L_QviDRhtC10L3RgtGA0YMsINC4INGH0LXQu9C-0LLQtdC6INGD0LLQuNC00LjRgiDRjdGC0L4g0YPQttC1INC90LAg0YHQsNC50YLQtS4g0J_RgNC-0LLQtdGA0Y_QtdC8INGE0L7RgNC80YMKICAgICDQt9Cw0YDQsNC90LXQtSDQuCDQs9C-0LLQvtGA0LjQvCDQvtCxINGN0YLQvtC8INC_0YDRj9C80L4g0LIg0L_QsNC90LXQu9C4LiAqLwogIGZ1bmN0aW9uIGNoZWNrUG9zdGVycygpIHsKICAgIGNmZy53b3Jrcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7CiAgICAgIHZhciBib3ggPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXdhcm49IicgKyBpICsgJyJdJyk7CiAgICAgIGlmICghYm94IHx8ICF2LnBvc3RlcikgcmV0dXJuOwogICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7CiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHNoYXBlID0gaW1nLm5hdHVyYWxXaWR0aCA-IGltZy5uYXR1cmFsSGVpZ2h0ICogMS4wNSA_ICdoJyA6ICd2JzsKICAgICAgICB2YXIgd2FudCA9ICh2LmZtdCA9PT0gJ2gnKSA_ICdoJyA6ICd2JzsKICAgICAgICBib3gudGV4dENvbnRlbnQgPSAoc2hhcGUgPT09IHdhbnQpID8gJycgOgogICAgICAgICAgJ9Ce0LHQu9C-0LbQutCwICcgKyBpbWcubmF0dXJhbFdpZHRoICsgJ1×1MDBkNycgKyBpbWcubmF0dXJhbEhlaWdodCArICcg4oCUICcgKwogICAgICAgICAgKHNoYXBlID09PSAnaCcgPyAn0YjQuNGA0L7QutCw0Y8nIDogJ9Cy0LXRgNGC0LjQutCw0LvRjNC90LDRjycpICsgJywg0LAg0YDQvtC70LjQuiAnICsKICAgICAgICAgICh3YW50ID09PSAnaCcgPyAn0YjQuNGA0L7QutC40LknIDogJ9Cy0LXRgNGC0LjQutCw0LvRjNC90YvQuScpICsgJy4g0J3QsCDQutCw0YDRgtC-0YfQutC1INC10ZEg0L7QsdGA0LXQttC10YIg0L_QviDRhtC10L3RgtGA0YMuJzsKICAgICAgfTsKICAgICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7IGJveC50ZXh0Q29udGVudCA9ICfQntCx0LvQvtC20LrQsCDQvdC1INC-0YLQutGA0YvQstCw0LXRgtGB0Y8g4oCUINC_0YDQvtCy0LXRgNGM0YLQtSDQsNC00YDQtdGBLic7IH07CiAgICAgIGltZy5zcmMgPSB2LnBvc3RlcjsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYmluZFJvb3QoKSB7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHAgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIXApIHJldHVybjsKICAgICAgdmFyIHByZXYgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2ltZ1tkYXRhLXByZXY9IicgKyBwICsgJyJdJyk7CiAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGUudGFyZ2V0LnZhbHVlOwogICAgfSk7CiAgICAvKiDQktGB0YLQsNCy0LjQu9C4INCw0LTRgNC10YEg0L3QvtCy0L7Qs9C-INGA0L7Qu9C40LrQsCDigJQg0L_QsNC90LXQu9GMINGB0LDQvNCwINGH0LjRgtCw0LXRgiDRgyDRhNCw0LnQu9CwINGE0L7RgNC80LDRggogICAgICAg0Lgg0LTQu9C40YLQtdC70YzQvdC-0YHRgtGMLiDQmNC90LDRh9C1INC40YUg0L_RgNC40YjQu9C-0YHRjCDQsdGLINCy0YvRj9GB0L3Rj9GC0Ywg0L3QsCDRgdGC0L7RgNC-0L3QtSwg0LAKICAgICAgINC-0YjQuNCx0LrQsCDQsiDRhNC-0YDQvNCw0YLQtSDQv9C10YDQtdC60LvQsNC00YvQstCw0LXRgiDQu9C10L3RgtGDINGDINC60LDQttC00L7Qs9C-INC_0L7RgdC10YLQuNGC0LXQu9GPLiAqLwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkgewogICAgICB2YXIgcGF0aCA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIXBhdGggfHwgIS9ed29ya3NcLml0ZW1zXC5cZCtcLnVybCQvLnRlc3QocGF0aCkpIHJldHVybjsKICAgICAgdmFyIHVybCA9IGNsZWFuKGUudGFyZ2V0LnZhbHVlKS50cmltKCk7CiAgICAgIGlmICghdXJsKSByZXR1cm47CiAgICAgIHZhciBpID0gcGF0aC5zcGxpdCgnLicpWzJdOwogICAgICB2YXIgaHVtYW4gPSAn0KDQvtC70LjQuiAnICsgKHBhcnNlSW50KGksIDEwKSArIDEpOwogICAgICBtc2coaHVtYW4gKyAnOiDRh9C40YLQsNGOINGE0L7RgNC80LDRgiDQuCDQtNC70LjRgtC10LvRjNC90L7RgdGC0YzigKYnKTsKICAgICAgdmFyIHByb2JlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsKICAgICAgcHJvYmUucHJlbG9hZCA9ICdtZXRhZGF0YSc7CiAgICAgIHByb2JlLm11dGVkID0gdHJ1ZTsKICAgICAgcHJvYmUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHcgPSBwcm9iZS52aWRlb1dpZHRoLCBoID0gcHJvYmUudmlkZW9IZWlnaHQ7CiAgICAgICAgdmFyIHNlYyA9IGlzRmluaXRlKHByb2JlLmR1cmF0aW9uKSA_IE1hdGgucm91bmQocHJvYmUuZHVyYXRpb24pIDogMDsKICAgICAgICB2YXIgZm10ID0gKHcgPiBoICogMS4wNSkgPyAnaCcgOiAndic7CiAgICAgICAgdmFyIHNlbCA9IHJvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtcD0id29ya3MuaXRlbXMuJyArIGkgKyAnLmZtdCJdJyk7CiAgICAgICAgdmFyIGR1ciA9IHJvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtcD0id29ya3MuaXRlbXMuJyArIGkgKyAnLmR1ciJdJyk7CiAgICAgICAgaWYgKHNlbCkgeyBzZWwudmFsdWUgPSBmbXQ7IHNldFBhdGgoY2ZnLCAnd29ya3MuaXRlbXMuJyArIGkgKyAnLmZtdCcsIGZtdCk7IH0KICAgICAgICBpZiAoZHVyICYmICFkdXIudmFsdWUgJiYgc2VjKSB7IGR1ci52YWx1ZSA9IFN0cmluZyhzZWMpOyBzZXRQYXRoKGNmZywgJ3dvcmtzLml0ZW1zLicgKyBpICsgJy5kdXInLCBTdHJpbmcoc2VjKSk7IH0KICAgICAgICBwcm9iZS5yZW1vdmVBdHRyaWJ1dGUoJ3NyYycpOwogICAgICAgIG1zZyhodW1hbiArICc6ICcgKyB3ICsgJ1×1MDBkNycgKyBoICsgJywgJyArIHNlYyArICcg0YEg4oCUINGE0L7RgNC80LDRgiDQuCDQtNC70LjRgtC10LvRjNC90L7RgdGC0Ywg0L_QvtC00YHRgtCw0LLQu9C10L3Riy4nKTsKICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pOwogICAgICBwcm9iZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uICgpIHsKICAgICAgICBwcm9iZS5yZW1vdmVBdHRyaWJ1dGUoJ3NyYycpOwogICAgICAgIG1zZyhodW1hbiArICc6INGE0LDQudC7INC90LUg0L7RgtC60YDRi9C70YHRjy4g0J_RgNC-0LLQtdGA0YzRgtC1INCw0LTRgNC10YEg4oCUINGE0L7RgNC80LDRgiDQuCDQtNC70LjRgtC10LvRjNC90L7RgdGC0Ywg0LLQv9C40YjQuNGC0LUg0YHQsNC80LguJyk7CiAgICAgIH0sIHsgb25jZTogdHJ1ZSB9KTsKICAgICAgcHJvYmUuc3JjID0gdXJsOwogICAgfSk7CgogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBiID0gZS50YXJnZXQuY2xvc2VzdCA_IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFjdF0nKSA6IG51bGw7CiAgICAgIGlmICghYiB8fCAhcm9vdC5jb250YWlucyhiKSkgcmV0dXJuOwogICAgICB2YXIgYWN0ID0gYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0Jyk7CiAgICAgIHZhciBpID0gcGFyc2VJbnQoYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaScpLCAxMCk7CiAgICAgIHZhciBpdGVtcyA9IGNmZy53b3Jrcy5pdGVtczsKICAgICAgLyog0LfQvdCw0YfQtdC90LjRjyDQuNC3INC_0L7Qu9C10Lkg0LfQsNCx0LjRgNCw0LXQvCDQlNCeINC_0LXRgNC10YHRgtCw0L3QvtCy0LrQuDog0LjQvdCw0YfQtSDQv9GA0LDQstC60LgsCiAgICAgICAgINGB0LTQtdC70LDQvdC90YvQtSDQtNC-INC90LDQttCw0YLQuNGPLCDQv9C-0YLQtdGA0Y_RjtGC0YHRjyDQstC80LXRgdGC0LUg0YEg0L_QtdGA0LXRgNC40YHQvtCy0LrQvtC5ICovCiAgICAgIGhhcnZlc3QoKTsKICAgICAgaWYgKGFjdCA9PT0gJ2FkZCcpIHsKICAgICAgICBpdGVtcy5wdXNoKHsKICAgICAgICAgIHVybDogJycsIHRpdGxlOiAnJywgc3ViOiAnJywgYWx0OiAnJywKICAgICAgICAgIHNlb05hbWU6ICcnLCBzZW9EZXNjOiAnJywgcG9zdGVyOiAnJywKICAgICAgICAgIGZtdDogJ3YnLCBkdXI6ICcnLAogICAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKSwKICAgICAgICAgIGluU2NoZW1hOiBmYWxzZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGFjdCA9PT0gJ2RlbCcpIHsKICAgICAgICB2YXIgd2hhdCA9IGl0ZW1zW2ldLnRpdGxlIHx8IGl0ZW1zW2ldLnNlb05hbWUgfHwgJ9Cx0LXQtyDQuNC80LXQvdC4JzsKICAgICAgICBpZiAoIWNvbmZpcm0oJ9Cj0LHRgNCw0YLRjCDRgNC-0LvQuNC6IMKrJyArIHdoYXQgKyAnwrsg0YHQviDRgdGC0YDQsNC90LjRhtGLPycpKSByZXR1cm47CiAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEpOwogICAgICB9IGVsc2UgaWYgKGFjdCA9PT0gJ3VwJyAmJiBpID4gMCkgewogICAgICAgIGl0ZW1zLnNwbGljZShpIC0gMSwgMCwgaXRlbXMuc3BsaWNlKGksIDEpWzBdKTsKICAgICAgfSBlbHNlIGlmIChhY3QgPT09ICdkb3duJyAmJiBpIDwgaXRlbXMubGVuZ3RoIC0gMSkgewogICAgICAgIGl0ZW1zLnNwbGljZShpICsgMSwgMCwgaXRlbXMuc3BsaWNlKGksIDEpWzBdKTsKICAgICAgfSBlbHNlIHJldHVybjsKICAgICAgc3RhcnQoKTsKICAgICAgaWYgKGFjdCA9PT0gJ2FkZCcpIHsKICAgICAgICB2YXIgY2FyZHMgPSBhbGwocm9vdCwgJy5hdnp2LWNhcmQnKTsKICAgICAgICB2YXIgbGFzdENhcmQgPSBjYXJkc1tpdGVtcy5sZW5ndGggLSAxXTsKICAgICAgICBpZiAobGFzdENhcmQpIGxhc3RDYXJkLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInIH0pOwogICAgICAgIHZhciB1cmwgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IndvcmtzLml0ZW1zLicgKyAoaXRlbXMubGVuZ3RoIC0gMSkgKyAnLnVybCJdJyk7CiAgICAgICAgaWYgKHVybCkgdXJsLmZvY3VzKCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRgdCx0L7RgCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKSwgbyA9IG9iaiwgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BhcnRzW2ldXTsKICAgIG9bcGFydHNbcGFydHMubGVuZ3RoIC0gMV1dID0gdmFsOwogIH0KICAvKiDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0LbQtSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1INGB0YLRgNC-0LrQuAogICAgINC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsgKFUrMjAwQiDQuCDRgNC-0LTQvdGPKS4g0JIg0YLQtdC60YHRgtC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDQstC40LTQtdC-0YTQsNC50LvQsCDQvtC90Lgg0L_RgNC10LLRgNCw0YnQsNGO0YIg0YHRgdGL0LvQutGDINCyINC90LXRgNCw0LHQvtGH0YPRjjog0LHRgNCw0YPQt9C10YAKICAgICDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssINC-0LHQu9C-0LbQutCwINC90LUg0L_QvtGP0LLQu9GP0LXRgtGB0Y8sINGE0L7RgNC80LDRgiDQvtGB0YLQsNGR0YLRgdGPCiAgICAg0LLQtdGA0YLQuNC60LDQu9GM0L3Ri9C8INC_0L4g0YPQvNC-0LvRh9Cw0L3QuNGOINC4INGA0L7Qu9C40Log0L3QtSDQv9GA0L7QuNCz0YDRi9Cy0LDQtdGC0YHRjy4KICAgICDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMINC90LXRh9C10LPQviDigJQg0LLRi9GA0LXQt9Cw0LXQvCDQstC10LfQtNC1LiAqLwogIHZhciBaRVJPX1dJRFRIID0gL1tcdTIwMEItXHUyMDBEXHUyMDYwXHVGRUZGXS9nOwoKICBmdW5jdGlvbiBjbGVhbih2KSB7CiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdi5yZXBsYWNlKFpFUk9fV0lEVEgsICcnKSA6IHY7CiAgfQoKICBmdW5jdGlvbiBoYXJ2ZXN0KCkgewogICAgdmFyIGZpeGVkID0gMDsKICAgIGFsbChyb290LCAnW2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgewogICAgICB2YXIgdiA9IGNsZWFuKGVsLnZhbHVlKTsKICAgICAgaWYgKHYgIT09IGVsLnZhbHVlKSB7IGZpeGVkKys7IGVsLnZhbHVlID0gdjsgfQogICAgICBzZXRQYXRoKGNmZywgZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKSwgdik7CiAgICB9KTsKICAgIHJldHVybiBmaXhlZDsKICB9CgogIC8qIC0tLS0tLS0tLS0g0LfQsNC_0LjRgdGMIC0tLS0tLS0tLS0gKi8KCiAgLyog0J_QtdGA0LXQv9C40YHRi9Cy0LDQtdC8INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0YLQtdC60YHRgiDRjdC70LXQvNC10L3RgtCwLCDQvdC1INGC0YDQvtCz0LDRjyDQstC70L7QttC10L3QvdGL0LUKICAgICDQt9C90LDRh9C60Lgg0Lgg0LjRhSDQv9C-0YDRj9C00L7Qui4g0J_QuNGI0LXQvCDQsiDRgtC-0YIg0YLQtdC60YHRgtC-0LLRi9C5INGD0LfQtdC7LCDQs9C00LUg0YLQtdC60YHRggogICAgINC00LXQudGB0YLQstC40YLQtdC70YzQvdC-INC10YHRgtGMLCDQsCDQvdC1INCyINC_0LXRgNCy0YvQuSDQv9C-0L_QsNCy0YjQuNC50YHRjzog0LIg0YDQsNC30LzQtdGC0LrQtSDQstC40LTQsAogICAgIGA8c3BhbiBjbGFzcz0iaWNvbiI-c3dpcGU8L3NwYW4-INC_0L7QtNC_0LjRgdGMYCDQv9C10YDQstGL0Lkg0YPQt9C10Lsg4oCUINGN0YLQvgogICAgINC-0YLRgdGC0YPQvyDQv9C10YDQtdC0INC30L3QsNGH0LrQvtC8LCDQuCDQt9Cw0L_QuNGB0Ywg0LIg0L3QtdCz0L4g0L_QtdGA0LXQsdGA0LDRgdGL0LLQsNC70LAg0L_QvtC00L_QuNGB0YwKICAgICDQstC_0LXRgNGR0LQg0LfQvdCw0YfQutCwLiAqLwogIGZ1bmN0aW9uIHNldFRleHQoZWwsIHYpIHsKICAgIGlmICghZWwgfHwgdHlwZW9mIHYgIT09ICdzdHJpbmcnKSByZXR1cm47CiAgICB2YXIgdGV4dHMgPSBbXSwgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB0ZXh0cy5wdXNoKGVsLmNoaWxkTm9kZXNbaV0pOwogICAgfQogICAgaWYgKCF0ZXh0cy5sZW5ndGgpIHsgZWwuYXBwZW5kQ2hpbGQoZWwub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2KSk7IHJldHVybjsgfQogICAgdmFyIG1haW4gPSBudWxsOwogICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXh0c1tpXS5ub2RlVmFsdWUudHJpbSgpICE9PSAnJykgeyBtYWluID0gdGV4dHNbaV07IGJyZWFrOyB9CiAgICB9CiAgICBpZiAoIW1haW4pIG1haW4gPSB0ZXh0c1swXTsKICAgIHZhciByYXcgPSBtYWluLm5vZGVWYWx1ZTsKICAgIHZhciBwcmUgPSAocmF3Lm1hdGNoKC9eXHMqLykgfHwgWycnXSlbMF07CiAgICB2YXIgcG9zdCA9IChyYXcubWF0Y2goL1xzKiQvKSB8fCBbJyddKVswXTsKICAgIGlmIChyYXcudHJpbSgpID09PSAnJykgeyBwcmUgPSAnJzsgcG9zdCA9ICcnOyB9CiAgICBtYWluLm5vZGVWYWx1ZSA9IHByZSArIHYgKyBwb3N0OwogICAgZm9yIChpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXh0c1tpXSAhPT0gbWFpbiAmJiB0ZXh0c1tpXS5ub2RlVmFsdWUudHJpbSgpICE9PSAnJykgewogICAgICAgIHRleHRzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGV4dHNbaV0pOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIHNldFBsYWluKGVsLCB2KSB7IGlmIChlbCAmJiB0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGVsLnRleHRDb250ZW50ID0gdjsgfQogIGZ1bmN0aW9uIHNldEh0bWwoZWwsIHYpIHsgaWYgKGVsICYmIHR5cGVvZiB2ID09PSAnc3RyaW5nJykgZWwuaW5uZXJIVE1MID0gdjsgfQoKICBmdW5jdGlvbiB3cml0ZUFsbChzY29wZSwgZCkgewogICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaGVyby1leWUnKSwgZC5oZXJvLmV5ZSk7CiAgICB2YXIgbGluZXMgPSBhbGwoc2NvcGUsICcuZGlzcGxheSAuaW5uZXInKTsKICAgIHNldFBsYWluKGxpbmVzWzBdLCBkLmhlcm8ubGluZTEpOwogICAgc2V0UGxhaW4obGluZXNbMV0sIGQuaGVyby5saW5lMik7CiAgICBpZiAobGluZXNbMl0pIHNldFBsYWluKG9uZShsaW5lc1syXSwgJ2VtJykgfHwgbGluZXNbMl0sIGQuaGVyby5saW5lMyk7CiAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5sZWRlJyksIGQuaGVyby5sZWRlKTsKICAgIGFsbChzY29wZSwgJy5oZXJvLW1ldGEgPiBkaXYnKS5mb3JFYWNoKGZ1bmN0aW9uIChkdiwgaSkgewogICAgICB2YXIgbSA9IGQuaGVyby5tZXRhW2ldOyBpZiAoIW0pIHJldHVybjsKICAgICAgc2V0UGxhaW4ob25lKGR2LCAnLmhtLWtleScpLCBtLmtleSk7CiAgICAgIHNldEh0bWwob25lKGR2LCAnLmhtLXZhbCcpLCBtLnZhbCk7CiAgICB9KTsKCiAgICB2YXIgbGFiZWxzID0gYWxsKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwnKTsKICAgIHNldFBsYWluKG9uZShsYWJlbHNbMF0sICdoMicpLCBkLndvcmtzLmhlYWQpOwogICAgc2V0VGV4dChvbmUobGFiZWxzWzBdLCAnLnNsLWFzaWRlJyksIGQud29ya3MuYXNpZGUpOwogICAgc2V0VGV4dChvbmUoc2NvcGUsICcuc2Nyb2xsLWhpbnQnKSwgZC53b3Jrcy5oaW50KTsKCiAgICBzZXRQbGFpbihvbmUobGFiZWxzWzFdLCAnaDInKSwgZC5jdGEuaGVhZCk7CiAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5jdGEtZXllJyksIGQuY3RhLmV5ZSk7CiAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5jdGEtdGl0bGUnKSwgZC5jdGEudGl0bGUpOwogICAgc2V0SHRtbChvbmUoc2NvcGUsICcuY3RhLXN1YicpLCBkLmN0YS5zdWIpOwogICAgYWxsKHNjb3BlLCAnLmN0YS1waWxsJykuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkgewogICAgICBpZiAodHlwZW9mIGQuY3RhLnBpbGxzW2ldID09PSAnc3RyaW5nJykgc2V0VGV4dChwLCBkLmN0YS5waWxsc1tpXSk7CiAgICB9KTsKICAgIGFsbChzY29wZSwgJy5idG4nKS5mb3JFYWNoKGZ1bmN0aW9uIChiLCBpKSB7CiAgICAgIHZhciBzID0gZC5jdGEuYnV0dG9uc1tpXTsgaWYgKCFzKSByZXR1cm47CiAgICAgIGlmIChzLmhyZWYpIGIuc2V0QXR0cmlidXRlKCdocmVmJywgcy5ocmVmKTsKICAgICAgYWxsKGIsICcuYnRuLWxhYmVsID4gc3BhbicpLmZvckVhY2goZnVuY3Rpb24gKHgpIHsgc2V0UGxhaW4oeCwgcy50ZXh0KTsgfSk7CiAgICB9KTsKICAgIHNldFBsYWluKG9uZShzY29wZSwgJy5jdGEtaGludCcpLCBkLmN0YS5oaW50KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0YsgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiBqc1N0cihzKSB7IHJldHVybiAiJyIgKyBTdHJpbmcocykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsgfQoKICBmdW5jdGlvbiBwYXRjaFNjcmlwdChzcmMsIGQpIHsKICAgIHZhciBtaXNzZWQgPSBbXTsKICAgIGlmICghL3ZhciB2aWRlb3MgPSBcWy8udGVzdChzcmMpKSB7IG1pc3NlZC5wdXNoKCfRgdC_0LjRgdC-0Log0YDQvtC70LjQutC-0LInKTsgcmV0dXJuIHsgdGV4dDogc3JjLCBtaXNzZWQ6IG1pc3NlZCB9OyB9CiAgICB2YXIgYm9keSA9IGQud29ya3MuaXRlbXMubWFwKGZ1bmN0aW9uICh2KSB7CiAgICAgIHJldHVybiAnICAgIHsgdXJsOicgKyBqc1N0cih2LnVybCkgKyAnLCB0aXRsZTonICsganNTdHIodi50aXRsZSkgKwogICAgICAgICAgICAgJywgc3ViOicgKyBqc1N0cih2LnN1YikgKyAnLCBhbHQ6JyArIGpzU3RyKHYuYWx0KSArICcsXG4nICsKICAgICAgICAgICAgICcgICAgICBwb3N0ZXI6JyArIGpzU3RyKHYucG9zdGVyIHx8ICcnKSArCiAgICAgICAgICAgICAnLCBmbXQ6JyArIGpzU3RyKHYuZm10ID09PSAnaCcgPyAnaCcgOiAndicpICsgJyB9JzsKICAgIH0pLmpvaW4oJyxcbicpOwogICAgdmFyIG91dCA9IHNyYy5yZXBsYWNlKC92YXIgdmlkZW9zID0gXFtbXHNcU10qP1xuXHMqXF07LywgJ3ZhciB2aWRlb3MgPSBbXG4nICsgYm9keSArICdcbiAgXTsnKTsKICAgIHJldHVybiB7IHRleHQ6IG91dCwgbWlzc2VkOiBtaXNzZWQgfTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIGJ1aWxkTGQoZG9jLCBkKSB7CiAgICB2YXIgcyA9IG9uZShkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJyk7CiAgICBpZiAoIXMpIHJldHVybiB7IHRleHQ6IG51bGwsIGVycjogJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCIGxkK2pzb24nIH07CiAgICB2YXIgbzsKICAgIHRyeSB7IG8gPSBKU09OLnBhcnNlKHMudGV4dENvbnRlbnQpOyB9CiAgICBjYXRjaCAoZSkgeyByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICdsZCtqc29uINC90LUg0YfQuNGC0LDQtdGC0YHRjzogJyArIGUubWVzc2FnZSB9OyB9CgogICAgdmFyIGcgPSBvWydAZ3JhcGgnXSB8fCBbXTsKICAgIHN5bmNDYW5vbihnKTsKICAgIHZhciBiYXNlID0gJ2h0dHBzOi8vYXZhbnphdG8ucnUvdmlkZW9fc2hvb3Rpbmdfa2F6YW4nOwoKICAgIC8qINC_0YDQtdC20L3QuNC1INGD0LfQu9GLINGA0L7Qu9C40LrQvtCyIOKAlCDRh9GC0L7QsdGLINC90LUg0YLQtdGA0Y_RgtGMINGC0L4sINGH0LXQs9C-INC90LXRgiDQsiDRhNC-0YDQvNC1ICovCiAgICB2YXIgb2xkID0ge307CiAgICBnLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgaWYgKG5bJ0B0eXBlJ10gPT09ICdWaWRlb09iamVjdCcgJiYgbi5jb250ZW50VXJsKSBvbGRbbi5jb250ZW50VXJsXSA9IG47IH0pOwoKICAgIHZhciBrZWVwID0gZy5maWx0ZXIoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG5bJ0B0eXBlJ10gIT09ICdWaWRlb09iamVjdCc7IH0pOwoKICAgIHZhciBtYWRlID0gW10sIHJlZnMgPSBbXTsKICAgIGQud29ya3MuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkgewogICAgICBpZiAoIXYuc2VvTmFtZSAmJiAhdi5zZW9EZXNjICYmICF2LnBvc3RlcikgcmV0dXJuOyAgLyog0YHQvtCy0YHQtdC8INC_0YPRgdGC0L7QuSDigJQg0L3QtSDQstGL0LTRg9C80YvQstCw0LXQvCAqLwogICAgICB2YXIgd2FzID0gb2xkW3YudXJsXSB8fCB7fTsKICAgICAgdmFyIGlkID0gYmFzZSArICcjdmlkZW8tJyArIChpICsgMSk7CiAgICAgIHZhciBub2RlID0gewogICAgICAgICdAdHlwZSc6ICdWaWRlb09iamVjdCcsCiAgICAgICAgJ0BpZCc6IGlkLAogICAgICAgIG5hbWU6IHYuc2VvTmFtZSB8fCB2LnRpdGxlLAogICAgICAgIGRlc2NyaXB0aW9uOiB2LnNlb0Rlc2MgfHwgJycsCiAgICAgICAgY29udGVudFVybDogdi51cmwsCiAgICAgICAgaW5MYW5ndWFnZTogd2FzLmluTGFuZ3VhZ2UgfHwgJ3J1LVJVJywKICAgICAgICBhdXRob3I6IHdhcy5hdXRob3IgfHwgeyAnQGlkJzogJ2h0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlcicgfQogICAgICB9OwogICAgICBpZiAodi5wb3N0ZXIpIG5vZGUudGh1bWJuYWlsVXJsID0gdi5wb3N0ZXI7CiAgICAgIC8qINC00LDRgtGDINC4INC00LvQuNGC0LXQu9GM0L3QvtGB0YLRjCDQvdC1INC_0YDQuNC00YPQvNGL0LLQsNC10Lw6INC90LXRgiDigJQg0LfQvdCw0YfQuNGCINC90LXRgiDQv9C-0LvRjyAqLwogICAgICBpZiAodi5kYXRlKSBub2RlLnVwbG9hZERhdGUgPSB2LmRhdGU7CiAgICAgIHZhciBpc28gPSBzZWNUb0lzbyh2LmR1cik7CiAgICAgIGlmIChpc28pIG5vZGUuZHVyYXRpb24gPSBpc287CiAgICAgIG1hZGUucHVzaChub2RlKTsKICAgICAgcmVmcy5wdXNoKHsgJ0BpZCc6IGlkIH0pOwogICAgfSk7CgogICAgdmFyIHBhZ2UgPSBrZWVwLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnOyB9KVswXTsKICAgIGlmIChwYWdlKSB7CiAgICAgIHBhZ2UuZGF0ZU1vZGlmaWVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKICAgICAgaWYgKHJlZnMubGVuZ3RoKSBwYWdlLnZpZGVvID0gcmVmczsgZWxzZSBkZWxldGUgcGFnZS52aWRlbzsKICAgICAgaWYgKGQubWV0YS5uYW1lKSBwYWdlLm5hbWUgPSBkLm1ldGEubmFtZTsKICAgICAgaWYgKGQubWV0YS5kZXNjKSBwYWdlLmRlc2NyaXB0aW9uID0gZC5tZXRhLmRlc2M7CiAgICB9CgogICAgLyog0YDQvtC70LjQutC4INGB0YLQsNCy0LjQvCDQv9C10YDQtdC0INGF0LvQtdCx0L3Ri9C80Lgg0LrRgNC-0YjQutCw0LzQuCDigJQg0LrQsNC6INCx0YvQu9C-ICovCiAgICB2YXIgYmNJbmRleCA9IGtlZXAubGVuZ3RoOwogICAgZm9yICh2YXIgayA9IDA7IGsgPCBrZWVwLmxlbmd0aDsgaysrKSB7CiAgICAgIGlmIChrZWVwW2tdWydAdHlwZSddID09PSAnQnJlYWRjcnVtYkxpc3QnKSB7IGJjSW5kZXggPSBrOyBicmVhazsgfQogICAgfQogICAgb1snQGdyYXBoJ10gPSBrZWVwLnNsaWNlKDAsIGJjSW5kZXgpLmNvbmNhdChtYWRlLCBrZWVwLnNsaWNlKGJjSW5kZXgpKTsKCiAgICByZXR1cm4geyB0ZXh0OiBKU09OLnN0cmluZ2lmeShvLCBudWxsLCAyKSwgZXJyOiBudWxsIH07CiAgfQoKICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIGNvbW1lbnRzKGRvYykgewogICAgdmFyIG91dCA9IFtdLCB3ID0gZG9jLmNyZWF0ZVRyZWVXYWxrZXIoZG9jLmJvZHksIDEyOCwgbnVsbCwgZmFsc2UpLCBuOwogICAgd2hpbGUgKChuID0gdy5uZXh0Tm9kZSgpKSkgewogICAgICB2YXIgdiA9IG4ubm9kZVZhbHVlIHx8ICcnOwogICAgICBpZiAodi5pbmRleE9mKCdBVkFOWkFUTy5SVScpID4gLTEpIHsgb3V0LnB1c2goJzwhLS0nICsgdiArICctLT4nKTsgb3V0LnB1c2goJycpOyBicmVhazsgfQogICAgfQogICAgcmV0dXJuIG91dDsKICB9CgogIGZ1bmN0aW9uIGFzc2VtYmxlKGQpIHsKICAgIHJldHVybiBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICB2YXIgc2NvcGUgPSBkb2MucXVlcnlTZWxlY3RvcignLmF2LXZpZGVvcycpOwogICAgICB2YXIgc3R5bGUgPSBhbGwoZG9jLCAnc3R5bGUnKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2LXZpZGVvcyAudmNhcmQnKSA-IC0xOyB9KVswXTsKICAgICAgdmFyIHNjcmlwdCA9IGFsbChkb2MsICdzY3JpcHQ6bm90KFt0eXBlXSknKS5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZigndmFyIHZpZGVvcyA9IFsnKSA-IC0xOyB9KVswXTsKICAgICAgLyog0KHRgdGL0LvQvtC6INC90LAg0YjRgNC40YTRgtGLINCyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGB0LrQvtC70YzQutC-LCDQuCDQv9C10YDQstCw0Y8g0LjQtyDQvdC40YUg4oCUCiAgICAgICAgINC90LUg0L3QsNGI0LA6INC10ZEg0YHRgtCw0LLQuNGCINGC0LXQvNCwIHdmb2xpbyAo0YHQstC-0Lgg0L3QsNGH0LXRgNGC0LDQvdC40Y8gSm9zdCDQuCBSdWJpaywKICAgICAgICAg0LHQtdC3INGI0YDQuNGE0YLQsCDQt9C90LDRh9C60L7QsikuINCg0LDQvdGM0YjQtSDQsdGA0LDQu9Cw0YHRjCDQuNC80LXQvdC90L4g0L7QvdCwLCDQuCDQsdC70L7QuiDRgtC10YDRj9C7CiAgICAgICAgIE1hdGVyaWFsIFN5bWJvbHMg4oCUINC30L3QsNGH0LrQuCDQv9GA0LXQstGA0LDRidCw0LvQuNGB0Ywg0LIg0YHQu9C-0LLQsCDQstGA0L7QtNC1CiAgICAgICAgIMKrY3JvcF9wb3J0cmFpdMK7LiDQodCy0L7RjyDRgdGB0YvQu9C60LAg0YPQt9C90LDRkdGC0YHRjyDQv9C-INGI0YDQuNGE0YLRgyDQt9C90LDRh9C60L7Qsi4gKi8KICAgICAgdmFyIGZvbnRMaW5rID0gYWxsKGRvYywgJ2xpbmtbaHJlZio9ImNzczI_ZmFtaWx5PSJdJykuZmlsdGVyKGZ1bmN0aW9uIChsKSB7CiAgICAgICAgcmV0dXJuIChsLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnKS5pbmRleE9mKCdNYXRlcmlhbCtTeW1ib2xzJykgPiAtMTsKICAgICAgfSlbMF07CiAgICAgIHZhciBmb250UmVzdG9yZWQgPSBmYWxzZTsKICAgICAgaWYgKCFmb250TGluaykgeyBmb250UmVzdG9yZWQgPSB0cnVlOyB9CgogICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICBpZiAoIXNjb3BlKSBtaXNzaW5nLnB1c2goJ9Cx0LvQvtC6IC5hdi12aWRlb3MnKTsKICAgICAgaWYgKCFzdHlsZSkgbWlzc2luZy5wdXNoKCc8c3R5bGU-INGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgaWYgKCFzY3JpcHQpIG1pc3NpbmcucHVzaCgnPHNjcmlwdD4g0YHRgtGA0LDQvdC40YbRiycpOwogICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgdmFyIHNjID0gcGF0Y2hTY3JpcHQoc2NyaXB0LnRleHRDb250ZW50LCBkKTsKICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIGQpOwogICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwoKICAgICAgLyog0J3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1IGxkK2pzb24g0YHRgtC-0LjRgiDQn9CV0KDQldCUINGB0YLQuNC70Y_QvNC4IOKAlCDRgdC-0YXRgNCw0L3Rj9C10Lwg0L_QvtGA0Y_QtNC-0LogKi8KICAgICAgdmFyIHRleHQgPSBjb21tZW50cyhkb2MpLmNvbmNhdChbCiAgICAgICAgLyogdjI6INGI0YDQuNGE0YLRiyDQuCDQt9C90LDRh9C60Lgg0LLRiNC40YLRiyDQsiDRgdGC0LjQu9GMINGB0YLRgNCw0L3QuNGG0Ysg4oCUINGB0YHRi9C70L7QuiDQvdCwIEdvb2dsZSDQvdC10YIgKi8KICAgICAgICAnPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2kud2ZvbGlvLnJ1Ij4nLAogICAgICAgICcnLAogICAgICAgICc8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPicsCiAgICAgICAgbGQudGV4dCwKICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICcnLAogICAgICAgIHN0eWxlLm91dGVySFRNTCwKICAgICAgICAnJywKICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgJycsCiAgICAgICAgJzxzY3JpcHQ-JywKICAgICAgICBzYy50ZXh0LAogICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgXSkuam9pbignXG4nKTsKCiAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIG1pc3NlZDogc2MubWlzc2VkIH07CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGNvcHkodGV4dCwgbm90ZSkgewogICAgLyog0J_QvtGB0LvQtdC00L3Rj9GPINGH0LXRgNGC0LA6INC90LXQstC40LTQuNC80YvQtSDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg0L3QtSDQtNC-0LvQttC90Ysg0L_QvtC_0LDRgdGC0YwKICAgICAgINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINC00LDQttC1INC40Lcg0YLQtdGFINC60YPRgdC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L_QsNC90LXQu9GMINC60L7Qv9C40YDRg9C10YIKICAgICAgINC00L7RgdC70L7QstC90L4g4oCUINC40Lcg0YHRgtC40LvQtdC5LCDRgdC60YDQuNC_0YLQsCDQuCDRgNCw0LfQvNC10YLQutC4INCy0L3QtSDQv9C-0LvQtdC5LiDQotGD0LTQsCDQuNGFCiAgICAgICDQvNC-0LMg0LfQsNC90LXRgdGC0Lgg0YDQtdC00LDQutGC0L7RgCB3Zm9saW8sINC80LjQvdGD0Y8g0L_QvtC70Y8g0L_QsNC90LXQu9C4LiAqLwogICAgdGV4dCA9IFN0cmluZyh0ZXh0KS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgdmFyIHRhID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6di1vdXQnKTsKICAgIHRhLnZhbHVlID0gdGV4dDsgdGEuc2VsZWN0KCk7CiAgICB2YXIgb2sgPSBmYWxzZTsKICAgIHRyeSB7IG9rID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaCAoZSkge30KICAgIGlmIChvaykgeyBtc2cobm90ZSk7IHJldHVybjsgfQogICAgICAvKiDQn9GA0LXQtNGD0L_RgNC10LbQtNC10L3QuNGPINC90LXQu9GM0LfRjyDRgtC10YDRj9GC0Ywg0LLQvNC10YHRgtC1INGBINGB0L7QvtCx0YnQtdC90LjQtdC8INC-0LEg0YPRgdC_0LXRhdC1OgogICAgICAgICDQtdGB0LvQuCDQsdGD0YTQtdGAINC90LUg0YHRgNCw0LHQvtGC0LDQuywg0YfQtdC70L7QstC10Log0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQtdC9INC40YUg0YPQstC40LTQtdGC0YwuICovCiAgICAgIHZhciBtYW51YWwgPSAn0JLRi9C00LXQu9C40YLQtSDRgtC10LrRgdGCINC90LjQttC1INC4INGB0LrQvtC_0LjRgNGD0LnRgtC1INCy0YDRg9GH0L3Rg9GOIChDbWQrQykuICc7CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7CiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkudGhlbihmdW5jdGlvbiAoKSB7IG1zZyhub3RlKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyBub3RlKTsgfQogIH0KCiAgZnVuY3Rpb24gYnVpbGQoKSB7CiAgICB2YXIgY2xlYW5lZCA9IGhhcnZlc3QoKTsKICAgIC8qINCf0YPRgdGC0L7QuSDQsNC00YDQtdGBIOKAlCDRjdGC0L4g0LrQsNGA0YLQvtGH0LrQsCwg0LrQvtGC0L7RgNCw0Y8g0L3QsCDRgdGC0YDQsNC90LjRhtC1INGB0LvQvtC80LDQtdGCINC70LXQvdGC0YMuCiAgICAgICDQm9GD0YfRiNC1INC-0YHRgtCw0L3QvtCy0LjRgtGM0YHRjyDQt9C00LXRgdGMLCDRh9C10Lwg0L7RgtC00LDRgtGMINCx0LjRgtGL0Lkg0LrQvtC0INCyINC60L7QvdGB0YLRgNGD0LrRgtC-0YAuICovCiAgICB2YXIgYmxhbmsgPSBbXTsKICAgIGNmZy53b3Jrcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7CiAgICAgIGlmICghU3RyaW5nKHYudXJsKS50cmltKCkpIGJsYW5rLnB1c2goaSArIDEpOwogICAgfSk7CiAgICBpZiAoYmxhbmsubGVuZ3RoKSB7CiAgICAgIG1zZygn0J3QtSDRgdC-0LHRgNCw0L3Qvjog0L3QtSDQt9Cw0L_QvtC70L3QtdC9INCw0LTRgNC10YEg0LLQuNC00LXQvtGE0LDQudC70LAg0YMg0YDQvtC70LjQutC-0LIgJyArIGJsYW5rLmpvaW4oJywgJykgKwogICAgICAgICAgJy4g0JLQv9C40YjQuNGC0LUg0LDQtNGA0LXRgSDQuNC70Lgg0YPQtNCw0LvQuNGC0LUg0LrQsNGA0YLQvtGH0LrRgy4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIG5vU2NoZW1hID0gY2ZnLndvcmtzLml0ZW1zLmZpbHRlcihmdW5jdGlvbiAodikgeyByZXR1cm4gIXYuc2VvTmFtZSAmJiAhdi5zZW9EZXNjICYmICF2LnBvc3RlcjsgfSkubGVuZ3RoOwogICAgbXNnKCfQp9C40YLQsNGOINC40YHRhdC-0LTQvdGL0Lkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YvigKYnKTsKICAgIGFzc2VtYmxlKGNmZykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgJ9CSINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtSDQstGL0LTQtdC70LjRgtC1INCy0LXRgdGMIEhUTUwt0LHQu9C-0LogL3ZpZGVvX3Nob290aW5nX2themFuINC4INCy0YHRgtCw0LLRjNGC0LUg0L_QvtCy0LXRgNGFLiAnICsKICAgICAgICAn0KDQvtC70LjQutC-0LI6ICcgKyBjZmcud29ya3MuaXRlbXMubGVuZ3RoICsgJy4nOwogICAgICBpZiAobm9TY2hlbWEpIG5vdGUgKz0gJyDQktCd0JjQnNCQ0J3QmNCVOiDRgyAnICsgbm9TY2hlbWEgKyAnINGA0L7Qu9C40LrQvtCyINC90LUg0LfQsNC_0L7Qu9C90LXQvdC-INC-0L_QuNGB0LDQvdC40LUg0LTQu9GPINC_0L7QuNGB0LrQsCDigJQg0LIg0YDQsNC30LzQtdGC0LrRgyDQvtC90Lgg0L3QtSDQv9C-0L_QsNC00YPRgi4nOwogICAgICAvKiDQn9GD0YHRgtCw0Y8g0L7QsdC70L7QttC60LAg4oCUINGN0YLQviDQvdC1INC80LXQu9C-0YfRjDog0LrQsNGA0YLQvtGH0LrQsCDQvdCw0YfQvdGR0YIg0YLRj9C90YPRgtGMINC60LDQtNGAINC40LcKICAgICAgICAg0LLQuNC00LXQvtGE0LDQudC70LAsINCwINC40Lcg0YDQsNC30LzQtdGC0LrQuCDRg9C50LTRkdGCIHRodW1ibmFpbFVybC4g0J_RgNC-INGC0LDQutC-0LUg0LzQvtC70YfQsNGC0YwKICAgICAgICAg0L3QtdC70YzQt9GPLCDQuNC90LDRh9C1INC_0L7Qu9C1INC_0YDQvtC_0LDQtNGR0YIg0L3QtdC30LDQvNC10YLQvdC-LiAqLwogICAgICB2YXIgbm9Qb3N0ZXIgPSBjZmcud29ya3MuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uICh2KSB7IHJldHVybiAhU3RyaW5nKHYucG9zdGVyIHx8ICcnKS50cmltKCk7IH0pLmxlbmd0aDsKICAgICAgaWYgKG5vUG9zdGVyKSBub3RlICs9ICcg0KMgJyArIG5vUG9zdGVyICsgJyDRgNC-0LvQuNC60L7QsiDQvdC1INC30LDQtNCw0L3QsCDQvtCx0LvQvtC20LrQsDog0LrQsNGA0YLQvtGH0LrQsCDQstC-0LfRjNC80ZHRgiDQutCw0LTRgCDQuNC3INGE0LDQudC70LAnICsKICAgICAgICAnICjQvtC60L7Qu9C-INC00LLRg9GFINC80LXQs9Cw0LHQsNC50YIg0YMg0LrQsNC20LTQvtCz0L4g0L_QvtGB0LXRgtC40YLQtdC70Y8pLCDQsCDQsiDRgNCw0LfQvNC10YLQutC1INGDINC90LjRhSDQvdC1INCx0YPQtNC10YIgdGh1bWJuYWlsVXJsLic7CiAgICAgIGlmIChjbGVhbmVkKSBub3RlICs9ICcg0JjQtyAnICsgY2xlYW5lZCArICcg0L_QvtC70LXQuSDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLLCDQstGB0YLQsNCy0LvQtdC90L3Ri9C1INGA0LXQtNCw0LrRgtC-0YDQvtC8Lic7CiAgICAgIGlmIChyZXMubWlzc2VkLmxlbmd0aCkgbm90ZSArPSAnINCd0LUg0L3QsNC50LTQtdC90L4g0LIg0YHQutGA0LjQv9GC0LU6ICcgKyByZXMubWlzc2VkLmpvaW4oJywgJykgKyAnLic7CiAgICAgIGNvcHkocmVzLnRleHQsIG5vdGUpOwogICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgbXNnKCfQndC1INGB0L7QsdGA0LDQvdC-OiAnICsgZS5tZXNzYWdlKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzZWxmVGVzdCgpIHsKICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgdmFyIHNuYXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgYXNzZW1ibGUoc25hcCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jLCByZXMudGV4dCk7CiAgICAgIC8qINC_0YDQuNC30L3QsNC6IMKr0LXRgdGC0Ywg0LIg0YDQsNC30LzQtdGC0LrQtcK7INC_0L7RgdC70LUg0YHQsdC-0YDQutC4INC80L7QttC10YIg0LjQt9C80LXQvdC40YLRjNGB0Y8g0L3QsNC80LXRgNC10L3QvdC-IOKAlAogICAgICAgICDRgdCy0LXRgNGP0LXQvCDRgdC-0LTQtdGA0LbQuNC80L7QtSwg0LAg0L3QtSDQtdCz0L4gKi8KICAgICAgYWdhaW4ud29ya3MuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkgewogICAgICAgIGlmIChzbmFwLndvcmtzLml0ZW1zW2ldKSB2LmluU2NoZW1hID0gc25hcC53b3Jrcy5pdGVtc1tpXS5pblNjaGVtYTsKICAgICAgfSk7CiAgICAgIGFnYWluLm1ldGEgPSBzbmFwLm1ldGE7CiAgICAgIHZhciBhID0gSlNPTi5zdHJpbmdpZnkoc25hcCksIGIgPSBKU09OLnN0cmluZ2lmeShhZ2Fpbik7CiAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgZWxzZSB7CiAgICAgICAgbXNnKCfQoNCQ0KHQpdCe0JbQlNCV0J3QmNCVIOKAlCDRgdC80L7RgtGA0LjRgtC1INC60L7QvdGB0L7Qu9GMLicpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgIGNvbnNvbGUud2FybignQVZaOiDRgdGC0LDQu9C-JywgSlNPTi5wYXJzZShiKSk7CiAgICAgIH0KICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogIH0KCiAgcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICBpZiAoIWRvYy5xdWVyeVNlbGVjdG9yKCcuYXYtdmlkZW9zJykpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0LHQu9C-0LrQsCAuYXYtdmlkZW9zJyk7CiAgICBjZmcgPSByZWFkQ2ZnKGRvYywgc3JjKTsKICAgIHN0YXJ0KCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgIHJvb3QuaW5uZXJIVE1MID0gJzxzdHlsZT4nICsgY3NzICsgJzwvc3R5bGU-PGRpdiBpZD0iYXZ6di13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6di1oZWFkIj48aDI-0J_QsNC90LXQu9GMINCy0LjQtNC10L7RgdGK0ZHQvNC60Lg8L2gyPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6di1ib2R5Ij48cCBjbGFzcz0iYXZ6di1oaW50Ij7QndC1INGD0LTQsNC70L7RgdGMINC_0YDQvtGH0LjRgtCw0YLRjCDQutC-0LQg0YHRgtGA0LDQvdC40YbRizogJyArCiAgICAgIGVzYyhlLm1lc3NhZ2UpICsgJzwvcD48L2Rpdj48L2Rpdj4nOwogIH0pOwoKICByZXR1cm4gJ9Cf0LDQvdC10LvRjCDQstC40LTQtdC-0YHRitGR0LzQutC4INC-0YLQutGA0YvRgtCwLic7Cn0pKCk7Cgp9fSwKe2lkOiJhcmNoIix0aXRsZToi0J_QsNC90LXQu9GMINCw0YDRhdC40YLQtdC60YLRg9GA0L3QvtC5INGB0YrRkdC80LrQuCIsc2hvcnQ6ItCQ0YDRhdC40YLQtdC60YLRg9GA0LAiLGhpbnQ6ItC60LDQtNGA0Ysg0Lgg0L_QvtC00L_QuNGB0LgsINC_0YDQvtC10LrRgtGLLCDQv9GD0LHQu9C40LrQsNGG0LjRjywg0LLQvtC_0YDQvtGB0YssINGA0LDQt9C80LXRgtC60LAiLHBhZ2VzOlsiL2FyY2hpdGVjdHVyZV9zaG9vdGluZyJdLHJ1bjpmdW5jdGlvbigpewovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQVZaIMK3INCf0JDQndCV0JvQrCDQkNCg0KXQmNCi0JXQmtCi0KPQoNCd0J7QmSDQodCq0IHQnNCa0JggIHYyIOKAlCDQs9C10L3QtdGA0LDRgtC-0YAg0LrQvtC00LAKICAgdjIgKDI4LjEwLjIwMjYpOiDRgdGC0YDQsNC90LjRhtCwIHYyLjAg0LbRg9GA0L3QsNC7IOKAlCDRiNGA0LjRhNGC0Ysg0LLRiNC40YLRiywg0YHRgdGL0LvQutC4INC90LAgR29vZ2xlCiAgIEZvbnRzINCyINC60L7QtNC1INC90LXRgiwg0Lgg0L_QsNC90LXQu9GMINC10ZEg0LHQvtC70YzRiNC1INC90LUg0LTQvtCx0LDQstC70Y_QtdGCOyDRhNC-0L3RiyDQvtCx0LvQvtC20LrQuCDQuAogICDRhNC40L3QsNC70LAgKGRhdGEtYmcpINC_0YDQsNCy0Y_RgtGB0Y8g0LIg0YDQsNC30LTQtdC70LUgwqvQqNCw0L_QutCwwrsuCiAgINCg0LDQsdC-0YLQsNC10YIg0L3QsCAvYXJjaGl0ZWN0dXJlX3Nob290aW5nCgogICDQndC40YfQtdCz0L4g0L3QtSDQv9GD0LHQu9C40LrRg9C10YIuINCn0LjRgtCw0LXRgiDQmNCh0KXQntCU0J3Qq9CZINC60L7QtCDRgdGC0YDQsNC90LjRhtGLLCDQv9C-0LTRgdGC0LDQstC70Y_QtdGCCiAgINC30L3QsNGH0LXQvdC40Y8g0LjQtyDRhNC-0YDQvNGLINC4INCy0YvQtNCw0ZHRgiDQstC10YHRjCDQsdC70L7QuiDRhtC10LvQuNC60L7QvCDigJQg0LLRgdGC0LDQstC70Y_QtdGC0YHRjwogICDQvtC00L3QuNC8INC60YPRgdC60L7QvCDQv9C-0LLQtdGA0YUgSFRNTC3QsdC70L7QutCwINGB0YLRgNCw0L3QuNGG0YsuCgogICDQmNGB0YXQvtC00L3QuNC6LCDQsCDQvdC1INC20LjQstC-0LkgRE9NOiDRgdC60YDQuNC_0YLRiyB3Zm9saW8g0LTQvtC_0LjRgdGL0LLQsNGO0YIg0LLQvdC10YjQvdC40LwKICAg0YHRgdGL0LvQutCw0LwgdGFyZ2V0PSJfYmxhbmsiINC_0YDRj9C80L4g0LIg0LHRgNCw0YPQt9C10YDQtSwg0Lgg0L_QsNC90LXQu9GMLCDRh9C40YLQsNGO0YnQsNGPCiAgINC20LjQstGD0Y4g0YHRgtGA0LDQvdC40YbRgywg0LfQsNC_0LXQutCw0LvQsCDQsdGLINGN0YLQuCDRh9GD0LbQuNC1INC_0YDQsNCy0LrQuCDQsiDQstCw0Ygg0LrQvtC0LgogICDQkiDRhNGD0YLQtdGA0LUg0Lgg0LHQtdCz0YPRidC10Lkg0YHRgtGA0L7QutC1INGB0YHRi9C70LrQuCDQutCw0Log0YDQsNC3INCy0L3QtdGI0L3QuNC1LgoKICAg0KfRgtC-INC_0LDQvdC10LvRjCDQtNC10YDQttC40YIg0LLQvNC10YHRgtC1LCDRh9GC0L7QsdGLINC90LUg0YDQsNC30L7RiNC70L7RgdGMOgogICAgIMK3INC_0L7QtNC_0LjRgdC4INC60LDQtNGA0L7QsiAtPiDRgdC_0LjRgdC-0Log0LrQsNC00YDQvtCyINCyINGA0LDQt9C80LXRgtC60LUsINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvjsKICAgICDCtyDQv9C10YDQstGL0Lkg0LrQsNC00YAgLT4g0LPQu9Cw0LLQvdC-0LUg0LjQt9C-0LHRgNCw0LbQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLLCDQstC80LXRgdGC0LUg0YEg0YDQsNC30LzQtdGA0LDQvNC4OwogICAgIMK3INC_0YDQvtC10LrRgtGLIC0-INGB0L_QuNGB0L7QuiDQv9GA0L7QtdC60YLQvtCyINCyINGA0LDQt9C80LXRgtC60LUsINC_0L4g0LDQtNGA0LXRgdGDINGA0LDQt9Cx0L7RgNCwOwogICAgIMK3INCy0L7Qv9GA0L7RgdGLIC0-IEZBUVBhZ2UsINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQvi4KCiAgINCa0LDQtNGA0L7QsiDRgNC-0LLQvdC-IDc6INC60LvQsNGB0YHRiyBnMeKApmc3INC30LDQtNCw0Y7RgiDQs9C10L7QvNC10YLRgNC40Y4g0LrQvtC70LvQsNC20LAsINCy0L7RgdGM0LzQvtC5CiAgINGC0YDQtdCx0YPQtdGCINC_0YDQsNCy0LrQuCBDU1MuINCf0YDQvtC10LrRgtC-0LIg0YDQvtCy0L3QviAzIOKAlCDRgtCwINC20LUg0L_RgNC40YfQuNC90LAsINGB0LXRgtC60LAuCiAgINCf0L7RjdGC0L7QvNGDINC00L7QsdCw0LLQu9C10L3QuNGPINC30LTQtdGB0Ywg0L3QtdGCLCDQtdGB0YLRjCDQv9GA0LDQstC60LAg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFLgoKICAg0KbQtdC90YMg0L_QsNC90LXQu9GMINC90LUg0YHQvtGH0LjQvdGP0LXRgi4g0J3QsCDRgdGC0YDQsNC90LjRhtC1INC10ZEg0L3QtdGCINC90LDQvNC10YDQtdC90L3Qvjog0LDRgNGF0LjRgtC10LrRgtGD0YDQvdC-0LkKICAg0YHRitGR0LzQutC4INC90LXRgiDQsiDQv9GA0LDQudGB0LUsINCwINC-0LHRitGP0LLQu9GP0YLRjCDRgdGD0LzQvNGDLCDQutC-0YLQvtGA0L7QuSDQvdC10YIg0LIg0L_RgNCw0LnRgdC1LCDQvdC10LvRjNC30Y8uCiAgINCf0L7Qu9C1INGB0YLQvtC40LzQvtGB0YLQuCDigJQg0L7QsdGL0YfQvdGL0Lkg0YLQtdC60YHRgiwg0LIg0YDQsNC30LzQtdGC0LrRgyDRhtC40YTRgNCwINC90LUg0YPRhdC-0LTQuNGCLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAndXNlIHN0cmljdCc7CgogIC8qINCh0YHRi9C70LrQsCDQvdCwINGI0YDQuNGE0YLRiyDQsdC70L7QutCwIOKAlCDQutC-0L3RgdGC0LDQvdGC0LAsINCwINC90LUg0YLQviwg0YfRgtC-INC90LDRiNC70L7RgdGMINC90LAg0YHRgtGA0LDQvdC40YbQtS4KICAgICDQkiA8aGVhZD4gd2ZvbGlvINGB0LLQvtGPINGB0YHRi9C70LrQsCDQvdCwIEpvc3QvUnViaWsg0L7RgiDRgtC10LzRiywg0Lgg0L7QvdCwINGB0YLQvtC40YIg0KDQkNCd0KzQqNCVCiAgICAg0L3QsNGI0LXQuTog0L_QsNC90LXQu9GMINCx0YDQsNC70LAg0L_QtdGA0LLRg9GOINC_0L7QtNGF0L7QtNGP0YnRg9GOINC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60L7QuSDQv9C-0LTQvNC10L3Rj9C70LAKICAgICDQvdCw0YfQtdGA0YLQsNC90LjRjyDQsdC70L7QutCwINC90LAg0YLQtdC80LjQvdGLLiDQndCw0LHQvtGAINCy0LXRgdC-0LIg0LfQsNC00LDQvSBDU1Mg0LHQu9C-0LrQsCwg0L_QvtGN0YLQvtC80YMKICAgICDQtNC10YDQttC40Lwg0LXQs9C-INC30LTQtdGB0YwuINCc0LXQvdGP0LXRgtGB0Y8g0LTQuNC30LDQudC9IOKAlCDQvNC10L3Rj9C10YLRgdGPINGN0YLQsCDRgdGC0YDQvtC60LAuICovCiAgdmFyIEFWWl9GT05UX0xJTksgPSAnPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Kb3N0OndnaHRAMTAwOzIwMDszMDA7NDAwOzUwMDs2MDAnICsKICAgICcmYW1wO2ZhbWlseT1SdWJpazppdGFsLHdnaHRAMCwxMDA7MCwyMDA7MCwzMDA7MSwxMDA7MSwyMDAnICsKICAgICcmYW1wO2Rpc3BsYXk9c3dhcCIgcmVsPSJzdHlsZXNoZWV0Ij4nOwoKICAvKiAtLS0tLS0tLS0tINC_0YDQvtCy0LXRgNC60LAgwqvQtNC-0LvQtdGC0LXQu9C-INC70LjCuyAtLS0tLS0tLS0tCiAgICAg0J_QsNC90LXQu9GMINC_0LjRiNC10YIg0LfQvdCw0YfQtdC90LjRjyDQsiDQutC-0LQg0YHRgtGA0LDQvdC40YbRiyDRh9C10YDQtdC3INGB0LXQu9C10LrRgtC-0YDRiy4g0JXRgdC70Lgg0YHQtdC70LXQutGC0L7RgAogICAgINC90LUg0L3QsNGI0ZHQu9GB0Y8g0LjQu9C4INC_0L7QtNGB0YLQsNC90L7QstC60LAg0L3QtSDRgdC-0LLQv9Cw0LvQsCDigJQg0LfQsNC_0LjRgdGMINC80L7Qu9GH0LAg0L3QtSDQv9GA0L7QuNGB0YXQvtC00LjRgi4KICAgICDQmNC80LXQvdC90L4g0YLQsNC6INGH0LjRgdC70L4g0YHRitGR0LzQvtC6INC30LDRgdGC0YDRj9C70L4g0L3QsCAxMjU6INC_0LDQvdC10LvRjCDQv9C-0YHRh9C40YLQsNC70LAgMTI3LAogICAgINC30LDQv9C40YHQsNGC0Ywg0L3QtSDRgdC80L7Qs9C70LAsINCwINC_0YDQvtCy0LXRgNC60LAgwqvRgdCx0L7RgNC60LAg0YHQvtCy0L_QsNC00LDQtdGCINGBINC40YHRhdC-0LTQvdC40LrQvtC8wrsKICAgICDRgdGA0LDQstC90LjQstCw0LvQsCDQvtC00LjQvdCw0LrQvtCy0L4g0L3QtdC_0YDQsNCy0LjQu9GM0L3QvtC1INGBINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdGL0LwuCgogICAgINCf0L7RjdGC0L7QvNGDINC_0L7RgdC70LUg0YHQsdC-0YDQutC4INGH0LjRgtCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0J7QkdCg0JDQotCd0J4g0Lgg0YHQstC10YDRj9C10Lwg0YEg0YLQtdC8LCDRh9GC0L4KICAgICDQstCy0ZHQuyDRh9C10LvQvtCy0LXQui4g0J3QtdGB0L7QstC_0LDQstGI0LjQtSDQv9C-0LvRjyDQv9Cw0L3QtdC70Ywg0L3QsNC30YvQstCw0LXRgiDQstGB0LvRg9GFLiAqLwogIGZ1bmN0aW9uIGxhbmRlZChleHBlY3RlZCwgYWN0dWFsLCBza2lwLCBwYXRoLCBvdXQpIHsKICAgIHBhdGggPSBwYXRoIHx8ICcnOyBvdXQgPSBvdXQgfHwgW107CiAgICBpZiAoZXhwZWN0ZWQgJiYgdHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0JyAmJiBhY3R1YWwgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ29iamVjdCcpIHsKICAgICAgT2JqZWN0LmtleXMoZXhwZWN0ZWQpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgICBsYW5kZWQoZXhwZWN0ZWRba10sIGFjdHVhbFtrXSwgc2tpcCwgcGF0aCA_IHBhdGggKyAnLicgKyBrIDogaywgb3V0KTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKFN0cmluZyhleHBlY3RlZCA9PSBudWxsID8gJycgOiBleHBlY3RlZCkgIT09IFN0cmluZyhhY3R1YWwgPT0gbnVsbCA_ICcnIDogYWN0dWFsKSkgewogICAgICBpZiAoIXNraXAgfHwgIXNraXAudGVzdChwYXRoKSkgb3V0LnB1c2gocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KCiAgLyogLS0tLS0tLS0tLSDQvtCx0YnQuNC1INC60LDRgNGC0L7Rh9C60Lg6INCz0LvQsNCy0L3QsNGPIOKAlCDQuNGB0YLQvtGH0L3QuNC6INC40YHRgtC40L3RiyAtLS0tLS0tLS0tCiAgICAg0J7QtNC40L0g0Lgg0YLQvtGCINC20LUgQGlkLCDQvtC_0LjRgdCw0L3QvdGL0Lkg0L_Qvi3RgNCw0LfQvdC-0LzRgyDQvdCwINGA0LDQt9C90YvRhSDRgdGC0YDQsNC90LjRhtCw0YUsIOKAlAogICAgINC80L7Qu9GH0LDQu9C40LLQsNGPINC_0L7Qu9C-0LzQutCwOiDQv9C-0LjRgdC60L7QstC40Log0Lgg0JjQmCDQstGL0LHQuNGA0LDRjtGCINGB0LDQvNC4LCDQutCw0LrQvtC5INCy0LXRgNGB0LjQuAogICAgINCy0LXRgNC40YLRjCwg0Lgg0L3QsNCz0YDQsNC00Ysg0LzQvtCz0YPRgiDQvdC1INC30LDRgdGH0LjRgtCw0YLRjNGB0Y8uINCf0LDQvdC10LvRjCDQv9GA0LjQstC-0LTQuNGCINGN0YLQuCDRg9C30LvRiwogICAgINC6INGN0YLQsNC70L7QvdGDINC_0YDQuCDQutCw0LbQtNC-0Lkg0YHQsdC-0YDQutC1LgoKICAgICDQrdGC0LDQu9C-0L0g0YHQvdGP0YIg0YEg0LPQu9Cw0LLQvdC-0LkgMzAg0L7QutGC0Y_QsdGA0Y8gMjAyNi4g0JXRgdC70Lgg0LPQu9Cw0LLQvdGD0Y4g0LTQvtC_0L7Qu9C90Y_RgiDigJQKICAgICDQvtCx0L3QvtCy0LjRgtGMINC30LTQtdGB0Ywg0Lgg0L_QtdGA0LXRgdC-0LHRgNCw0YLRjCDQvdCw0LHQvtGAOiBweXRob24zIHBhY2stdG9vbGtpdC5weSAqLwogIHZhciBBVlpfQ0FOT04gPSB7CiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIjogewogICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiLAogICAgICAibmFtZSI6ICLQkNC90YLQvtC9INCQ0LLQsNC90LfQsNGC0L4iLAogICAgICAiYWx0ZXJuYXRlTmFtZSI6ICJBdmFuemF0byIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuC4g0J_RgNC-0YTQtdGB0YHQuNC-0L3QsNC70YzQvdCw0Y8g0L_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0YEgMjAxOSDQs9C-0LTQsC4g0JHQvtC70LXQtSAyNTAg0YDQtdCw0LvQuNC30L7QstCw0L3QvdGL0YUg0L_RgNC-0LXQutGC0L7Qsi4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiBbCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvMGlPZkxJZXZQTXBRNV9GRzZNS0RjT3ZQSFk0U2NpUDIvM3Y4d2NQaGxOam9VSEpZX3gxRjlCUGQ2MnhPc001TzEvODVaV2I2ZFlGZ1Q5YjMzSDNJRzFuZy5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvY1hQWlBtdTlsQ3c1dGtSTmF0N0p0eUhqclBpWmljbE4vVkpnSXJsdUZMdFpXR3d6YVQ1RkowN0R1U0tfX2JUUUEveThEbTZKWlZDbmw0Q1VGemtlb3hjaHZQSTF3VmREQ0svNy1Vb0xLQzJnUWtyZ2FYeHJyU3lMcVl0YU1HUnpfdS0vcEJZZ1JYNXNQYll4WEJPUG1EbFhFUS5qcGVnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL29XNHFqLW1MU3hPR0pMZkRtYlNERGFiaHBOVzhuZUs4LzRsVm5NTThabkN6Q3lFYmdYSW5IekN2Q3ByUEdxcko2L0g5dWJUMEg5SUZBQ2JiT1B4ZW5GN1EuanBnIiwKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0Q0OFNjSDFEQTZqeFVfdVNILU9yLUMwY0pDbHBQLVFQL2xFQUwxMjh4RU1QR00yb19yS3dfa01QSEtSOXZBSjgwL19SQnNhTWhHMGpHTU03XzZzbG95RVBzZFYtWk9WM2l3LzV0eU9IOTYtMlJ1T1UtcF9JS0J3VTAwRHo1WEk5cnRUL0Fjb0xyNnREaEJBXzFzVjNvaXRDclEuanBnIgogICAgICBdLAogICAgICAiam9iVGl0bGUiOiAi0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCIsCiAgICAgICJrbm93c0Fib3V0IjogWwogICAgICAgICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyIsCiAgICAgICAgItCc0YPQttGB0LrQvtC5INC_0L7RgNGC0YDQtdGCIiwKICAgICAgICAi0JbQtdC90YHQutC40Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQm9C40YfQvdGL0Lkg0LHRgNC10L3QtCIsCiAgICAgICAgItCg0LXQv9C-0YDRgtCw0LbQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0J_RgNC10LTQvNC10YLQvdCw0Y8g0YHRitGR0LzQutCwINC00LvRjyDQvNCw0YDQutC10YLQv9C70LXQudGB0L7QsiIsCiAgICAgICAgItCY0L3RgtC10YDRjNC10YDQvdCw0Y8g0Lgg0LDRgNGF0LjRgtC10LrRgtGD0YDQvdCw0Y8g0YHRitGR0LzQutCwIiwKICAgICAgICAi0JDQstGC0L7QvNC-0LHQuNC70YzQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICLQktC40LTQtdC-0YHRitGR0LzQutCwIFJlZWxzIgogICAgICBdLAogICAgICAiYXdhcmQiOiBbCiAgICAgICAgIlBvcnRmb2xpbyBBd2FyZCAyMDI0IOKAlCAyINC80LXRgdGC0L4sINGB0LXRgNC40Y8g0KDQtdC_0L7RgNGC0LDQtiIsCiAgICAgICAgIlRoZSBQbGFjZSBFY29ub215IFZvbC4zIGJ5IEhveW5lIChBdXN0cmFsaWEpIiwKICAgICAgICAiNTAwcHggQXdhcmRzIiwKICAgICAgICAiQWdvcmEgQXdhcmRzIiwKICAgICAgICAiMzVhd2FyZHMiCiAgICAgIF0sCiAgICAgICJlbWFpbCI6ICJhbnRvbmlvYXZhbnphdG9AZ21haWwuY29tIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovLzIwMjQucG9ydGZvbGlvYXdhcmQuY29tLyNzZWN0aW9uLTE5MDA2MTU3IiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAid29ya0xvY2F0aW9uIjogewogICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgIH0KICAgIH0sCiAgICAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiOiB7CiAgICAgICJAdHlwZSI6ICJQcm9mZXNzaW9uYWxTZXJ2aWNlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIsCiAgICAgICJuYW1lIjogIkF2YW56YXRvIOKAlCDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtCz0YDQsNGE0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAiZGVzY3JpcHRpb24iOiAi0J_QvtGA0YLRgNC10YLQvdGL0LUg0YTQvtGC0L7RgdC10YHRgdC40Lgg0LIg0JrQsNC30LDQvdC4INGBIDIwMTkg0LPQvtC00LA6INGB0YLRg9C00LjRjyDQuCDRg9C70LjRhtCwLCDQvNGD0LbRgdC60L7QuSDQuCDQttC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiwg0YHRitGR0LzQutCwINC00LvRjyDQu9C40YfQvdC-0LPQviDQsdGA0LXQvdC00LAuIDI1MCsg0L_RgNC-0LXQutGC0L7QsiwgNSDQvNC10LbQtNGD0L3QsNGA0L7QtNC90YvRhSDQvdCw0LPRgNCw0LQuINCS0YvQtdC30LTRiyDQsiDQnNC-0YHQutCy0YMuIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgImltYWdlIjogImh0dHBzOi8vaS53Zm9saW8ucnUveC9EdzE1RUlFdTlpVk4tc3hINk9YZFVwSlJnZnRuUjItZS9EWXhnbWI3MHJGT2dxSk5tUW5PR19SY2cwYnI0X1ZUei9uLTlHSkFmanpNUHRGMVBpS2dicjdPWWYwZWhGR3RETy91YVMxdndFT0ZQZ1FOSWVGQUJ4YVk3dERfbU93WTNJQi9nMGdzTHBraTBoYzdYSUljX0FnbkZKenVXODIwSUkzMy9SNWlkVVhySnNCUS5wbmciLAogICAgICAiZm91bmRlciI6IHsKICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIKICAgICAgfSwKICAgICAgImZvdW5kaW5nRGF0ZSI6ICIyMDE5LTAxLTAxIiwKICAgICAgInRlbGVwaG9uZSI6ICIrNy05ODctMjI3LTAwLTc3IiwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAiQHR5cGUiOiAiUG9zdGFsQWRkcmVzcyIsCiAgICAgICAgImFkZHJlc3NMb2NhbGl0eSI6ICLQmtCw0LfQsNC90YwiLAogICAgICAgICJhZGRyZXNzUmVnaW9uIjogItCg0LXRgdC_0YPQsdC70LjQutCwINCi0LDRgtCw0YDRgdGC0LDQvSIsCiAgICAgICAgImFkZHJlc3NDb3VudHJ5IjogIlJVIgogICAgICB9LAogICAgICAiZ2VvIjogewogICAgICAgICJAdHlwZSI6ICJHZW9Db29yZGluYXRlcyIsCiAgICAgICAgImxhdGl0dWRlIjogNTUuNzg4NywKICAgICAgICAibG9uZ2l0dWRlIjogNDkuMTIyMQogICAgICB9LAogICAgICAiYXJlYVNlcnZlZCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQmtCw0LfQsNC90YwiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ2l0eSIsCiAgICAgICAgICAibmFtZSI6ICLQnNC-0YHQutCy0LAiCiAgICAgICAgfQogICAgICBdLAogICAgICAicHJpY2VSYW5nZSI6ICIxNDkwMC01NDkwMCIsCiAgICAgICJvcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPcGVuaW5nSG91cnNTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICJkYXlPZldlZWsiOiBbCiAgICAgICAgICAgICJNb25kYXkiLAogICAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICAgICAiVGh1cnNkYXkiLAogICAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICAgIlNhdHVyZGF5IiwKICAgICAgICAgICAgIlN1bmRheSIKICAgICAgICAgIF0sCiAgICAgICAgICAib3BlbnMiOiAiMTA6MDAiLAogICAgICAgICAgImNsb3NlcyI6ICIyMDowMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJzYW1lQXMiOiBbCiAgICAgICAgImh0dHBzOi8vd3d3LmJlaGFuY2UubmV0L2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly90Lm1lL2F2YW56YXRvIiwKICAgICAgICAiaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9hdmFuemF0by8iLAogICAgICAgICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYW50b25pb2F2YW56YXRvIgogICAgICBdLAogICAgICAibWFrZXNPZmZlciI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JrQsNC30LDQvdC4IiwKICAgICAgICAgICJwcmljZSI6ICIxNDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPIiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3BvcnRyYWl0LXBob3Rvc2Vzc2lvbiIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQnNC-0YHQutCy0LUgKNCy0YHRkSDQstC60LvRjtGH0LXQvdC-KSIsCiAgICAgICAgICAicHJpY2UiOiAiNTQ5MDAiLAogICAgICAgICAgInByaWNlQ3VycmVuY3kiOiAiUlVCIiwKICAgICAgICAgICJwcmljZVZhbGlkVW50aWwiOiAiMjAyNy0wNi0zMCIsCiAgICAgICAgICAiYXZhaWxhYmlsaXR5IjogImh0dHBzOi8vc2NoZW1hLm9yZy9JblN0b2NrIiwKICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9wcmljZSIsCiAgICAgICAgICAic2VsbGVyIjogewogICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIgogICAgICAgICAgfSwKICAgICAgICAgICJpdGVtT2ZmZXJlZCI6IHsKICAgICAgICAgICAgIkB0eXBlIjogIlNlcnZpY2UiLAogICAgICAgICAgICAibmFtZSI6ICLQktGL0LXQt9C00L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS9waG90b2dyYXBoX21vc2NvdyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIOKAlCDQtNC-0L_QvtC70L3QtdC90LjQtSDQuiDRhNC-0YLQvtGB0LXRgdGB0LjQuCIsCiAgICAgICAgICAicHJpY2UiOiAiNjAwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS92aWRlb19zaG9vdGluZ19rYXphbiIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0sCiAgICAgICJjb250YWN0UG9pbnQiOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIkNvbnRhY3RQb2ludCIsCiAgICAgICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAgICAgImNvbnRhY3RUeXBlIjogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAgICAgImFyZWFTZXJ2ZWQiOiAiUlUiLAogICAgICAgICAgImF2YWlsYWJsZUxhbmd1YWdlIjogWwogICAgICAgICAgICAiUnVzc2lhbiIsCiAgICAgICAgICAgICJFbmdsaXNoIgogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIjogewogICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCiAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jd2Vic2l0ZSIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviDigJQg0J_QvtGA0YLRgNC10YLQvdGL0Lkg0YTQvtGC0L7Qs9GA0LDRhCDQsiDQmtCw0LfQsNC90LgiLAogICAgICAicHVibGlzaGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiaW5MYW5ndWFnZSI6ICJydS1SVSIKICAgIH0KICB9OwoKICBmdW5jdGlvbiBzeW5jQ2Fub24oZ3JhcGgpIHsKICAgIGlmICghZ3JhcGggfHwgIWdyYXBoLmxlbmd0aCkgcmV0dXJuIFtdOwogICAgdmFyIGRvbmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JhcGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGlkID0gZ3JhcGhbaV0gJiYgZ3JhcGhbaV1bJ0BpZCddOwogICAgICBpZiAoaWQgJiYgQVZaX0NBTk9OW2lkXSkgewogICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShncmFwaFtpXSkgIT09IEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKSB7CiAgICAgICAgICBkb25lLnB1c2goU3RyaW5nKGlkKS5zcGxpdCgnIycpWzFdKTsKICAgICAgICB9CiAgICAgICAgZ3JhcGhbaV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEFWWl9DQU5PTltpZF0pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRvbmU7CiAgfQoKICB2YXIgb2xkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2emFyLXJvb3QnKTsKICBpZiAob2xkKSBvbGQucmVtb3ZlKCk7CgogIHZhciBNQVhXID0gMTI0MDsgLy8g0L_RgNC10LTQtdC7INGI0LjRgNC40L3RiyDQutCw0LTRgNCwLCDRgdC8LiDQuNGB0YLQvtGA0LjRjiDQv9GA0L7QtdC60YLQsAogIHZhciBTSVRFID0gJ2h0dHBzOi8vYXZhbnphdG8ucnUnOwoKICBmdW5jdGlvbiBvbmUoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gZWwucXVlcnlTZWxlY3RvcihzZWwpOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9IH0KICBmdW5jdGlvbiBhbGwoZWwsIHNlbCkgeyB0cnkgeyByZXR1cm4gW10uc2xpY2UuY2FsbChlbC5xdWVyeVNlbGVjdG9yQWxsKHNlbCkpOyB9IGNhdGNoIChlKSB7IHJldHVybiBbXTsgfSB9CiAgZnVuY3Rpb24gdChlbCkgeyByZXR1cm4gZWwgPyBlbC50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgOiAnJzsgfQogIGZ1bmN0aW9uIGh0bWwoZWwpIHsgcmV0dXJuIGVsID8gZWwuaW5uZXJIVE1MLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gYXR0cihlbCwgYSkgeyByZXR1cm4gZWwgPyAoZWwuZ2V0QXR0cmlidXRlKGEpIHx8ICcnKSA6ICcnOyB9CgogIC8qINCi0LXQutGB0YIg0LTQu9GPINGA0LDQt9C80LXRgtC60Lg6IDxicj4g0YHQsNC8INC_0L4g0YHQtdCx0LUg0L_RgNC-0LHQtdC70LAg0L3QtSDQtNCw0ZHRgiwg0LgKICAgICDCq1ByZW1pZXJlIFByby48YnI-0J_RgNC-0YnQtcK7INC_0YDQtdCy0YDQsNGJ0LDQu9C-0YHRjCDQsiDCq1ByZW1pZXJlIFByby7Qn9GA0L7RidC1wrsuCiAgICAg0K3RgtC-0YIg0LTQtdGE0LXQutGCINGD0LbQtSDRh9C40L3QuNC70Lgg0LIg0L_QsNC90LXQu9GP0YUg0L7QsdGD0YfQtdC90LjRjyDQuCDQv9GA0LXRgdC10YLQvtCyIOKAlAogICAgINC30LTQtdGB0Ywg0L7QvSDQt9Cw0LrRgNGL0YIg0YEg0YHQsNC80L7Qs9C-INC90LDRh9Cw0LvQsC4gKi8KICBmdW5jdGlvbiB0ZXh0V2l0aEJyZWFrcyhlbCkgewogICAgaWYgKCFlbCkgcmV0dXJuICcnOwogICAgdmFyIGMgPSBlbC5jbG9uZU5vZGUodHJ1ZSk7CiAgICBhbGwoYywgJ2JyJykuZm9yRWFjaChmdW5jdGlvbiAoYnIpIHsKICAgICAgYnIucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYy5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyksIGJyKTsKICAgIH0pOwogICAgcmV0dXJuIGMudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRh9GC0LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyDQsiDQutC-0L3RhNC40LMgLS0tLS0tLS0tLSAqLwoKICBmdW5jdGlvbiByZWFkQ2ZnKHNjb3BlKSB7CiAgICB2YXIgbGluZXMgPSBhbGwoc2NvcGUsICcuYXZ6LXRpdGxlLWlubmVyJyk7CiAgICB2YXIgc2VjcyA9IGFsbChzY29wZSwgJy5hdnotc2VjdGlvbi1oZWFkZXInKTsKICAgIGZ1bmN0aW9uIHNlYyhpKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNlY3NbaV0sICcuYXZ6LWxhYmVsJykpLAogICAgICAgIGgyOiB0KG9uZShzZWNzW2ldLCAnLmF2ei1oMicpKQogICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgaGVybzogewogICAgICAgIGV5ZWJyb3c6IHQob25lKHNjb3BlLCAnLmF2ei1leWVicm93JykpLAogICAgICAgIGxpbmUxOiB0KGxpbmVzWzBdKSwKICAgICAgICBsaW5lMjogdChsaW5lc1sxXSksCiAgICAgICAgc3ViOiB0KG9uZShzY29wZSwgJy5hdnotc3ViJykpLAogICAgICAgIC8qIHYyOiDRgdCy0L7QuCDRhNC-0L3RiyDQvtCx0LvQvtC20LrQuCDQuCDRhNC40L3QsNC70LA7INC_0YPRgdGC0L4g4oCUINC-0LHQu9C-0LbQutC4INC_0YDQvtC10LrRgtC-0LIgKi8KICAgICAgICBiZzogYXR0cihvbmUoc2NvcGUsICcuYXZ6LWhlcm8nKSwgJ2RhdGEtYmcnKSB8fCAnJywKICAgICAgICBjdGFCZzogYXR0cihvbmUoc2NvcGUsICcuYXZ6LWN0YScpLCAnZGF0YS1iZycpIHx8ICcnCiAgICAgIH0sCiAgICAgIGdhbGxlcnlMYWJlbDogdChvbmUoc2NvcGUsICcuYXZ6LXNlY3Rpb24tbGFiZWwgaDInKSksCiAgICAgIHNob3RzOiBhbGwoc2NvcGUsICcuYXZ6LWdhbGxlcnktaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICB2YXIgaW1nID0gb25lKGl0LCAnaW1nJyk7CiAgICAgICAgdmFyIGEgPSBvbmUoaXQsICcuYXZ6LWctbGluaycpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBzcmM6IGF0dHIoaW1nLCAnc3JjJyksCiAgICAgICAgICBhbHQ6IGF0dHIoaW1nLCAnYWx0JyksCiAgICAgICAgICBjYXA6IHQob25lKGl0LCAnLmF2ei1nLWNhcCcpKSwKICAgICAgICAgIGhyZWY6IGEgPyBhdHRyKGEsICdocmVmJykgOiAnJywKICAgICAgICAgIHc6IGF0dHIoaW1nLCAnd2lkdGgnKSwKICAgICAgICAgIGg6IGF0dHIoaW1nLCAnaGVpZ2h0JykKICAgICAgICB9OwogICAgICB9KSwKICAgICAgcHJvalNlYzogc2VjKDApLAogICAgICBwcm9qZWN0czogYWxsKHNjb3BlLCAnLmF2ei1wcm9qJykubWFwKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgdmFyIGltZyA9IG9uZShhLCAnaW1nJyk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGhyZWY6IGF0dHIoYSwgJ2hyZWYnKSwKICAgICAgICAgIGltZzogYXR0cihpbWcsICdzcmMnKSwKICAgICAgICAgIGFsdDogYXR0cihpbWcsICdhbHQnKSwKICAgICAgICAgIG5hbWU6IHQob25lKGEsICdoMycpKSwKICAgICAgICAgIGRlc2M6IHQob25lKGEsICdwJykpLAogICAgICAgICAgbW9yZTogdChvbmUoYSwgJy5hdnotcHJvai1tb3JlJykpCiAgICAgICAgfTsKICAgICAgfSksCiAgICAgIGF3YXJkOiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLmF2ei1hd2FyZCAuYXZ6LWxhYmVsJykpLAogICAgICAgIGgyOiBodG1sKG9uZShzY29wZSwgJy5hdnotYXdhcmQgLmF2ei1oMicpKSwKICAgICAgICB0ZXh0OiB0KG9uZShzY29wZSwgJy5hdnotYXdhcmQtdGV4dCcpKSwKICAgICAgICBsaW5rVGV4dDogdChvbmUoc2NvcGUsICcuYXZ6LWF3YXJkLWxpbmsnKSksCiAgICAgICAgbGlua0hyZWY6IGF0dHIob25lKHNjb3BlLCAnLmF2ei1hd2FyZC1saW5rJyksICdocmVmJykKICAgICAgfSwKICAgICAgZm10U2VjOiBzZWMoMSksCiAgICAgIGZvcm1hdHM6IGFsbChzY29wZSwgJy5hdnotZm10LWxpc3QgbGknKS5tYXAoZnVuY3Rpb24gKGxpKSB7CiAgICAgICAgcmV0dXJuIHsgaDM6IHQob25lKGxpLCAnaDMnKSksIHA6IHQob25lKGxpLCAncCcpKSB9OwogICAgICB9KSwKICAgICAgYWR2U2VjOiBzZWMoMiksCiAgICAgIGFkdjogYWxsKHNjb3BlLCAnLmF2ei1hZHYtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICByZXR1cm4geyBudW06IHQob25lKGl0LCAnLmF2ei1hZHYtbnVtJykpLCBoMzogdChvbmUoaXQsICdoMycpKSwgcDogdChvbmUoaXQsICdwJykpIH07CiAgICAgIH0pLAogICAgICBjb3N0OiB7CiAgICAgICAgbGFiZWw6IHQob25lKHNjb3BlLCAnLmF2ei1jb3N0IC5hdnotbGFiZWwnKSksCiAgICAgICAgaDI6IHQob25lKHNjb3BlLCAnLmF2ei1jb3N0IC5hdnotaDInKSksCiAgICAgICAgdGV4dDogdChvbmUoc2NvcGUsICcuYXZ6LWNvc3QtdGV4dCcpKSwKICAgICAgICBidG46IHQob25lKHNjb3BlLCAnLmF2ei1jb3N0IC5hdnotYnRuJykpLAogICAgICAgIGJ0bkhyZWY6IGF0dHIob25lKHNjb3BlLCAnLmF2ei1jb3N0IC5hdnotYnRuJyksICdocmVmJykKICAgICAgfSwKICAgICAgZmFxU2VjOiBzZWMoMyksCiAgICAgIGZhcTogYWxsKHNjb3BlLCAnLmF2ei1mYXEtaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICByZXR1cm4geyBxOiB0KG9uZShpdCwgJy5hdnotZmFxLXEnKSksIGE6IGh0bWwob25lKGl0LCAnLmF2ei1mYXEtYScpKSB9OwogICAgICB9KSwKICAgICAgY3RhOiB7CiAgICAgICAgaDI6IGh0bWwob25lKHNjb3BlLCAnLmF2ei1jdGEtdGl0bGUnKSksCiAgICAgICAgYnRuczogYWxsKHNjb3BlLCAnLmF2ei1idG4tY29udGFpbmVyIC5hdnotYnRuJykubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICByZXR1cm4geyB0ZXh0OiB0KGIpLCBocmVmOiBhdHRyKGIsICdocmVmJykgfTsKICAgICAgICB9KQogICAgICB9LAogICAgICBmb290OiB7CiAgICAgICAgY29weTogdChvbmUoc2NvcGUsICcuYXZ6LWNvcHknKSksCiAgICAgICAgc29jaWFsczogYWxsKHNjb3BlLCAnLmF2ei1zb2NpYWxzIGEnKS5tYXAoZnVuY3Rpb24gKGEpIHsKICAgICAgICAgIHJldHVybiB7IHRleHQ6IHQoYSksIGhyZWY6IGF0dHIoYSwgJ2hyZWYnKSB9OwogICAgICAgIH0pCiAgICAgIH0sCiAgICAgIHRpY2tlcjogW10sCiAgICAgIGxkOiB7IG5hbWU6ICcnLCBkZXNjOiAnJywgc3J2TmFtZTogJycsIHNydkRlc2M6ICcnIH0KICAgIH07CiAgfQoKICAvKiDQkdC10LPRg9GJ0LDRjyDRgdGC0YDQvtC60LAg0LbQuNCy0ZHRgiDQvdC1INCyINGA0LDQt9C80LXRgtC60LUsINCwINC80LDRgdGB0LjQstC-0Lwg0LLQvdGD0YLRgNC4INGB0LrRgNC40L_RgtCwLgogICAgINCg0LDQt9Cx0LjRgNCw0LXQvCDRgtC10LrRgdGC0L7QvCwg0LAg0L3QtSDQstGL0L_QvtC70L3QtdC90LjQtdC8INC60L7QtNCwOiDQstGL0L_QvtC70L3Rj9GC0Ywg0YfRg9C20L7QuSDRgdC60YDQuNC_0YIKICAgICDRgNCw0LTQuCDRh9GC0LXQvdC40Y8g4oCUINC_0LvQvtGF0LDRjyDQuNC00LXRjy4gKi8KICBmdW5jdGlvbiByZWFkVGlja2VyKHNyYykgewogICAgdmFyIG0gPSBzcmMubWF0Y2goL3ZhciBpdGVtcyA9IFxbKFtcc1xTXSo_KVxdOy8pOwogICAgaWYgKCFtKSByZXR1cm4gW107CiAgICB2YXIgb3V0ID0gW10sIHJlID0gL1×7XHMqbGFiZWw6XHMqJyhbXiddKiknLFxzKmhyZWY6XHMqJyhbXiddKiknKFtefV0qKVx9L2csIGhpdDsKICAgIHdoaWxlICgoaGl0ID0gcmUuZXhlYyhtWzFdKSkpIHsKICAgICAgb3V0LnB1c2goeyBsYWJlbDogaGl0WzFdLCBocmVmOiBoaXRbMl0sIGV4dGVybmFsOiBoaXRbM10uaW5kZXhPZignZXh0ZXJuYWwnKSA-IC0xIH0pOwogICAgfQogICAgcmV0dXJuIG91dDsKICB9CgogIGZ1bmN0aW9uIHJlYWRMZChkb2MsIGNmZykgewogICAgdmFyIHMgPSBvbmUoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpOwogICAgaWYgKCFzKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgIChvWydAZ3JhcGgnXSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnV2ViUGFnZScpIHsgY2ZnLmxkLm5hbWUgPSBuLm5hbWUgfHwgJyc7IGNmZy5sZC5kZXNjID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsgfQogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnU2VydmljZScpIHsgY2ZnLmxkLnNydk5hbWUgPSBuLm5hbWUgfHwgJyc7IGNmZy5sZC5zcnZEZXNjID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsgfQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfQoKICAvKiAtLS0tLS0tLS0tINCy0ZHRgNGB0YLQutCwINC_0LDQvdC10LvQuCAtLS0tLS0tLS0tCiAgICAg0KLQtdC80LAgd2ZvbGlvINC60YDQsNGB0LjRgiDQv9C-0LvRjyDQsiDQsdC10LvRi9C5INGC0LXQutGB0YIg0L3QsCDQsdC10LvQvtC8INGE0L7QvdC1LCDQv9C-0Y3RgtC-0LzRgyDRhtCy0LXRgiwKICAgICDRiNGA0LjRhNGCINC4IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yINC30LDQtNCw0Y7RgtGB0Y8g0Y_QstC90L4g0Lgg0YEg0L_RgNC40L7RgNC40YLQtdGC0L7QvCwKICAgICDQsCDQstGB0LUg0YfQsNGB0YLQvdGL0LUg0L_RgNCw0LLQuNC70LAg0L3QsNGH0LjQvdCw0Y7RgtGB0Y8g0YEgI2F2emFyLXJvb3QuICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2emFyLXJvb3QsI2F2emFyLXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnphci1yb290IGlucHV0LCNhdnphci1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6YXItcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2emFyLXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2emFyLXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2emFyLWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emFyLWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0nLAogICAgJyNhdnphci1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnphci1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnphci1yb290IC5hdnphci1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnphci1yb290IC5hdnphci1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnphci1yb290IC5hdnphci1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0nLAogICAgJyNhdnphci1yb290IC5hdnphci1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnphci1yb290IC5hdnphci1zZWNbb3Blbl0-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCRSAgIn0nLAogICAgJyNhdnphci1yb290IC5hdnphci1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJyNhdnphci1yb290IC5hdnphci1mIGlucHV0LCNhdnphci1yb290IC5hdnphci1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnphci1yb290IC5hdnphci1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnphci1yb290IC5hdnphci1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6YXItd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWNhcmQud2Fybntib3JkZXItY29sb3I6I2U2YzIwMDtiYWNrZ3JvdW5kOiNmZmZkZjB9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItaW1ne2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWltZz5pbWd7d2lkdGg6NzBweDtoZWlnaHQ6ODhweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6I2VjZWNlYztmbGV4Om5vbmV9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItaW1nPmltZy5iYWR7b3V0bGluZToycHggc29saWQgI2QzM30nLAogICAgJyNhdnphci1yb290IC5hdnphci1pbWcgLmd7ZmxleDoxfScsCiAgICAnI2F2emFyLXJvb3QgLmF2emFyLWhpbnR7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweH0nLAogICAgJyNhdnphci1yb290IC5hdnphci1ncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTQwcHgsMWZyKSk7Z2FwOjEwcHh9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItZ3JpZCBmaWd1cmV7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6YXItcm9vdCAuYXZ6YXItZ3JpZCBpbWd7d2lkdGg6MTAwJTtoZWlnaHQ6MTIwcHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmJsb2NrfScsCiAgICAnI2F2emFyLW91dHt3aWR0aDoxMDAlO2hlaWdodDoxMTBweDtmb250OjExcHgvMS40IHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztib3JkZXItcmFkaXVzOjhweH0nLAogICAgJyNhdnphci1tc2d7Zm9udC1zaXplOjEzcHh9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIGVzYyhzKSB7CiAgICByZXR1cm4gU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykKICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpCiAgICAgIC5yZXBsYWNlKC8-L2csICcmZ3Q7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7Jyk7CiAgfQogIGZ1bmN0aW9uIGZpZWxkKGxhYmVsLCBwYXRoLCB2YWwsIHR5cGUpIHsKICAgIC8qINC70LjRiNC90LjQuSDQv9C10YDQtdC90L7RgTog0LHRgNCw0YPQt9C10YAg0YHRitC10LTQsNC10YIg0L_QtdGA0LLRi9C5INC_0L7RgdC70LUgPHRleHRhcmVhPiAqLwogICAgdmFyIHRhZyA9IHR5cGUgPT09ICdhcmVhJwogICAgICA_ICc8dGV4dGFyZWEgZGF0YS1wPSInICsgcGF0aCArICciPlxuJyArIGVzYyh2YWwpICsgJzwvdGV4dGFyZWE-JwogICAgICA6ICc8aW5wdXQgZGF0YS1wPSInICsgcGF0aCArICciIHZhbHVlPSInICsgZXNjKHZhbCkgKyAnIj4nOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdnphci1mIj48bGFiZWw-JyArIGxhYmVsICsgJzwvbGFiZWw-JyArIHRhZyArICc8L2Rpdj4nOwogIH0KCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICByb290LmlkID0gJ2F2emFyLXJvb3QnOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocm9vdCk7CgogIC8qIC0tLS0tLS0tLS0g0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLIC0tLS0tLS0tLS0KICAgICDQoNC10LTQsNC60YLQvtGAIHdmb2xpbyDQuCDQtdCz0L4g0YHQvtCx0YHRgtCy0LXQvdC90YvQuSDQuNC90YLQtdGA0YTQtdC50YEg0LLRgdGC0LDQstC70Y_RjtGCINCyINC00LvQuNC90L3Ri9C1CiAgICAg0YHRgtGA0L7QutC4IMKr0LzRj9Cz0LrQuNC1INC_0LXRgNC10L3QvtGB0YvCuyDigJQgVSsyMDBCINC4INGA0L7QtNC90Y8uINCd0LAg0Y3QutGA0LDQvdC1INC40YUg0L3QtSDQstC40LTQvdC-LAogICAgINCwINCyINCw0LTRgNC10YHQtSDRhNCw0LnQu9CwINC-0L3QuCDQu9C-0LzQsNGO0YIg0YHRgdGL0LvQutGDOiDQsdGA0LDRg9C30LXRgCDQvtGC0LLQtdGH0LDQtdGCIMKrRm9ybWF0IGVycm9ywrssCiAgICAg0LrQsNGA0YLQuNC90LrQsCDQuNC70Lgg0LLQuNC00LXQviDQvdC1INCz0YDRg9C30Y_RgtGB0Y8uINCd0Lgg0LIg0L7QtNC90L7QvCDQv9C-0LvQtSDQv9Cw0L3QtdC70Lgg0LjQvCDQtNC10LvQsNGC0YwKICAgICDQvdC10YfQtdCz0L4sINC_0L7RjdGC0L7QvNGDINCy0YvRh9C40YnQsNC10Lwg0LjRhSDQuCDQv9GA0Lgg0LLQstC-0LTQtSwg0Lgg0YHQv9C70L7RiNC90YvQvCDQv9GA0L7RhdC-0LTQvtC8INC_0LXRgNC10LQKICAgICDRgdCx0L7RgNC60L7QuSDigJQg0LfQvdCw0YfQtdC90LjQtSDQvNC-0LPQu9C-INC_0L7Qv9Cw0YHRgtGMINCyINC_0L7Qu9C1INC80LjQvNC-INGB0L7QsdGL0YLQuNC5INCy0LLQvtC00LAuICovCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBaVyA9IC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZzsKICAgIGZ1bmN0aW9uIHNjcnViKGVsKSB7CiAgICAgIGlmICghZWwgfHwgdHlwZW9mIGVsLnZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuIDA7CiAgICAgIHZhciB2ID0gZWwudmFsdWUucmVwbGFjZShaVywgJycpOwogICAgICBpZiAodiA9PT0gZWwudmFsdWUpIHJldHVybiAwOwogICAgICBlbC52YWx1ZSA9IHY7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uIChlKSB7IHNjcnViKGUudGFyZ2V0KTsgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBzY3J1YihlbCk7IH0sIDApOwogICAgfSwgdHJ1ZSk7CiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCx0ZXh0YXJlYScpLCBuID0gMCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykgbiArPSBzY3J1YihlbHNbaV0pOwogICAgICBpZiAobikgY29uc29sZS53YXJuKCdBVlo6INGD0LHRgNCw0L3RiyDQvdC10LLQuNC00LjQvNGL0LUg0YHQuNC80LLQvtC70Ysg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C-0LvQtdC5OiAnICsgbik7CiAgICB9LCB0cnVlKTsKICB9KSgpOwoKICBmdW5jdGlvbiBtc2cocykgeyB2YXIgZSA9IHJvb3QucXVlcnlTZWxlY3RvcignI2F2emFyLW1zZycpOyBpZiAoZSkgZS50ZXh0Q29udGVudCA9IHM7IH0KCiAgdmFyIGNmZyA9IG51bGw7CgogIGZ1bmN0aW9uIHBhZ2VTb3VyY2UoKSB7CiAgICByZXR1cm4gZmV0Y2gobG9jYXRpb24ucGF0aG5hbWUgKyAnP3Q9JyArIERhdGUubm93KCksIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5vayA_IHIudGV4dCgpIDogUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCfQutC-0LQgJyArIHIuc3RhdHVzKSk7IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSDRhNC-0YDQvNCwIC0tLS0tLS0tLS0gKi8KCiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICB2YXIgaCA9ICc8c3R5bGU-JyArIGNzcyArICc8L3N0eWxlPjxkaXYgaWQ9ImF2emFyLXdpbiI-JyArCiAgICAgICc8ZGl2IGlkPSJhdnphci1oZWFkIj48aDI-0J_QsNC90LXQu9GMINCw0YDRhdC40YLQtdC60YLRg9GA0L3QvtC5INGB0YrRkdC80LrQuDwvaDI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnphci1iIiBpZD0iYXZ6YXItY2xvc2UiPtCX0LDQutGA0YvRgtGMPC9idXR0b24-PC9kaXY-JyArCiAgICAgICc8ZGl2IGlkPSJhdnphci1ib2R5Ij4nOwoKICAgIGggKz0gJzxwIGNsYXNzPSJhdnphci1oaW50Ij7Qn9GA0LDQstC60Lgg0L3QtSDQv9GD0LHQu9C40LrRg9GO0YLRgdGPLiDQn9Cw0L3QtdC70Ywg0YHQvtCx0LXRgNGR0YIg0LrQvtC0INCx0LvQvtC60LAg0YbQtdC70LjQutC-0Lwg4oCUICcgKwogICAgICAn0LLRgdGC0LDQstC40YLQtSDQtdCz0L4g0L_QvtCy0LXRgNGFIEhUTUwt0LHQu9C-0LrQsCDRgdGC0YDQsNC90LjRhtGLINCyINC60L7QvdGB0YLRgNGD0LrRgtC-0YDQtS48L3A-JzsKCiAgICAvKiDQqNCw0L_QutCwICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXItc2VjIiBvcGVuPjxzdW1tYXJ5PtCo0LDQv9C60LA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXItaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00LfQsNCz0L7Qu9C-0LLQvtC6ICjQutC70Y7Rh9C10LLQsNGPINGE0YDQsNC30LAsINGB0YLQvtC40YIg0LLQvdGD0YLRgNC4IEgxKScsICdoZXJvLmV5ZWJyb3cnLCBjZmcuaGVyby5leWVicm93KSArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphci1yb3ciPicgKwogICAgICBmaWVsZCgn0J_QtdGA0LLQsNGPINGB0YLRgNC-0LrQsCDQuNC80LXQvdC4JywgJ2hlcm8ubGluZTEnLCBjZmcuaGVyby5saW5lMSkgKwogICAgICBmaWVsZCgn0JLRgtC-0YDQsNGPINGB0YLRgNC-0LrQsCDQuNC80LXQvdC4ICjQutGD0YDRgdC40LIpJywgJ2hlcm8ubGluZTInLCBjZmcuaGVyby5saW5lMikgKyAnPC9kaXY-JyArCiAgICAgIGZpZWxkKCfQn9C-0LTQt9Cw0LPQvtC70L7QstC-0LonLCAnaGVyby5zdWInLCBjZmcuaGVyby5zdWIsICdhcmVhJykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXItY2FyZCI-PGg0PtCk0L7QvSDQvtCx0LvQvtC20LrQuDwvaDQ-PGRpdiBjbGFzcz0iYXZ6YXItaW1nIj48aW1nIHNyYz0iJyArIGVzYyhjZmcuaGVyby5iZykgKyAnIiBkYXRhLXByZXY9Imhlcm8uYmciIGFsdD0iIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImciPicgKyBmaWVsZCgn0JDQtNGA0LXRgSDRhNC-0YLQviAo0L_Rg9GB0YLQviDigJQg0L7QsdC70L7QttC60LAg0L_QtdGA0LLQvtCz0L4g0L_RgNC-0LXQutGC0LApJywgJ2hlcm8uYmcnLCBjZmcuaGVyby5iZykgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6YXItYiIgZGF0YS1waWNrPSJoZXJvLmJnIj7QktGL0LHRgNCw0YLRjCDQutCw0LTRgDwvYnV0dG9uPjwvZGl2PjwvZGl2PjwvZGl2PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXItY2FyZCI-PGg0PtCk0L7QvSDRhNC40L3QsNC70LA8L2g0PjxkaXYgY2xhc3M9ImF2emFyLWltZyI-PGltZyBzcmM9IicgKyBlc2MoY2ZnLmhlcm8uY3RhQmcpICsgJyIgZGF0YS1wcmV2PSJoZXJvLmN0YUJnIiBhbHQ9IiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsgZmllbGQoJ9CQ0LTRgNC10YEg0YTQvtGC0L4gKNC_0YPRgdGC0L4g4oCUINC-0LHQu9C-0LbQutCwINGC0YDQtdGC0YzQtdCz0L4g0L_RgNC-0LXQutGC0LApJywgJ2hlcm8uY3RhQmcnLCBjZmcuaGVyby5jdGFCZykgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6YXItYiIgZGF0YS1waWNrPSJoZXJvLmN0YUJnIj7QktGL0LHRgNCw0YLRjCDQutCw0LTRgDwvYnV0dG9uPjwvZGl2PjwvZGl2PjwvZGl2PicgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JHQtdCz0YPRidCw0Y8g0YHRgtGA0L7QutCwICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXItc2VjIj48c3VtbWFyeT7QkdC10LPRg9GJ0LDRjyDRgdGC0YDQvtC60LAgKCcgKyBjZmcudGlja2VyLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnphci1oaW50Ij7QodCy0L7QuCDRgdGC0YDQsNC90LjRhtGLINC-0YLQutGA0YvQstCw0Y7RgtGB0Y8g0LIg0YLQvtC5INC20LUg0LLQutC70LDQtNC60LUsINGH0YPQttC40LUg0YHQsNC50YLRiyDigJQg0LIg0L3QvtCy0L7QuS4gJyArCiAgICAgICfQn9Cw0L3QtdC70Ywg0L7Qv9GA0LXQtNC10LvRj9C10YIg0Y3RgtC-INC_0L4g0LDQtNGA0LXRgdGDINGB0LDQvNCwLjwvcD4nOwogICAgY2ZnLnRpY2tlci5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emFyLWNhcmQiPjxoND7Qn9GD0L3QutGCICcgKyAoaSArIDEpICsgJzwvaDQ-PGRpdiBjbGFzcz0iYXZ6YXItcm93Ij4nICsKICAgICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0YwnLCAndGlja2VyLicgKyBpICsgJy5sYWJlbCcsIHgubGFiZWwpICsKICAgICAgICBmaWVsZCgn0JDQtNGA0LXRgScsICd0aWNrZXIuJyArIGkgKyAnLmhyZWYnLCB4LmhyZWYpICsgJzwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCa0LDQtNGA0YsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphci1zZWMiPjxzdW1tYXJ5PtCa0LDQtNGA0Ysg0LPQsNC70LXRgNC10LggKCcgKyBjZmcuc2hvdHMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXItaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnZ2FsbGVyeUxhYmVsJywgY2ZnLmdhbGxlcnlMYWJlbCkgKwogICAgICAnPHAgY2xhc3M9ImF2emFyLWhpbnQiPtCf0L7QtNC_0LjRgdGMINCy0LjQtNC90LAg0L_QvtC0INC60LDQtNGA0L7QvCDQuCDRg9GF0L7QtNC40YIg0LIg0YDQsNC30LzQtdGC0LrRgyDRgdC70L7QstC-INCyINGB0LvQvtCy0L4uICcgKwogICAgICAn0KHRgdGL0LvQutGDINGB0YLQsNCy0YzRgtC1INGC0L7Qu9GM0LrQviDQtdGB0LvQuCDRgyDQvtCx0YrQtdC60YLQsCDQtdGB0YLRjCDRgdCy0L7RjyDRgdGC0YDQsNC90LjRhtCwIOKAlCDQuNC90LDRh9C1INC-0YHRgtCw0LLRjNGC0LUg0L_QvtC70LUg0L_Rg9GB0YLRi9C8LjwvcD4nOwogICAgY2ZnLnNob3RzLmZvckVhY2goZnVuY3Rpb24gKHMsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXItY2FyZCIgaWQ9ImF2emFyLXNob3QtJyArIGkgKyAnIj48aDQ-0JrQsNC00YAgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6YXItaW1nIj48aW1nIHNyYz0iJyArIGVzYyhzLnNyYykgKyAnIiBkYXRhLXByZXY9InNob3RzLicgKyBpICsgJy5zcmMiIGFsdD0iIj4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iZyI-JyArCiAgICAgICAgZmllbGQoJ9Cf0L7QtNC_0LjRgdGMINC_0L7QtCDQutCw0LTRgNC-0LwnLCAnc2hvdHMuJyArIGkgKyAnLmNhcCcsIHMuY2FwKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0LrQsNC00YDQsCAoYWx0LCDQtNC70Y8g0L_QvtC40YHQutCwINC4INC90LXQt9GA0Y_Rh9C40YUpJywgJ3Nob3RzLicgKyBpICsgJy5hbHQnLCBzLmFsdCkgKwogICAgICAgIGZpZWxkKCfQodGB0YvQu9C60LAg0L3QsCDRgdGC0YDQsNC90LjRhtGDINC-0LHRitC10LrRgtCwICjQvNC-0LbQvdC-INC_0YPRgdGC0L4pJywgJ3Nob3RzLicgKyBpICsgJy5ocmVmJywgcy5ocmVmKSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEg0YTQvtGC0L7Qs9GA0LDRhNC40LgnLCAnc2hvdHMuJyArIGkgKyAnLnNyYycsIHMuc3JjKSArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2emFyLWIiIGRhdGEtcGljaz0ic2hvdHMuJyArIGkgKyAnIj7QktGL0LHRgNCw0YLRjCDQutCw0LTRgCDRgdC-INGB0YLRgNCw0L3QuNGG0Ysg0L7QsdGK0LXQutGC0LA8L2J1dHRvbj4nICsKICAgICAgICAnPC9kaXY-PC9kaXY-PC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0J_RgNC-0LXQutGC0YsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphci1zZWMiPjxzdW1tYXJ5PtCf0YDQvtC10LrRgtGLICgnICsgY2ZnLnByb2plY3RzLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCcsICdwcm9qU2VjLmxhYmVsJywgY2ZnLnByb2pTZWMubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCcsICdwcm9qU2VjLmgyJywgY2ZnLnByb2pTZWMuaDIpICsgJzwvZGl2Pic7CiAgICBjZmcucHJvamVjdHMuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphci1jYXJkIj48aDQ-0J_RgNC-0LXQutGCICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLWltZyI-PGltZyBzcmM9IicgKyBlc2MocC5pbWcpICsgJyIgZGF0YS1wcmV2PSJwcm9qZWN0cy4nICsgaSArICcuaW1nIiBhbHQ9IiI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPicgKwogICAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ3Byb2plY3RzLicgKyBpICsgJy5uYW1lJywgcC5uYW1lKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUnLCAncHJvamVjdHMuJyArIGkgKyAnLmRlc2MnLCBwLmRlc2MsICdhcmVhJykgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBINGB0YLRgNCw0L3QuNGG0Ysg0L_RgNC-0LXQutGC0LAnLCAncHJvamVjdHMuJyArIGkgKyAnLmhyZWYnLCBwLmhyZWYpICsKICAgICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YHRgdGL0LvQutC4JywgJ3Byb2plY3RzLicgKyBpICsgJy5tb3JlJywgcC5tb3JlKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0L7QsdC70L7QttC60LggKGFsdCknLCAncHJvamVjdHMuJyArIGkgKyAnLmFsdCcsIHAuYWx0KSArCiAgICAgICAgZmllbGQoJ9CQ0LTRgNC10YEg0L7QsdC70L7QttC60LgnLCAncHJvamVjdHMuJyArIGkgKyAnLmltZycsIHAuaW1nKSArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2emFyLWIiIGRhdGEtcGljaz0icHJvamVjdHMuJyArIGkgKyAnIj7QktGL0LHRgNCw0YLRjCDQutCw0LTRgCDRgdC-INGB0YLRgNCw0L3QuNGG0Ysg0L_RgNC-0LXQutGC0LA8L2J1dHRvbj4nICsKICAgICAgICAnPC9kaXY-PC9kaXY-PC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0J_Rg9Cx0LvQuNC60LDRhtC40Y8gKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphci1zZWMiPjxzdW1tYXJ5PtCf0YPQsdC70LjQutCw0YbQuNGPPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCcsICdhd2FyZC5sYWJlbCcsIGNmZy5hd2FyZC5sYWJlbCkgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YHRgdGL0LvQutC4JywgJ2F3YXJkLmxpbmtUZXh0JywgY2ZnLmF3YXJkLmxpbmtUZXh0KSArICc8L2Rpdj4nICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiAo0LzQvtC20L3QviDQv9C10YDQtdC90L7RgSDRgdGC0YDQvtC60Lgg0YLQtdCz0L7QvCBiciknLCAnYXdhcmQuaDInLCBjZmcuYXdhcmQuaDIsICdhcmVhJykgKwogICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdhd2FyZC50ZXh0JywgY2ZnLmF3YXJkLnRleHQsICdhcmVhJykgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgSDRgdGB0YvQu9C60LgnLCAnYXdhcmQubGlua0hyZWYnLCBjZmcuYXdhcmQubGlua0hyZWYpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCk0L7RgNC80LDRgtGLICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXItc2VjIj48c3VtbWFyeT7Qp9GC0L4g0YHQvdC40LzQsNGOICgnICsgY2ZnLmZvcm1hdHMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXItaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXItcm93Ij4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2ZtdFNlYy5sYWJlbCcsIGNmZy5mbXRTZWMubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCcsICdmbXRTZWMuaDInLCBjZmcuZm10U2VjLmgyKSArICc8L2Rpdj4nOwogICAgY2ZnLmZvcm1hdHMuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphci1jYXJkIj48aDQ-0KTQvtGA0LzQsNGCICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9Cd0LDQt9Cy0LDQvdC40LUnLCAnZm9ybWF0cy4nICsgaSArICcuaDMnLCBmLmgzKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUnLCAnZm9ybWF0cy4nICsgaSArICcucCcsIGYucCwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8cCBjbGFzcz0iYXZ6YXItaGludCI-0J3QsNC30LLQsNC90LjRjyDRhNC-0YDQvNCw0YLQvtCyINGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDINGD0YHQu9GD0LPQuCDRgdC_0LjRgdC60L7QvCDQv9GA0LXQtNC70L7QttC10L3QuNC5LjwvcD4nICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCf0L7QtNGF0L7QtCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emFyLXNlYyI-PHN1bW1hcnk-0JrQsNC6INGPINGA0LDQsdC-0YLQsNGOICgnICsgY2ZnLmFkdi5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphci1pbiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphci1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnYWR2U2VjLmxhYmVsJywgY2ZnLmFkdlNlYy5sYWJlbCkgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INGA0LDQt9C00LXQu9CwJywgJ2FkdlNlYy5oMicsIGNmZy5hZHZTZWMuaDIpICsgJzwvZGl2Pic7CiAgICBjZmcuYWR2LmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXItY2FyZCI-PGg0PtCf0YPQvdC60YIgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6YXItcm93Ij4nICsKICAgICAgICBmaWVsZCgn0J3QvtC80LXRgCcsICdhZHYuJyArIGkgKyAnLm51bScsIGEubnVtKSArCiAgICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdhZHYuJyArIGkgKyAnLmgzJywgYS5oMykgKyAnPC9kaXY-JyArCiAgICAgICAgZmllbGQoJ9Ci0LXQutGB0YInLCAnYWR2LicgKyBpICsgJy5wJywgYS5wLCAnYXJlYScpICsgJzwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIC8qINCh0YLQvtC40LzQvtGB0YLRjCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emFyLXNlYyI-PHN1bW1hcnk-0KHRgtC-0LjQvNC-0YHRgtGMPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnphci1oaW50Ij7QptC10L3QsCDQsiDRgNCw0LfQvNC10YLQutC1INC90LUg0L7QsdGK0Y_QstC70Y_QtdGC0YHRjyDQvdCw0LzQtdGA0LXQvdC90L46INCw0YDRhdC40YLQtdC60YLRg9GA0L3QvtC5INGB0YrRkdC80LrQuCDQvdC10YIgJyArCiAgICAgICfQsiDQv9GA0LDQudGB0LUuINCV0YHQu9C4INCy0L_QuNGI0LXRgtC1INGB0Y7QtNCwINGB0YPQvNC80YMg4oCUINC-0L3QsCDQvtGB0YLQsNC90LXRgtGB0Y8g0L7QsdGL0YfQvdGL0Lwg0YLQtdC60YHRgtC-0LwsINCyINGA0LDQt9C80LXRgtC60YMg0L3QtSDRg9C50LTRkdGCLjwvcD4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCcsICdjb3N0LmxhYmVsJywgY2ZnLmNvc3QubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdjb3N0LmgyJywgY2ZnLmNvc3QuaDIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdjb3N0LnRleHQnLCBjZmcuY29zdC50ZXh0LCAnYXJlYScpICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emFyLXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDQutC90L7Qv9C60LgnLCAnY29zdC5idG4nLCBjZmcuY29zdC5idG4pICsKICAgICAgZmllbGQoJ9CQ0LTRgNC10YEg0LrQvdC-0L_QutC4JywgJ2Nvc3QuYnRuSHJlZicsIGNmZy5jb3N0LmJ0bkhyZWYpICsgJzwvZGl2PicgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgLyog0JLQvtC_0YDQvtGB0YsgKi8KICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphci1zZWMiPjxzdW1tYXJ5PtCS0L7Qv9GA0L7RgdGLINC4INC-0YLQstC10YLRiyAoJyArIGNmZy5mYXEubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXItaW4iPicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXItcm93Ij4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINGA0LDQt9C00LXQu9CwJywgJ2ZhcVNlYy5sYWJlbCcsIGNmZy5mYXFTZWMubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCcsICdmYXFTZWMuaDInLCBjZmcuZmFxU2VjLmgyKSArICc8L2Rpdj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnphci1oaW50Ij7QktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0Ysg0YPRhdC-0LTRj9GCINCyINGA0LDQt9C80LXRgtC60YMg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-IOKAlCDQvtGC0LTQtdC70YzQvdGL0YUg0L_QvtC70LXQuSAnICsKICAgICAgJ8Kr0LTQu9GPINC_0L7QuNGB0LrQsMK7INC30LTQtdGB0Ywg0L3QtdGCINC4INCx0YvRgtGMINC90LUg0LTQvtC70LbQvdC-LjwvcD4nOwogICAgY2ZnLmZhcS5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emFyLWNhcmQiPjxoND7QktC-0L_RgNC-0YEgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0JLQvtC_0YDQvtGBJywgJ2ZhcS4nICsgaSArICcucScsIGYucSkgKwogICAgICAgIGZpZWxkKCfQntGC0LLQtdGCICjQvNC-0LbQvdC-IEhUTUwpJywgJ2ZhcS4nICsgaSArICcuYScsIGYuYSwgJ2FyZWEnKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQn9GA0LjQt9GL0LIg0Lgg0YTRg9GC0LXRgCAqLwogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emFyLXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyINC4INGE0YPRgtC10YA8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXItaW4iPicgKwogICAgICBmaWVsZCgn0JfQsNCz0L7Qu9C-0LLQvtC6INC_0YDQuNC30YvQstCwICjQvNC-0LbQvdC-INC_0LXRgNC10L3QvtGBINGB0YLRgNC-0LrQuCDRgtC10LPQvtC8IGJyKScsICdjdGEuaDInLCBjZmcuY3RhLmgyLCAnYXJlYScpOwogICAgY2ZnLmN0YS5idG5zLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgaCArPSAnPGRpdiBjbGFzcz0iYXZ6YXItcm93Ij4nICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJyDigJQg0L3QsNC00L_QuNGB0YwnLCAnY3RhLmJ0bnMuJyArIGkgKyAnLnRleHQnLCBiLnRleHQpICsKICAgICAgICBmaWVsZCgn0JrQvdC-0L_QutCwICcgKyAoaSArIDEpICsgJyDigJQg0LDQtNGA0LXRgScsICdjdGEuYnRucy4nICsgaSArICcuaHJlZicsIGIuaHJlZikgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSBmaWVsZCgn0JrQvtC_0LjRgNCw0LnRgicsICdmb290LmNvcHknLCBjZmcuZm9vdC5jb3B5KTsKICAgIGNmZy5mb290LnNvY2lhbHMuZm9yRWFjaChmdW5jdGlvbiAocywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphci1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQn9GA0L7RhNC40LvRjCAnICsgKGkgKyAxKSArICcg4oCUINC90LDQtNC_0LjRgdGMJywgJ2Zvb3Quc29jaWFscy4nICsgaSArICcudGV4dCcsIHMudGV4dCkgKwogICAgICAgIGZpZWxkKCfQn9GA0L7RhNC40LvRjCAnICsgKGkgKyAxKSArICcg4oCUINCw0LTRgNC10YEnLCAnZm9vdC5zb2NpYWxzLicgKyBpICsgJy5ocmVmJywgcy5ocmVmKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICAvKiDQoNCw0LfQvNC10YLQutCwICovCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXItc2VjIj48c3VtbWFyeT7QoNCw0LfQvNC10YLQutCwINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emFyLWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnphci1oaW50Ij7Ql9Cw0LPQvtC70L7QstC-0Log0Lgg0L7Qv9C40YHQsNC90LjQtSDRgdCw0LzQvtC5INGB0YLRgNCw0L3QuNGG0YsgKNGC0L4sINGH0YLQviDQstC40LTQvdC-INCyINCy0YvQtNCw0YfQtSkgJyArCiAgICAgICfQv9GA0LDQstGP0YLRgdGPINC90LUg0LfQtNC10YHRjCwg0LAg0LIg0L3QsNGB0YLRgNC-0LnQutCw0YUg0YHRgtGA0LDQvdC40YbRiyB3Zm9saW8uPC9wPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLINCyINGA0LDQt9C80LXRgtC60LUnLCAnbGQubmFtZScsIGNmZy5sZC5uYW1lKSArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0Ysg0LIg0YDQsNC30LzQtdGC0LrQtScsICdsZC5kZXNjJywgY2ZnLmxkLmRlc2MsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCAnbGQuc3J2TmFtZScsIGNmZy5sZC5zcnZOYW1lKSArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGD0YHQu9GD0LPQuCcsICdsZC5zcnZEZXNjJywgY2ZnLmxkLnNydkRlc2MsICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPC9kaXY-PGRpdiBpZD0iYXZ6YXItZm9vdCI-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnphci1iIHAiIGlkPSJhdnphci1idWlsZCI-0KHQvtCx0YDQsNGC0Ywg0LrQvtC0INGB0YLRgNCw0L3QuNGG0Ys8L2J1dHRvbj4nICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emFyLWIiIGlkPSJhdnphci10ZXN0Ij7Qn9GA0L7QstC10YDQutCwINCx0LXQtyDQv9GA0LDQstC-0Lo8L2J1dHRvbj4nICsKICAgICAgJzxzcGFuIGlkPSJhdnphci1tc2ciPjwvc3Bhbj48L2Rpdj4nICsKICAgICAgJzxkaXYgc3R5bGU9InBhZGRpbmc6MCAyMHB4IDE2cHgiPjx0ZXh0YXJlYSBpZD0iYXZ6YXItb3V0IiByZWFkb25seT48L3RleHRhcmVhPjwvZGl2PjwvZGl2Pic7CgogICAgcm9vdC5pbm5lckhUTUwgPSBoOwogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6YXItY2xvc2UnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyByb290LnJlbW92ZSgpOyB9OwoKICAgIC8qINC20LjQstC-0Lkg0L_RgNC10LTQv9GA0L7RgdC80L7RgtGAINC60LDRgNGC0LjQvdC60Lgg0L_RgNC4INC_0YDQsNCy0LrQtSDQsNC00YDQtdGB0LAgKi8KICAgIGFsbChyb290LCAnaW5wdXRbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGlucCkgewogICAgICB2YXIgcCA9IGlucC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpOwogICAgICBpZiAoIS9cLihzcmN8aW1nKSQvLnRlc3QocCkpIHJldHVybjsKICAgICAgaW5wLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgcCArICciXScpOwogICAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IGlucC52YWx1ZTsKICAgICAgfSk7CiAgICB9KTsKCiAgICAvKiDRgNCw0LfQvNC10YDRiyDQutCw0LTRgNCwINC40LfQvNC10YDRj9C10Lwg0YHQsNC80Lg6INCy0YDQsNGC0Ywg0LIg0YDQsNC30LzQtdGC0LrQtSDQvdC10LvRjNC30Y8sCiAgICAgICDQsCDRgNGD0LrQsNC80Lgg0L7QvdC4INGD0YHRgtCw0YDQtdCy0LDRjtGCIOKAlCDRgtCw0Log0YPQttC1INCx0YvQu9C-INC90LAg0LjQvdGC0LXRgNGM0LXRgNC90L7QuSAqLwogICAgZnVuY3Rpb24gbWVhc3VyZSh1cmwpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB2YXIgaW0gPSBuZXcgSW1hZ2UoKTsKICAgICAgICBpbS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7IHJlcyh7IHc6IGltLm5hdHVyYWxXaWR0aCwgaDogaW0ubmF0dXJhbEhlaWdodCB9KTsgfTsKICAgICAgICBpbS5vbmVycm9yID0gZnVuY3Rpb24gKCkgeyByZXMobnVsbCk7IH07CiAgICAgICAgaW0uc3JjID0gdXJsOwogICAgICB9KTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINCy0YvQsdC-0YAg0LrQsNC00YDQsCDRgdC-INGB0YLRgNCw0L3QuNGG0Ysg0L7QsdGK0LXQutGC0LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGFicyh1KSB7CiAgICAgIGlmICghdSkgcmV0dXJuICcnOwogICAgICBpZiAodS5pbmRleE9mKCcvLycpID09PSAwKSByZXR1cm4gJ2h0dHBzOicgKyB1OwogICAgICByZXR1cm4gdTsKICAgIH0KCiAgICBmdW5jdGlvbiBmcm9tU3Jjc2V0KHNldCwgc3JjKSB7CiAgICAgIGlmICghc2V0KSByZXR1cm4gYWJzKHNyYyk7CiAgICAgIHZhciBiZXN0ID0gbnVsbDsKICAgICAgc2V0LnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbiAocGFydCkgewogICAgICAgIHZhciBiaXRzID0gcGFydC50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgIHZhciB3ID0gcGFyc2VJbnQoKGJpdHNbMV0gfHwgJycpLnJlcGxhY2UoJ3cnLCAnJyksIDEwKTsKICAgICAgICBpZiAoIXcgfHwgdyA-IE1BWFcpIHJldHVybjsKICAgICAgICBpZiAoIWJlc3QgfHwgdyA-IGJlc3QudykgYmVzdCA9IHsgdzogdywgdXJsOiBhYnMoYml0c1swXSkgfTsKICAgICAgfSk7CiAgICAgIHJldHVybiBiZXN0ID8gYmVzdC51cmwgOiBhYnMoc3JjKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzaG90c0Zyb20odXJsKSB7CiAgICAgIHJldHVybiBmZXRjaCh1cmwsIHsgY3JlZGVudGlhbHM6ICdvbWl0JyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm9rID8gci50ZXh0KCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ9C60L7QtCAnICsgci5zdGF0dXMpKTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICd0ZXh0L2h0bWwnKTsKICAgICAgICAgIHZhciBvdXQgPSBbXSwgc2VlbiA9IHt9OwogICAgICAgICAgYWxsKGRvYywgJ2ltZycpLmZvckVhY2goZnVuY3Rpb24gKGltKSB7CiAgICAgICAgICAgIHZhciB1ID0gZnJvbVNyY3NldChpbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3Jjc2V0JykgfHwgaW0uZ2V0QXR0cmlidXRlKCdzcmNzZXQnKSwKICAgICAgICAgICAgICBpbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJykgfHwgaW0uZ2V0QXR0cmlidXRlKCdzcmMnKSk7CiAgICAgICAgICAgIGlmICghdSB8fCB1LmluZGV4T2YoJ2kud2ZvbGlvLnJ1JykgPCAwIHx8IHNlZW5bdV0pIHJldHVybjsKICAgICAgICAgICAgc2Vlblt1XSA9IDE7IG91dC5wdXNoKHUpOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gb3V0OwogICAgICAgIH0pOwogICAgfQoKICAgIHZhciBwaWNrTGFzdCA9ICcnOwogICAgYWxsKHJvb3QsICdidXR0b25bZGF0YS1waWNrXScpLmZvckVhY2goZnVuY3Rpb24gKGJ0bikgewogICAgICBidG4ub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgYmFzZSA9IGJ0bi5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGljaycpOwogICAgICAgIHZhciBocmVmSW5wID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wPSInICsgYmFzZSArICcuaHJlZiJdJyk7CiAgICAgICAgdmFyIHVybCA9IGhyZWZJbnAgPyBocmVmSW5wLnZhbHVlLnRyaW0oKSA6ICcnOwogICAgICAgIC8qINGE0L7QvdGLINC-0LHQu9C-0LbQutC4INC4INGE0LjQvdCw0LvQsDog0YHQstC-0LXQuSDRgdGC0YDQsNC90LjRhtGLINGDINC90LjRhSDQvdC10YIg4oCUINGB0L_RgNCw0YjQuNCy0LDQtdC8INCw0LTRgNC10YEgKi8KICAgICAgICBpZiAoIWhyZWZJbnAgJiYgL15oZXJvXC4vLnRlc3QoYmFzZSkpIHsKICAgICAgICAgIHVybCA9ICh3aW5kb3cucHJvbXB0KCfQkNC00YDQtdGBINGB0YLRgNCw0L3QuNGG0YssINGBINC60L7RgtC-0YDQvtC5INCy0LfRj9GC0Ywg0LrQsNC00YA6JywgcGlja0xhc3QgfHwgJ2h0dHBzOi8vYXZhbnphdG8ucnUvYXJjaGl0ZWN0dXJlX3Nob290aW5nJykgfHwgJycpLnRyaW0oKTsKICAgICAgICAgIGlmICghdXJsKSByZXR1cm47CiAgICAgICAgICBwaWNrTGFzdCA9IHVybDsKICAgICAgICB9CiAgICAgICAgaWYgKCF1cmwpIHsgbXNnKCfQoyDRjdGC0L7Qs9C-INC60LDQtNGA0LAg0L3QtSDQt9Cw0LTQsNC9INCw0LTRgNC10YEg0YHRgtGA0LDQvdC40YbRiyDQvtCx0YrQtdC60YLQsCDigJQg0LLRi9Cx0LjRgNCw0YLRjCDQvdC1INC40Lcg0YfQtdCz0L4uJyk7IHJldHVybjsgfQogICAgICAgIHZhciBib3ggPSBidG4ucGFyZW50Tm9kZTsKICAgICAgICB2YXIgaGVhZCA9IGJveC5xdWVyeVNlbGVjdG9yKCcuYXZ6YXItcGlja2hlYWQnKTsKICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgIGhlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7CiAgICAgICAgICBoZWFkLmNsYXNzTmFtZSA9ICdhdnphci1oaW50IGF2emFyLXBpY2toZWFkJzsKICAgICAgICAgIGJveC5hcHBlbmRDaGlsZChoZWFkKTsKICAgICAgICB9CiAgICAgICAgdmFyIGdyaWQgPSBib3gucXVlcnlTZWxlY3RvcignLmF2emFyLWdyaWQnKTsKICAgICAgICBpZiAoZ3JpZCkgZ3JpZC5yZW1vdmUoKTsKICAgICAgICBoZWFkLnRleHRDb250ZW50ID0gJ9CX0LDQs9GA0YPQttCw0Y4gJyArIHVybCArICfigKYnOwogICAgICAgIHNob3RzRnJvbSh1cmwpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHsKICAgICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHsgaGVhZC50ZXh0Q29udGVudCA9ICfQmtCw0LTRgNC-0LIg0L3QtSDQvdCw0YjQu9C-0YHRjC4nOyByZXR1cm47IH0KICAgICAgICAgIGhlYWQudGV4dENvbnRlbnQgPSAn0JLRi9Cx0LXRgNC40YLQtSDQutCw0LTRgCAoJyArIGxpc3QubGVuZ3RoICsgJyknOwogICAgICAgICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgIGcuY2xhc3NOYW1lID0gJ2F2emFyLWdyaWQnOwogICAgICAgICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uICh1KSB7CiAgICAgICAgICAgIHZhciBmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmlndXJlJyk7CiAgICAgICAgICAgIHZhciBpbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgICAgICAgICBpbS5zcmMgPSB1OyBpbS5sb2FkaW5nID0gJ2xhenknOwogICAgICAgICAgICBmLmFwcGVuZENoaWxkKGltKTsKICAgICAgICAgICAgZi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciB0YXJnZXQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy5zcmMiXScpCiAgICAgICAgICAgICAgICB8fCByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy5pbWciXScpCiAgICAgICAgICAgICAgICB8fCByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJyJdJyk7CiAgICAgICAgICAgICAgaWYgKHRhcmdldCkgewogICAgICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gdTsKICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdpbWdbZGF0YS1wcmV2PSInICsgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1wJykgKyAnIl0nKTsKICAgICAgICAgICAgICAgIGlmIChwcmV2KSBwcmV2LnNyYyA9IHU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGcucmVtb3ZlKCk7IGhlYWQudGV4dENvbnRlbnQgPSAn0JrQsNC00YAg0LLRi9Cx0YDQsNC9Lic7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoZik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJveC5hcHBlbmRDaGlsZChnKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBoZWFkLnRleHRDb250ZW50ID0gJ9Cd0LUg0L7RgtC60YDRi9C70L7RgdGMOiAnICsgZS5tZXNzYWdlOyB9KTsKICAgICAgfTsKICAgIH0pOwoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YAg0LfQvdCw0YfQtdC90LjQuSDQuNC3INGE0L7RgNC80YsgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIHNldFBhdGgob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgdmFyIHAgPSBwYXRoLnNwbGl0KCcuJyksIG8gPSBvYmo7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5sZW5ndGggLSAxOyBpKyspIG8gPSBvW3BbaV1dOwogICAgICBvW3BbcC5sZW5ndGggLSAxXV0gPSB2YWw7CiAgICB9CgogICAgZnVuY3Rpb24gY29sbGVjdCgpIHsKICAgICAgdmFyIGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNmZykpOwogICAgICBhbGwocm9vdCwgJ1tkYXRhLXBdJykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICBzZXRQYXRoKGQsIGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1wJyksIGVsLnZhbHVlLnRyaW0oKSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZDsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINC30LDQv9C40YHRjCDQsiDRgNCw0LfQvNC10YLQutGDIC0tLS0tLS0tLS0KICAgICAgINCf0LjRiNC10Lwg0LIg0YLQvtGCINGC0LXQutGB0YLQvtCy0YvQuSDRg9C30LXQuywg0LPQtNC1INGC0LXQutGB0YIg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LXRgdGC0YwuCiAgICAgICDQodGC0LjRgNCw0YLRjCDRgdC-0LTQtdGA0LbQuNC80L7QtSDRhtC10LvQuNC60L7QvCDQvdC10LvRjNC30Y86INGA0Y_QtNC-0Lwg0YEg0YLQtdC60YHRgtC-0Lwg0LvQtdC20LDRggogICAgICAg0LLQu9C-0LbQtdC90L3Ri9C1INGN0LvQtdC80LXQvdGC0YssINC4INC-0L3QuCDRg9C10LfQttCw0LvQuCDQsiDQutC-0L3QtdGGIOKAlCDRjdGC0L4g0YPQttC1INGB0YLQvtC40LvQvgogICAgICAg0YLRgNGR0YUg0L_RgNCw0LLQvtC6INCyINC00YDRg9Cz0LjRhSDQv9Cw0L3QtdC70Y_RhS4gKi8KCiAgICBmdW5jdGlvbiBzZXRUZXh0KGVsLCB2KSB7CiAgICAgIGlmICghZWwpIHJldHVybjsKICAgICAgdmFyIG5vZGUgPSBudWxsOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgbiA9IGVsLmNoaWxkTm9kZXNbaV07CiAgICAgICAgaWYgKG4ubm9kZVR5cGUgPT09IDMgJiYgbi5ub2RlVmFsdWUudHJpbSgpKSB7IG5vZGUgPSBuOyBicmVhazsgfQogICAgICB9CiAgICAgIGlmICghbm9kZSkgeyBlbC50ZXh0Q29udGVudCA9IHY7IHJldHVybjsgfQogICAgICB2YXIgbSA9IG5vZGUubm9kZVZhbHVlLm1hdGNoKC9eKFxzKilbXHNcU10qPyhccyopJC8pOwogICAgICBub2RlLm5vZGVWYWx1ZSA9IChtID8gbVsxXSA6ICcnKSArIHYgKyAobSA_IG1bMl0gOiAnJyk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRIdG1sKGVsLCB2KSB7IGlmIChlbCkgZWwuaW5uZXJIVE1MID0gdjsgfQoKICAgIGZ1bmN0aW9uIHdyaXRlQWxsKHNjb3BlLCBkKSB7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmF2ei1leWVicm93JyksIGQuaGVyby5leWVicm93KTsKICAgICAgdmFyIGxpbmVzID0gYWxsKHNjb3BlLCAnLmF2ei10aXRsZS1pbm5lcicpOwogICAgICBzZXRUZXh0KGxpbmVzWzBdLCBkLmhlcm8ubGluZTEpOwogICAgICBpZiAobGluZXNbMV0pIHsKICAgICAgICB2YXIgZW0gPSBvbmUobGluZXNbMV0sICdlbScpOwogICAgICAgIHNldFRleHQoZW0gfHwgbGluZXNbMV0sIGQuaGVyby5saW5lMik7CiAgICAgIH0KICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYXZ6LXN1YicpLCBkLmhlcm8uc3ViKTsKICAgICAgW1snLmF2ei1oZXJvJywgZC5oZXJvLmJnXSwgWycuYXZ6LWN0YScsIGQuaGVyby5jdGFCZ11dLmZvckVhY2goZnVuY3Rpb24gKHgpIHsKICAgICAgICB2YXIgc2VjID0gb25lKHNjb3BlLCB4WzBdKTsKICAgICAgICBpZiAoc2VjICYmICh4WzFdIHx8IHNlYy5oYXNBdHRyaWJ1dGUoJ2RhdGEtYmcnKSkpIHNlYy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYmcnLCB4WzFdIHx8ICcnKTsKICAgICAgfSk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmF2ei1zZWN0aW9uLWxhYmVsIGgyJyksIGQuZ2FsbGVyeUxhYmVsKTsKCiAgICAgIGFsbChzY29wZSwgJy5hdnotZ2FsbGVyeS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuc2hvdHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHZhciBpbWcgPSBvbmUoaXQsICdpbWcnKTsKICAgICAgICBpZiAoaW1nKSB7CiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB2LnNyYyk7CiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdhbHQnLCB2LmFsdCk7CiAgICAgICAgICBpZiAodi53KSBpbWcuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHYudyk7CiAgICAgICAgICBpZiAodi5oKSBpbWcuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB2LmgpOwogICAgICAgIH0KICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5hdnotZy1jYXAnKSwgdi5jYXApOwogICAgICAgIC8qINGB0YHRi9C70LrQsCDQv9C-0Y_QstC70Y_QtdGC0YHRjyDQuCDQuNGB0YfQtdC30LDQtdGCINCy0LzQtdGB0YLQtSDRgSDQsNC00YDQtdGB0L7QvDog0LrQsNC00YAg0LHQtdC3INGB0LLQvtC10LkKICAgICAgICAgICDRgdGC0YDQsNC90LjRhtGLINC90LUg0LTQvtC70LbQtdC9INCy0LXRgdGC0Lgg0L3QuNC60YPQtNCwIOKAlCDRjdGC0L4g0L7QsdC80LDQvdGL0LLQsNC70L4g0LHRiyDRh9C10LvQvtCy0LXQutCwICovCiAgICAgICAgdmFyIGZyYW1lID0gb25lKGl0LCAnLmF2ei1nLWZyYW1lJyk7CiAgICAgICAgdmFyIGEgPSBvbmUoaXQsICcuYXZ6LWctbGluaycpOwogICAgICAgIGlmICh2LmhyZWYgJiYgIWEgJiYgZnJhbWUgJiYgaW1nKSB7CiAgICAgICAgICBhID0gZnJhbWUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICAgICAgICBhLmNsYXNzTmFtZSA9ICdhdnotZy1saW5rJzsKICAgICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgICAgIGltZy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLCBpbWcpOwogICAgICAgICAgYS5hcHBlbmRDaGlsZChpbWcpOwogICAgICAgIH0gZWxzZSBpZiAodi5ocmVmICYmIGEpIHsKICAgICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgICB9IGVsc2UgaWYgKCF2LmhyZWYgJiYgYSAmJiBpbWcpIHsKICAgICAgICAgIGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW1nLCBhKTsKICAgICAgICAgIGEucmVtb3ZlKCk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHZhciBzZWNzID0gYWxsKHNjb3BlLCAnLmF2ei1zZWN0aW9uLWhlYWRlcicpOwogICAgICBmdW5jdGlvbiB3c2VjKGksIHYpIHsKICAgICAgICBzZXRUZXh0KG9uZShzZWNzW2ldLCAnLmF2ei1sYWJlbCcpLCB2LmxhYmVsKTsKICAgICAgICBzZXRUZXh0KG9uZShzZWNzW2ldLCAnLmF2ei1oMicpLCB2LmgyKTsKICAgICAgfQogICAgICB3c2VjKDAsIGQucHJvalNlYyk7CgogICAgICBhbGwoc2NvcGUsICcuYXZ6LXByb2onKS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLnByb2plY3RzW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgICAgdmFyIGltZyA9IG9uZShhLCAnaW1nJyk7CiAgICAgICAgaWYgKGltZykgeyBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB2LmltZyk7IGltZy5zZXRBdHRyaWJ1dGUoJ2FsdCcsIHYuYWx0KTsgfQogICAgICAgIHNldFRleHQob25lKGEsICdoMycpLCB2Lm5hbWUpOwogICAgICAgIHNldFRleHQob25lKGEsICdwJyksIHYuZGVzYyk7CiAgICAgICAgc2V0VGV4dChvbmUoYSwgJy5hdnotcHJvai1tb3JlJyksIHYubW9yZSk7CiAgICAgIH0pOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYXZ6LWF3YXJkIC5hdnotbGFiZWwnKSwgZC5hd2FyZC5sYWJlbCk7CiAgICAgIHNldEh0bWwob25lKHNjb3BlLCAnLmF2ei1hd2FyZCAuYXZ6LWgyJyksIGQuYXdhcmQuaDIpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hdnotYXdhcmQtdGV4dCcpLCBkLmF3YXJkLnRleHQpOwogICAgICB2YXIgYWwgPSBvbmUoc2NvcGUsICcuYXZ6LWF3YXJkLWxpbmsnKTsKICAgICAgc2V0VGV4dChhbCwgZC5hd2FyZC5saW5rVGV4dCk7CiAgICAgIGlmIChhbCkgYWwuc2V0QXR0cmlidXRlKCdocmVmJywgZC5hd2FyZC5saW5rSHJlZik7CgogICAgICB3c2VjKDEsIGQuZm10U2VjKTsKICAgICAgYWxsKHNjb3BlLCAnLmF2ei1mbXQtbGlzdCBsaScpLmZvckVhY2goZnVuY3Rpb24gKGxpLCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmZvcm1hdHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGxpLCAnaDMnKSwgdi5oMyk7CiAgICAgICAgc2V0VGV4dChvbmUobGksICdwJyksIHYucCk7CiAgICAgIH0pOwoKICAgICAgd3NlYygyLCBkLmFkdlNlYyk7CiAgICAgIGFsbChzY29wZSwgJy5hdnotYWR2LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpdCwgaSkgewogICAgICAgIHZhciB2ID0gZC5hZHZbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLmF2ei1hZHYtbnVtJyksIHYubnVtKTsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJ2gzJyksIHYuaDMpOwogICAgICAgIHNldFRleHQob25lKGl0LCAncCcpLCB2LnApOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmF2ei1jb3N0IC5hdnotbGFiZWwnKSwgZC5jb3N0LmxhYmVsKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYXZ6LWNvc3QgLmF2ei1oMicpLCBkLmNvc3QuaDIpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hdnotY29zdC10ZXh0JyksIGQuY29zdC50ZXh0KTsKICAgICAgdmFyIGNiID0gb25lKHNjb3BlLCAnLmF2ei1jb3N0IC5hdnotYnRuJyk7CiAgICAgIHNldFRleHQoY2IsIGQuY29zdC5idG4pOwogICAgICBpZiAoY2IpIGNiLnNldEF0dHJpYnV0ZSgnaHJlZicsIGQuY29zdC5idG5IcmVmKTsKCiAgICAgIHdzZWMoMywgZC5mYXFTZWMpOwogICAgICBhbGwoc2NvcGUsICcuYXZ6LWZhcS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuZmFxW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5hdnotZmFxLXEnKSwgdi5xKTsKICAgICAgICBzZXRIdG1sKG9uZShpdCwgJy5hdnotZmFxLWEnKSwgdi5hKTsKICAgICAgfSk7CgogICAgICBzZXRIdG1sKG9uZShzY29wZSwgJy5hdnotY3RhLXRpdGxlJyksIGQuY3RhLmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmF2ei1idG4tY29udGFpbmVyIC5hdnotYnRuJykuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICAgIHZhciB2ID0gZC5jdGEuYnRuc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChiLCB2LnRleHQpOwogICAgICAgIGIuc2V0QXR0cmlidXRlKCdocmVmJywgdi5ocmVmKTsKICAgICAgfSk7CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hdnotY29weScpLCBkLmZvb3QuY29weSk7CiAgICAgIGFsbChzY29wZSwgJy5hdnotc29jaWFscyBhJykuZm9yRWFjaChmdW5jdGlvbiAoYSwgaSkgewogICAgICAgIHZhciB2ID0gZC5mb290LnNvY2lhbHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQoYSwgdi50ZXh0KTsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgIH0pOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0L_RgNCw0LLQutCwINCx0LXQs9GD0YnQtdC5INGB0YLRgNC-0LrQuCDQsiDRgdC60YDQuNC_0YLQtSAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24ganNTdHIocykgewogICAgICByZXR1cm4gIiciICsgU3RyaW5nKHMgPT0gbnVsbCA_ICcnIDogcykucmVwbGFjZSgvXFwvZywgJ1xcXFwnKS5yZXBsYWNlKC8nL2csICJcXCciKSArICInIjsKICAgIH0KICAgIGZ1bmN0aW9uIHBhZChzLCBuKSB7IHdoaWxlIChzLmxlbmd0aCA8IG4pIHMgKz0gJyAnOyByZXR1cm4gczsgfQoKICAgIGZ1bmN0aW9uIHBhdGNoU2NyaXB0KHNyYywgZCkgewogICAgICBpZiAoIS92YXIgaXRlbXMgPSBcWy8udGVzdChzcmMpKSByZXR1cm4geyB0ZXh0OiBzcmMsIG1pc3NlZDogWyfQsdC10LPRg9GJ0LDRjyDRgdGC0YDQvtC60LAnXSB9OwogICAgICB2YXIgdyA9IDA7CiAgICAgIGQudGlja2VyLmZvckVhY2goZnVuY3Rpb24gKHgpIHsKICAgICAgICB2YXIgbiA9IChqc1N0cih4LmxhYmVsKSArICcsJykubGVuZ3RoOwogICAgICAgIGlmIChuID4gdykgdyA9IG47CiAgICAgIH0pOwogICAgICB2YXIgcm93cyA9IGQudGlja2VyLm1hcChmdW5jdGlvbiAoeCkgewogICAgICAgIC8qINCy0L3QtdGI0L3QuNC5INCw0LTRgNC10YEg0YPQt9C90LDRkdC8INC_0L4g0LTQvtC80LXQvdGDLCDQsCDQvdC1INC_0L4g0YHRgtCw0YDQvtC80YMg0L_RgNC40LfQvdCw0LrRgzoKICAgICAgICAgICDQtdGB0LvQuCDRgdGB0YvQu9C60YMg0L_QvtC80LXQvdGP0LvQuCDRgdC-INGB0LLQvtC10Lkg0L3QsCDRh9GD0LbRg9GOLCB0YXJnZXQg0LTQvtC70LbQtdC9INC_0L7QtdGF0LDRgtGMINGB0LvQtdC00L7QvCAqLwogICAgICAgIHZhciBleHQgPSB4LmhyZWYuaW5kZXhPZihTSVRFKSAhPT0gMCAmJiAvXmh0dHBzPzovLnRlc3QoeC5ocmVmKTsKICAgICAgICByZXR1cm4gJyAgICAgICAgeyBsYWJlbDogJyArIHBhZChqc1N0cih4LmxhYmVsKSArICcsJywgdyArIDEpICsKICAgICAgICAgICcgaHJlZjogJyArIGpzU3RyKHguaHJlZikgKyAoZXh0ID8gJywgZXh0ZXJuYWw6IHRydWUnIDogJycpICsgJyB9JzsKICAgICAgfSkuam9pbignLFxuJyk7CiAgICAgIHJldHVybiB7IHRleHQ6IHNyYy5yZXBsYWNlKC92YXIgaXRlbXMgPSBcW1tcc1xTXSo_XG5cc3s2fVxdOy8sICd2YXIgaXRlbXMgPSBbXG4nICsgcm93cyArICdcbiAgICAgIF07JyksIG1pc3NlZDogW10gfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGA0LDQt9C80LXRgtC60LAgLS0tLS0tLS0tLSAqLwoKICAgIGZ1bmN0aW9uIGJ1aWxkTGQoZG9jLCBzY29wZSwgZCkgewogICAgICB2YXIgcyA9IG9uZShkb2MsICdzY3JpcHRbdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiJdJyk7CiAgICAgIGlmICghcykgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0YDQsNC30LzQtdGC0LrQuCBsZCtqc29uJyB9OwogICAgICB2YXIgbzsKICAgICAgdHJ5IHsgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7IH0KICAgICAgY2F0Y2ggKGUpIHsgcmV0dXJuIHsgdGV4dDogbnVsbCwgZXJyOiAn0YDQsNC30LzQtdGC0LrQsCDRgdGC0YDQsNC90LjRhtGLIOKAlCDQvdC1INCy0LDQu9C40LTQvdGL0LkgSlNPTicgfTsgfQogICAgICB2YXIgZyA9IG9bJ0BncmFwaCddIHx8IFtdOwogICAgICBzeW5jQ2Fub24oZyk7CiAgICAgIHZhciB3YXJuID0gW107CgogICAgICBnLmZvckVhY2goZnVuY3Rpb24gKG4pIHsKICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1dlYlBhZ2UnKSB7CiAgICAgICAgICBuLm5hbWUgPSBkLmxkLm5hbWU7CiAgICAgICAgICBuLmRlc2NyaXB0aW9uID0gZC5sZC5kZXNjOwogICAgICAgICAgbi5kYXRlTW9kaWZpZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApOwogICAgICAgIH0KICAgICAgICBpZiAoblsnQHR5cGUnXSA9PT0gJ1NlcnZpY2UnKSB7CiAgICAgICAgICBuLm5hbWUgPSBkLmxkLnNydk5hbWU7CiAgICAgICAgICBuLmRlc2NyaXB0aW9uID0gZC5sZC5zcnZEZXNjOwogICAgICAgICAgaWYgKG4uaGFzT2ZmZXJDYXRhbG9nICYmIG4uaGFzT2ZmZXJDYXRhbG9nLml0ZW1MaXN0RWxlbWVudCkgewogICAgICAgICAgICBuLmhhc09mZmVyQ2F0YWxvZy5pdGVtTGlzdEVsZW1lbnQgPSBkLmZvcm1hdHMubWFwKGZ1bmN0aW9uIChmKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHsgJ0B0eXBlJzogJ09mZmVyJywgaXRlbU9mZmVyZWQ6IHsgJ0B0eXBlJzogJ1NlcnZpY2UnLCBuYW1lOiBmLmgzIH0gfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8qINCz0LvQsNCy0L3QvtC1INC40LfQvtCx0YDQsNC20LXQvdC40LUg0YHRgtGA0LDQvdC40YbRiyDigJQg0L_QtdGA0LLRi9C5INC60LDQtNGAINCz0LDQu9C10YDQtdC4ICovCiAgICAgIHZhciBmaXJzdCA9IGQuc2hvdHNbMF07CiAgICAgIGcuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChTdHJpbmcoblsnQGlkJ10gfHwgJycpLmluZGV4T2YoJyNwcmltYXJ5aW1hZ2UnKSA-IC0xICYmIGZpcnN0KSB7CiAgICAgICAgICBuLnVybCA9IGZpcnN0LnNyYzsKICAgICAgICAgIG4uY2FwdGlvbiA9IGZpcnN0LmFsdDsKICAgICAgICAgIGlmIChmaXJzdC53KSBuLndpZHRoID0gcGFyc2VJbnQoZmlyc3QudywgMTApOwogICAgICAgICAgaWYgKGZpcnN0LmgpIG4uaGVpZ2h0ID0gcGFyc2VJbnQoZmlyc3QuaCwgMTApOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICAvKiDQutCw0LTRgNGLOiDQv9C-0LTQv9C40YHQuCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4g0YEg0LLQuNC00LjQvNGL0LzQuCAqLwogICAgICB2YXIgd29ya3MgPSBnLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gU3RyaW5nKG5bJ0BpZCddIHx8ICcnKS5pbmRleE9mKCcjd29ya3MnKSA-IC0xOyB9KVswXTsKICAgICAgaWYgKHdvcmtzKSB7CiAgICAgICAgd29ya3MubnVtYmVyT2ZJdGVtcyA9IGQuc2hvdHMubGVuZ3RoOwogICAgICAgIHdvcmtzLml0ZW1MaXN0RWxlbWVudCA9IGQuc2hvdHMubWFwKGZ1bmN0aW9uICh2LCBpKSB7CiAgICAgICAgICB2YXIgaW1nID0geyAnQHR5cGUnOiAnSW1hZ2VPYmplY3QnLCBjb250ZW50VXJsOiB2LnNyYywgY2FwdGlvbjogdi5jYXAsIG5hbWU6IHYuYWx0IH07CiAgICAgICAgICBpZiAodi53KSBpbWcud2lkdGggPSBwYXJzZUludCh2LncsIDEwKTsKICAgICAgICAgIGlmICh2LmgpIGltZy5oZWlnaHQgPSBwYXJzZUludCh2LmgsIDEwKTsKICAgICAgICAgIGlmICh2LmhyZWYpIGltZy5pc1BhcnRPZiA9IHsgJ0B0eXBlJzogJ1dlYlBhZ2UnLCB1cmw6IHYuaHJlZiB9OwogICAgICAgICAgaWYgKCF2LmNhcCkgd2Fybi5wdXNoKCfRgyDQutCw0LTRgNCwICcgKyAoaSArIDEpICsgJyDQvdC10YIg0L_QvtC00L_QuNGB0LgnKTsKICAgICAgICAgIHJldHVybiB7ICdAdHlwZSc6ICdMaXN0SXRlbScsIHBvc2l0aW9uOiBpICsgMSwgbmFtZTogdi5jYXAsIGl0ZW06IGltZyB9OwogICAgICAgIH0pOwogICAgICB9CgogICAgICAvKiDQv9GA0L7QtdC60YLRizog0LjRidC10Lwg0YPQt9C10Lsg0L_QviDQsNC00YDQtdGB0YMsINC60L7RgtC-0YDRi9C5INGB0YLQvtGP0Lsg0LIg0LrQvtC00LUg0JTQniDQv9GA0LDQstC-0LosCiAgICAgICAgINCwINC30LDQv9C40YHRi9Cy0LDQtdC8INC90L7QstGL0LkuINCY0L3QsNGH0LUg0YHQvNC10L3QsCDRgdGB0YvQu9C60Lgg0YDQstGR0YIg0YHQstGP0LfRjCDigJQg0LjRgdC60LDRgtGMINGD0LbQtSDQvdC10YfQtdCz0L4uICovCiAgICAgIHZhciBwcm9qTGlzdCA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBTdHJpbmcoblsnQGlkJ10gfHwgJycpLmluZGV4T2YoJyNwcm9qZWN0cycpID4gLTE7IH0pWzBdOwogICAgICBpZiAocHJvakxpc3QgJiYgcHJvakxpc3QuaXRlbUxpc3RFbGVtZW50KSB7CiAgICAgICAgdmFyIG9sZCA9IGNmZy5wcm9qZWN0cy5tYXAoZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAuaHJlZjsgfSk7CiAgICAgICAgcHJvakxpc3QubnVtYmVyT2ZJdGVtcyA9IGQucHJvamVjdHMubGVuZ3RoOwogICAgICAgIHByb2pMaXN0Lml0ZW1MaXN0RWxlbWVudCA9IGQucHJvamVjdHMubWFwKGZ1bmN0aW9uIChwLCBpKSB7CiAgICAgICAgICB2YXIgd2FzID0gb2xkW2ldOwogICAgICAgICAgdmFyIG5vZGUgPSBwcm9qTGlzdC5pdGVtTGlzdEVsZW1lbnQuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LnVybCA9PT0gd2FzOyB9KVswXQogICAgICAgICAgICB8fCBwcm9qTGlzdC5pdGVtTGlzdEVsZW1lbnRbaV0gfHwgeyAnQHR5cGUnOiAnTGlzdEl0ZW0nIH07CiAgICAgICAgICBub2RlLnBvc2l0aW9uID0gaSArIDE7CiAgICAgICAgICBub2RlLm5hbWUgPSBwLm5hbWU7CiAgICAgICAgICBub2RlLnVybCA9IHAuaHJlZjsKICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0pOwogICAgICB9CgogICAgICAvKiDQstC-0L_RgNC-0YHRiyDigJQg0LjQtyDQstC40LTQuNC80L7Qs9C-INGC0LXQutGB0YLQsCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4gKi8KICAgICAgdmFyIGZhcSA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBuWydAdHlwZSddID09PSAnRkFRUGFnZSc7IH0pWzBdOwogICAgICBpZiAoZmFxKSB7CiAgICAgICAgZmFxLm1haW5FbnRpdHkgPSBhbGwoc2NvcGUsICcuYXZ6LWZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ1F1ZXN0aW9uJywKICAgICAgICAgICAgbmFtZTogdGV4dFdpdGhCcmVha3Mob25lKGl0LCAnLmF2ei1mYXEtcScpKSwKICAgICAgICAgICAgYWNjZXB0ZWRBbnN3ZXI6IHsgJ0B0eXBlJzogJ0Fuc3dlcicsIHRleHQ6IHRleHRXaXRoQnJlYWtzKG9uZShpdCwgJy5hdnotZmFxLWEnKSkgfQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyog0LPRgNCw0YQg0L7QsdGP0LfQsNC9INC-0YHRgtCw0LLQsNGC0YzRgdGPINC30LDQvNC60L3Rg9GC0YvQvDog0YHRgdGL0LvQutCwINCyINC_0YPRgdGC0L7RgtGDIOKAlCDQvNC-0LvRh9Cw0LvQuNCy0LDRjwogICAgICAgICDQv9C-0LvQvtC80LrQsCwg0LXRkSDQvdC40LrRgtC-INC90LUg0LfQsNC80LXRgtC40YIg0LHQtdC3INC_0YDQvtCy0LXRgNC60LggKi8KICAgICAgdmFyIGlkcyA9IHt9LCBkYW5nbGluZyA9IFtdOwogICAgICBnLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgaWYgKG5bJ0BpZCddKSBpZHNbblsnQGlkJ11dID0gMTsgfSk7CiAgICAgIChmdW5jdGlvbiB3YWxrKHgpIHsKICAgICAgICBpZiAoeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSAmJiB4WydAaWQnXSAmJiBPYmplY3Qua2V5cyh4KS5sZW5ndGggPT09IDEgJiYgIWlkc1t4WydAaWQnXV0pIHsKICAgICAgICAgICAgZGFuZ2xpbmcucHVzaCh4WydAaWQnXSk7CiAgICAgICAgICB9CiAgICAgICAgICBPYmplY3Qua2V5cyh4KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IGlmIChrICE9PSAnQGlkJykgd2Fsayh4W2tdKTsgfSk7CiAgICAgICAgfQogICAgICB9KShnKTsKICAgICAgaWYgKGRhbmdsaW5nLmxlbmd0aCkgd2Fybi5wdXNoKCfRgdGB0YvQu9C60Lgg0LIg0L_Rg9GB0YLQvtGC0YM6ICcgKyBkYW5nbGluZy5qb2luKCcsICcpKTsKCiAgICAgIHJldHVybiB7IHRleHQ6IEpTT04uc3RyaW5naWZ5KG8sIG51bGwsIDIpLCBlcnI6IG51bGwsIHdhcm46IHdhcm4gfTsKICAgIH0KCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGA0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYXNzZW1ibGUoZCkgewogICAgICByZXR1cm4gcGFnZVNvdXJjZSgpLnRoZW4oZnVuY3Rpb24gKHNyYykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBzY29wZSA9IGRvYy5xdWVyeVNlbGVjdG9yKCcjYXZ6LXdmb2xpby1ob21lJyk7CiAgICAgICAgdmFyIHN0eWxlID0gYWxsKGRvYywgJ3N0eWxlJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCcjYXZ6LXdmb2xpby1ob21lIC5hdnotZ2FsbGVyeS1ncmlkJykgPiAtMTsKICAgICAgICB9KVswXTsKICAgICAgICB2YXIgc2NyaXB0ID0gYWxsKGRvYywgJ3NjcmlwdDpub3QoW3R5cGVdKScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignd2FpdEZvckRPTScpID4gLTEgJiYgeC50ZXh0Q29udGVudC5pbmRleE9mKCdhdnotdGlja2VyJykgPiAtMTsKICAgICAgICB9KVswXTsKICAgICAgICAvKiDRgdGC0YDQvtC60YMg0YjRgNC40YTRgtC-0LIg0LHQtdGA0ZHQvCDQuNC3INC40YHRhdC-0LTQvdC40LrQsCDQodCr0KDQq9CcINGC0LXQutGB0YLQvtC8OiDRh9C10YDQtdC3IG91dGVySFRNTAogICAgICAgICAgINCx0YDQsNGD0LfQtdGAINC30LDQv9C40YHQsNC7INCx0Ysg0LDQvNC_0LXRgNGB0LDQvdC00Ysg0LrQsNC6ICZhbXA7IOKAlCDRgNCw0LHQvtGC0LDQtdGCINGC0LDQuiDQttC1LCDQvdC-CiAgICAgICAgICAg0LfQsNGB0L7RgNGP0LXRgiDRgdGA0LDQstC90LXQvdC40LUg0YEg0LjRgdGF0L7QtNC90YvQvCDQutC-0LTQvtC8ICovCiAgICAgICAgdmFyIGZvbnRSYXcgPSAoc3JjLm1hdGNoKC88bGluayBocmVmPSJodHRwczpcL1wvZm9udHNcLmdvb2dsZWFwaXNcLmNvbVwvY3NzMltePl0qPi8pIHx8IFtudWxsXSlbMF07CiAgICAgICAgLyog0LLRgdGC0YPQv9C40YLQtdC70YzQvdGL0Lkg0LrQvtC80LzQtdC90YLQsNGA0LjQuSDigJQg0YfQsNGB0YLRjCDQsdC70L7QutCwLCDQvtC9INC-0LHRitGP0YHQvdGP0LXRgiwg0YfRgtC-INGN0YLQvgogICAgICAgICAgINC30LAg0LrQvtC0LiDQl9Cw0LHQuNGA0LDQtdC8INC40Lcg0LjRgdGF0L7QtNC90LjQutCwOiDQsiBvdXRlckhUTUwg0LHQu9C-0LrQsCDQtdCz0L4g0L3QtdGCLiAqLwogICAgICAgIHZhciBjb21tZW50ID0gKHNyYy5tYXRjaCgvPCEtLSA9K1xuW1xzXFNdKj89KyAtLT4vKSB8fCBbbnVsbF0pWzBdOwoKICAgICAgICB2YXIgbWlzc2luZyA9IFtdOwogICAgICAgIGlmICghc2NvcGUpIG1pc3NpbmcucHVzaCgn0LHQu9C-0LogI2F2ei13Zm9saW8taG9tZScpOwogICAgICAgIGlmICghc3R5bGUpIG1pc3NpbmcucHVzaCgn0YHRgtC40LvQuCDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgaWYgKCFzY3JpcHQpIG1pc3NpbmcucHVzaCgn0YHQutGA0LjQv9GCINGB0YLRgNCw0L3QuNGG0YsnKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC1INC90LDQudC00LXQvdC-OiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKCiAgICAgICAgd3JpdGVBbGwoc2NvcGUsIGQpOwogICAgICAgIHZhciBzYyA9IHBhdGNoU2NyaXB0KHNjcmlwdC50ZXh0Q29udGVudCwgZCk7CiAgICAgICAgdmFyIGxkID0gYnVpbGRMZChkb2MsIHNjb3BlLCBkKTsKICAgICAgICBpZiAoIWxkLnRleHQpIHRocm93IG5ldyBFcnJvcihsZC5lcnIpOwogICAgICAgIHZhciB3YXJuID0gKGxkLndhcm4gfHwgW10pLmNvbmNhdChzYy5taXNzZWQubGVuZ3RoID8gWyfQvdC1INC90LDQudC00LXQvdC-INCyINGB0LrRgNC40L_RgtC1OiAnICsgc2MubWlzc2VkLmpvaW4oJywgJyldIDogW10pOwoKICAgICAgICAvKiDQn9C-0YDRj9C00L7QuiDRh9Cw0YHRgtC10Lkg4oCUINC60LDQuiDQsiDRgdCw0LzQvtC8INCx0LvQvtC60LU6INGA0LDQt9C80LXRgtC60LAg0YHRgtC-0LjRgiDQn9CV0KDQldCUINGB0YLQuNC70Y_QvNC4LgogICAgICAgICAgINCf0LXRgNCy0LDRjyDQstC10YDRgdC40Y8g0L_QsNC90LXQu9C4INGB0LrQu9Cw0LTRi9Cy0LDQu9CwINC40YUg0L3QsNC-0LHQvtGA0L7RgiAo0L_QtdGA0LXQvdC10YHQtdC90L4g0YEg0LjQvdGC0LXRgNGM0LXRgNC90L7QuSwKICAgICAgICAgICDQs9C00LUg0L_QvtGA0Y_QtNC-0Log0LTRgNGD0LPQvtC5KSwg0Lgg0L_QtdGA0LXRgdCx0L7RgNC60LAg0L_QtdGA0LXRgtCw0YHQvtCy0YvQstCw0LvQsCDQsdC70L7QuiDRhtC10LvQuNC60L7QvC4gKi8KICAgICAgICAvKiB2Mjog0YHRgtGA0L7QutC4INGI0YDQuNGE0YLQvtCyINCyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCICjRiNGA0LjRhNGC0Ysg0LLRiNC40YLRiykg4oCUINC4INC90LUg0LTQvtCx0LDQstC70Y_QtdC8OwogICAgICAgICAgINGB0YLQsNGA0LDRjyDRgdGC0YDQsNC90LjRhtCwINGB0L4g0YHRgdGL0LvQutC-0Lkg0L_QvtC70YPRh9Cw0LXRgiDQtdGRINC-0LHRgNCw0YLQvdC-LCDQutCw0Log0YDQsNC90YzRiNC1ICovCiAgICAgICAgdmFyIHRleHQgPSAoY29tbWVudCA_IFtjb21tZW50LCAnJ10gOiBbXSkuY29uY2F0KGZvbnRSYXcgPyBbQVZaX0ZPTlRfTElOSywgJyddIDogW10pLmNvbmNhdChbCiAgICAgICAgICBzY29wZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgIHN0eWxlLm91dGVySFRNTCwKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQ-JywKICAgICAgICAgIHNjLnRleHQudHJpbSgpLAogICAgICAgICAgJzwnICsgJy9zY3JpcHQ-JywKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI-JywKICAgICAgICAgIGxkLnRleHQsCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nCiAgICAgICAgXSkuam9pbignXG4nKTsKCiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgd2Fybjogd2FybiB9OwogICAgICB9KTsKICAgIH0KCiAgICAvKiB3YXJuINC_0LXRgNC10LTQsNGR0YLRgdGPINC-0YLQtNC10LvRjNC90L4g0Lgg0L_RgNC40LrQu9C10LjQstCw0LXRgtGB0Y8g0JLQniDQktCh0JXQpSDQstC10YLQutCw0YU6INC10YHQu9C4CiAgICAgICDQutC-0L_QuNGA0L7QstCw0L3QuNC1INC90LUg0YPQtNCw0LvQvtGB0YwsINC_0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQvdGLINC00L7QudGC0LguCiAgICAgICDQmNC90LDRh9C1INC_0LDQvdC10LvRjCDQvNC-0LvRh9CwINGC0LXRgNGP0LXRgiDRgNC-0LLQvdC-INGC0L4sINGA0LDQtNC4INGH0LXQs9C-INC_0YDQtdC00YPQv9GA0LXQttC00LDQtdGCLiAqLwogICAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlLCB3YXJuKSB7CiAgICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICAgINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINC00LDQttC1INC40Lcg0YLQtdGFINC60YPRgdC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L_QsNC90LXQu9GMINC60L7Qv9C40YDRg9C10YIKICAgICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgICAgdGV4dCA9IFN0cmluZyh0ZXh0KS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnphci1vdXQnKTsKICAgICAgdGEudmFsdWUgPSB0ZXh0OyB0YS5zZWxlY3QoKTsKICAgICAgdmFyIHRhaWwgPSB3YXJuID8gJyDQktC90LjQvNCw0L3QuNC1OiAnICsgd2FybiArICcuJyA6ICcnOwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLic7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSArIHRhaWwpOyByZXR1cm47IH0KICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUgKyB0YWlsKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyB0YWlsKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyB0YWlsKTsgfQogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emFyLWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGQgPSBjb2xsZWN0KCk7CiAgICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICAgIC8qINGA0LDQt9C80LXRgNGLINC60LDQtNGA0L7QsiDQv9C10YDQtdC80LXRgNGP0LXQvCDQv9C10YDQtdC0INGB0LHQvtGA0LrQvtC5OiDQtdGB0LvQuCDRhNC-0YLQvtCz0YDQsNGE0LjRjiDQt9Cw0LzQtdC90LjQu9C4LAogICAgICAgICDRgdGC0LDRgNGL0LUgd2lkdGgg0LggaGVpZ2h0INGB0L7QstGA0LDQu9C4INCx0Ysg0Lgg0LIg0YDQsNC30LzQtdGC0LrQtSwg0Lgg0LIg0LLRkdGA0YHRgtC60LUgKi8KICAgICAgUHJvbWlzZS5hbGwoZC5zaG90cy5tYXAoZnVuY3Rpb24gKHMpIHsKICAgICAgICByZXR1cm4gbWVhc3VyZShzLnNyYykudGhlbihmdW5jdGlvbiAobSkgewogICAgICAgICAgaWYgKG0pIHsgcy53ID0gU3RyaW5nKG0udyk7IHMuaCA9IFN0cmluZyhtLmgpOyB9CiAgICAgICAgICByZXR1cm4gbTsKICAgICAgICB9KTsKICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKHNpemVzKSB7CiAgICAgICAgdmFyIGxvc3QgPSBzaXplcy5tYXAoZnVuY3Rpb24gKG0sIGkpIHsgcmV0dXJuIG0gPyBudWxsIDogKGkgKyAxKTsgfSkuZmlsdGVyKEJvb2xlYW4pOwogICAgICAgIHJldHVybiBhc3NlbWJsZShkKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIC8qINGB0LLQtdGA0Y_QtdC8OiDQstGB0ZEg0LvQuCDQstCy0LXQtNGR0L3QvdC-0LUg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0L_QvtC_0LDQu9C-INCyINC60L7QtCAqLwogICAgICAgIHZhciBkb2MyID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXMudGV4dCwgJ3RleHQvaHRtbCcpOwogICAgICAgIHZhciBhZ2FpbiA9IHJlYWRDZmcoZG9jMi5xdWVyeVNlbGVjdG9yKCcjYXZ6LXdmb2xpby1ob21lJykpOwogICAgICAgIGFnYWluLnRpY2tlciA9IHJlYWRUaWNrZXIocmVzLnRleHQpOwogICAgICAgIHJlYWRMZChkb2MyLCBhZ2Fpbik7CiAgICAgICAgdmFyIG5vdExhbmRlZCA9IGFnYWluID8gbGFuZGVkKGQsIGFnYWluLCAvXnNob3RzXC5cZCtcLih3fGgpJC8pIDogWyfRgdGC0YDQsNC90LjRhtCwINC90LUg0YDQsNC30L7QsdGA0LDQu9Cw0YHRjCddOwogICAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6INGB0YLRgNCw0L3QuNGG0Ysg0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuJzsKICAgICAgICAgIHZhciB3ID0gKHJlcy53YXJuIHx8IFtdKS5zbGljZSgpOwogICAgICAgICAgaWYgKGxvc3QubGVuZ3RoKSB3LnB1c2goJ9C90LUg0L7RgtC60YDRi9C70LjRgdGMINC60LDQtNGA0Ys6ICcgKyBsb3N0LmpvaW4oJywgJykpOwogICAgICAgICAgaWYgKG5vdExhbmRlZC5sZW5ndGgpIHcucHVzaCgn0J3QlSDQl9CQ0J_QmNCh0JDQm9Ce0KHQrCDQsiDQutC-0LQ6ICcgKyBub3RMYW5kZWQuc2xpY2UoMCwgNikuam9pbignLCAnKSArCiAgICAgICAgICAgIChub3RMYW5kZWQubGVuZ3RoID4gNiA_ICcg0Lgg0LXRidGRICcgKyAobm90TGFuZGVkLmxlbmd0aCAtIDYpIDogJycpKTsKICAgICAgICAgIGNvcHkocmVzLnRleHQsIG5vdGUsIHcuam9pbignOyAnKSk7CiAgICAgICAgfSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J3QtSDRgdC-0LHRgNCw0L3QvjogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKCiAgICByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnphci10ZXN0Jykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgbXNnKCfQn9GA0L7QstC10YDRj9GO4oCmJyk7CiAgICAgIHZhciBzbmFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgICAgYXNzZW1ibGUoc25hcCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocmVzLnRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYy5xdWVyeVNlbGVjdG9yKCcjYXZ6LXdmb2xpby1ob21lJykpOwogICAgICAgIGFnYWluLnRpY2tlciA9IHJlYWRUaWNrZXIocmVzLnRleHQpOwogICAgICAgIHJlYWRMZChkb2MsIGFnYWluKTsKICAgICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KHNuYXApLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIG1zZygn0KDQkNCh0KXQntCW0JTQldCd0JjQlSDigJQg0YHQvNC-0YLRgNC40YLQtSDQutC-0L3RgdC-0LvRjC4nKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INGB0YLQsNC70L4nLCBKU09OLnBhcnNlKGIpKTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKICB9CgogIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJyNhdnotd2ZvbGlvLWhvbWUnKTsKICAgIGlmICghc2NvcGUpIHRocm93IG5ldyBFcnJvcign0LIg0LrQvtC00LUg0YHRgtGA0LDQvdC40YbRiyDQvdC10YIg0LHQu9C-0LrQsCAjYXZ6LXdmb2xpby1ob21lJyk7CiAgICBjZmcgPSByZWFkQ2ZnKHNjb3BlKTsKICAgIGNmZy50aWNrZXIgPSByZWFkVGlja2VyKHNyYyk7CiAgICByZWFkTGQoZG9jLCBjZmcpOwogICAgc3RhcnQoKTsKICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgcm9vdC5pbm5lckhUTUwgPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnphci13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6YXItaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90L7QuSDRgdGK0ZHQvNC60Lg8L2gyPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6YXItYm9keSI-PHAgY2xhc3M9ImF2emFyLWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINCw0YDRhdC40YLQtdC60YLRg9GA0L3QvtC5INGB0YrRkdC80LrQuCDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0sCntpZDoiYXV0byIsdGl0bGU6ItCf0LDQvdC10LvRjCDQsNCy0YLQvtC80L7QsdC40LvRjNC90L7QuSDRgdGK0ZHQvNC60LgiLHNob3J0OiLQkNCy0YLQviIsaGludDoi0LzQsNGI0LjQvdGLINC4INGB0YHRi9C70LrQuCwg0YTQvtGA0LzQsNGC0YssINC_0YDQvtGG0LXRgdGBLCDRhtC10L3QsCwg0LLQvtC_0YDQvtGB0YssINGA0LDQt9C80LXRgtC60LAiLHBhZ2VzOlsiL2F1dG8iXSxydW46ZnVuY3Rpb24oKXsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEFWWiDCtyDQn9CQ0J3QldCb0Kwg0JDQktCi0J7QnNCe0JHQmNCb0KzQndCe0Jkg0KHQqtCB0JzQmtCYICB2MiDigJQg0LPQtdC90LXRgNCw0YLQvtGAINC60L7QtNCwCiAgIHYyICgyOC4xMC4yMDI2KTog0YHRgtGA0LDQvdC40YbQsCB2Mi4wINC20YPRgNC90LDQuyDigJQg0YjRgNC40YTRgtGLINC4INC30L3QsNGH0LrQuCDQstGI0LjRgtGLLCDRgdGB0YvQu9C-0Log0L3QsAogICBHb29nbGUgRm9udHMg0L3QtdGCLCDQv9Cw0L3QtdC70Ywg0LjRhSDQvdC1INC00L7QsdCw0LLQu9GP0LXRgjsg0YTQvtC90Ysg0L7QsdC70L7QttC60Lgg0Lgg0YTQuNC90LDQu9CwIChkYXRhLWJnKQogICDQv9GA0LDQstGP0YLRgdGPINCyINGA0LDQt9C00LXQu9C1IMKr0KjQsNC_0LrQsMK7LgogICDQoNCw0LHQvtGC0LDQtdGCINC90LAgL2F1dG8KCiAgINCd0LjRh9C10LPQviDQvdC1INC_0YPQsdC70LjQutGD0LXRgi4g0KfQuNGC0LDQtdGCINCY0KHQpdCe0JTQndCr0Jkg0LrQvtC0INGB0YLRgNCw0L3QuNGG0YssINC_0L7QtNGB0YLQsNCy0LvRj9C10YIKICAg0LfQvdCw0YfQtdC90LjRjyDQuNC3INGE0L7RgNC80Ysg0Lgg0LLRi9C00LDRkdGCINCy0LXRgdGMINCx0LvQvtC6INGG0LXQu9C40LrQvtC8IOKAlCDQstGB0YLQsNCy0LvRj9C10YLRgdGPCiAgINC-0LTQvdC40Lwg0LrRg9GB0LrQvtC8INC_0L7QstC10YDRhSBIVE1MLdCx0LvQvtC60LAg0YHRgtGA0LDQvdC40YbRiy4KCiAgINCY0YHRhdC-0LTQvdC40LosINCwINC90LUg0LbQuNCy0L7QuSBET006INGB0LrRgNC40L_RgtGLIHdmb2xpbyDQtNC-0L_QuNGB0YvQstCw0Y7RgiDQstC90LXRiNC90LjQvAogICDRgdGB0YvQu9C60LDQvCB0YXJnZXQ9Il9ibGFuayIg0L_RgNGP0LzQviDQsiDQsdGA0LDRg9C30LXRgNC1LCDQuCDQv9Cw0L3QtdC70YwsINGH0LjRgtCw0Y7RidCw0Y8KICAg0LbQuNCy0YPRjiDRgdGC0YDQsNC90LjRhtGDLCDQt9Cw0L_QtdC60LDQu9CwINCx0Ysg0Y3RgtC4INGH0YPQttC40LUg0L_RgNCw0LLQutC4INCyINCy0LDRiCDQutC-0LQuCiAgINCSINC_0L7QtNCy0LDQu9C1INGB0YHRi9C70LrQuCDQutCw0Log0YDQsNC3INCy0L3QtdGI0L3QuNC1LgoKICAg0KfRgtC-INC_0LDQvdC10LvRjCDQtNC10YDQttC40YIg0LLQvNC10YHRgtC1LCDRh9GC0L7QsdGLINC90LUg0YDQsNC30L7RiNC70L7RgdGMOgogICAgIMK3INC60LDRgNGC0L7Rh9C60Lgg0LzQsNGI0LjQvSAtPiDRgdC_0LjRgdC-0Log0YDQsNCx0L7RgiDQsiDRgNCw0LfQvNC10YLQutC1LCDQstC80LXRgdGC0LUg0YEg0LDQtNGA0LXRgdCw0LzQuDsKICAgICDCtyDQv9C10YDQstGL0Lkg0LrQsNC00YAgLT4g0LPQu9Cw0LLQvdC-0LUg0LjQt9C-0LHRgNCw0LbQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLINCy0LzQtdGB0YLQtSDRgSDRgNCw0LfQvNC10YDQsNC80Lg7CiAgICAgwrcg0YTQvtGA0LzQsNGC0Ysg0YHRitGR0LzQutC4IC0-INC_0YDQtdC00LvQvtC20LXQvdC40Y8g0LIg0YDQsNC30LzQtdGC0LrQtSDRg9GB0LvRg9Cz0Lg7CiAgICAgwrcg0YbQtdC90LAgLT4g0Lgg0LIg0LLQuNC00LjQvNGL0Lkg0LHQu9C-0LosINC4INCyINC_0YDQtdC00LvQvtC20LXQvdC40LUg0YDQsNC30LzQtdGC0LrQuDsKICAgICDCtyDQstC-0L_RgNC-0YHRiyAtPiBGQVFQYWdlLCDRgdC70L7QstC-INCyINGB0LvQvtCy0L4uCgogICDQmtCw0YDRgtC-0YfQtdC6INGA0L7QstC90L4gNzog0L_QtdGA0LLQsNGPIOKAlCDRiNC40YDQvtC60LDRjyDQvdCwINC00LLQtSDQutC-0LvQvtC90LrQuCwg0L7RgdGC0LDQu9GM0L3Ri9C1CiAgINCyINC-0LHRidC10Lkg0YHQtdGC0LrQtS4g0JLQvtGB0YzQvNCw0Y8g0YLRgNC10LHRg9C10YIg0L_RgNCw0LLQutC4IENTUywg0L_QvtGN0YLQvtC80YMg0LTQvtCx0LDQstC70LXQvdC40Y8KICAg0LfQtNC10YHRjCDQvdC10YIsINC10YHRgtGMINC_0YDQsNCy0LrQsCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40YUuCgogICDQptC10L3RgyDQv9Cw0L3QtdC70Ywg0J3QlSDRgdC-0YfQuNC90Y_QtdGCOiDQsdC10YDRkdGCINC40Lcg0L_QvtC70Y8g0Lgg0L_QuNGI0LXRgiDQsiDQvtCx0LAg0LzQtdGB0YLQsCDRgdGA0LDQt9GDLgogICDQldGB0LvQuCDQv9C-0LvQtSDQv9GD0YHRgtC-0LUsINGG0LXQvdCwINCyINGA0LDQt9C80LXRgtC60LUg0L7RgdGC0LDRkdGC0YHRjyDQv9GA0LXQttC90LXQuSwg0Lgg0L_QsNC90LXQu9GMCiAgINCz0L7QstC-0YDQuNGCINC-0LEg0Y3RgtC-0Lwg0L_RgNC4INGB0LHQvtGA0LrQtS4g0JLRi9C00YPQvNCw0L3QvdC-0LUg0YfQuNGB0LvQviDQsiDRgNCw0LfQvNC10YLQutC1IOKAlAogICDQu9C-0LbQvdGL0Lkg0YTQsNC60YIg0LTQu9GPINC_0L7QuNGB0LrQvtCy0LjQutCwLCDRgtCw0Log0YPQttC1INCx0YvQu9C-INC90LAg0L_RgNC10LTQvNC10YLQvdC-0LkuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLyog0KHRgdGL0LvQutCwINC90LAg0YjRgNC40YTRgtGLINCx0LvQvtC60LAg4oCUINC60L7QvdGB0YLQsNC90YLQsCwg0LAg0L3QtSDRgtC-LCDRh9GC0L4g0L3QsNGI0LvQvtGB0Ywg0L3QsCDRgdGC0YDQsNC90LjRhtC1LgogICAgINCSIDxoZWFkPiB3Zm9saW8g0YHQstC-0Y8g0YHRgdGL0LvQutCwINC90LAgSm9zdC9SdWJpayDQvtGCINGC0LXQvNGLLCDQuCDQvtC90LAg0YHRgtC-0LjRgiDQoNCQ0J3QrNCo0JUKICAgICDQvdCw0YjQtdC5OiDQv9Cw0L3QtdC70Ywg0LHRgNCw0LvQsCDQv9C10YDQstGD0Y4g0L_QvtC00YXQvtC00Y_RidGD0Y4g0Lgg0LrQsNC20LTQvtC5INGB0LHQvtGA0LrQvtC5INC_0L7QtNC80LXQvdGP0LvQsAogICAgINC90LDRh9C10YDRgtCw0L3QuNGPINCx0LvQvtC60LAg0L3QsCDRgtC10LzQuNC90YsuINCd0LDQsdC-0YAg0LLQtdGB0L7QsiDQt9Cw0LTQsNC9IENTUyDQsdC70L7QutCwLCDQv9C-0Y3RgtC-0LzRgwogICAgINC00LXRgNC20LjQvCDQtdCz0L4g0LfQtNC10YHRjC4g0JzQtdC90Y_QtdGC0YHRjyDQtNC40LfQsNC50L0g4oCUINC80LXQvdGP0LXRgtGB0Y8g0Y3RgtCwINGB0YLRgNC-0LrQsC4gKi8KICB2YXIgQVZaX0ZPTlRfTElOSyA9ICc8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI_ZmFtaWx5PUpvc3Q6d2dodEAxMDA7MjAwOzMwMDs0MDA7NTAwOzYwMCcgKwogICAgJyZhbXA7ZmFtaWx5PVJ1YmlrOml0YWwsd2dodEAwLDEwMDswLDIwMDswLDMwMDsxLDEwMDsxLDIwMCcgKwogICAgJyZhbXA7ZmFtaWx5PU1hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREAyMC4uNDgsMTAwLi43MDAsMC4uMSwtNTAuLjIwMCcgKwogICAgJyZhbXA7ZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPic7CgogIC8qIC0tLS0tLS0tLS0g0L_RgNC-0LLQtdGA0LrQsCDCq9C00L7Qu9C10YLQtdC70L4g0LvQuMK7IC0tLS0tLS0tLS0KICAgICDQn9Cw0L3QtdC70Ywg0L_QuNGI0LXRgiDQt9C90LDRh9C10L3QuNGPINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGH0LXRgNC10Lcg0YHQtdC70LXQutGC0L7RgNGLLiDQldGB0LvQuCDRgdC10LvQtdC60YLQvtGACiAgICAg0L3QtSDQvdCw0YjRkdC70YHRjyDQuNC70Lgg0L_QvtC00YHRgtCw0L3QvtCy0LrQsCDQvdC1INGB0L7QstC_0LDQu9CwIOKAlCDQt9Cw0L_QuNGB0Ywg0LzQvtC70YfQsCDQvdC1INC_0YDQvtC40YHRhdC-0LTQuNGCLgogICAgINCY0LzQtdC90L3QviDRgtCw0Log0YfQuNGB0LvQviDRgdGK0ZHQvNC-0Log0LfQsNGB0YLRgNGP0LvQviDQvdCwIDEyNTog0L_QsNC90LXQu9GMINC_0L7RgdGH0LjRgtCw0LvQsCAxMjcsCiAgICAg0LfQsNC_0LjRgdCw0YLRjCDQvdC1INGB0LzQvtCz0LvQsCwg0LAg0L_RgNC-0LLQtdGA0LrQsCDCq9GB0LHQvtGA0LrQsCDRgdC-0LLQv9Cw0LTQsNC10YIg0YEg0LjRgdGF0L7QtNC90LjQutC-0LzCuwogICAgINGB0YDQsNCy0L3QuNCy0LDQu9CwINC-0LTQuNC90LDQutC-0LLQviDQvdC10L_RgNCw0LLQuNC70YzQvdC-0LUg0YEg0L7QtNC40L3QsNC60L7QstC-INC90LXQv9GA0LDQstC40LvRjNC90YvQvC4KCiAgICAg0J_QvtGN0YLQvtC80YMg0L_QvtGB0LvQtSDRgdCx0L7RgNC60Lgg0YfQuNGC0LDQtdC8INGA0LXQt9GD0LvRjNGC0LDRgiDQntCR0KDQkNCi0J3QniDQuCDRgdCy0LXRgNGP0LXQvCDRgSDRgtC10LwsINGH0YLQvgogICAgINCy0LLRkdC7INGH0LXQu9C-0LLQtdC6LiDQndC10YHQvtCy0L_QsNCy0YjQuNC1INC_0L7Qu9GPINC_0LDQvdC10LvRjCDQvdCw0LfRi9Cy0LDQtdGCINCy0YHQu9GD0YUuICovCiAgZnVuY3Rpb24gbGFuZGVkKGV4cGVjdGVkLCBhY3R1YWwsIHNraXAsIHBhdGgsIG91dCkgewogICAgcGF0aCA9IHBhdGggfHwgJyc7IG91dCA9IG91dCB8fCBbXTsKICAgIGlmIChleHBlY3RlZCAmJiB0eXBlb2YgZXhwZWN0ZWQgPT09ICdvYmplY3QnICYmIGFjdHVhbCAmJiB0eXBlb2YgYWN0dWFsID09PSAnb2JqZWN0JykgewogICAgICBPYmplY3Qua2V5cyhleHBlY3RlZCkuZm9yRWFjaChmdW5jdGlvbiAoaykgewogICAgICAgIGxhbmRlZChleHBlY3RlZFtrXSwgYWN0dWFsW2tdLCBza2lwLCBwYXRoID8gcGF0aCArICcuJyArIGsgOiBrLCBvdXQpOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAoU3RyaW5nKGV4cGVjdGVkID09IG51bGwgPyAnJyA6IGV4cGVjdGVkKSAhPT0gU3RyaW5nKGFjdHVhbCA9PSBudWxsID8gJycgOiBhY3R1YWwpKSB7CiAgICAgIGlmICghc2tpcCB8fCAhc2tpcC50ZXN0KHBhdGgpKSBvdXQucHVzaChwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tINC-0LHRidC40LUg0LrQsNGA0YLQvtGH0LrQuDog0LPQu9Cw0LLQvdCw0Y8g4oCUINC40YHRgtC-0YfQvdC40Log0LjRgdGC0LjQvdGLIC0tLS0tLS0tLS0KICAgICDQntC00LjQvSDQuCDRgtC-0YIg0LbQtSBAaWQsINC-0L_QuNGB0LDQvdC90YvQuSDQv9C-LdGA0LDQt9C90L7QvNGDINC90LAg0YDQsNC30L3Ri9GFINGB0YLRgNCw0L3QuNGG0LDRhSwg4oCUCiAgICAg0LzQvtC70YfQsNC70LjQstCw0Y8g0L_QvtC70L7QvNC60LA6INC_0L7QuNGB0LrQvtCy0LjQuiDQuCDQmNCYINCy0YvQsdC40YDQsNGO0YIg0YHQsNC80LgsINC60LDQutC-0Lkg0LLQtdGA0YHQuNC4CiAgICAg0LLQtdGA0LjRgtGMLCDQuCDQvdCw0LPRgNCw0LTRiyDQvNC-0LPRg9GCINC90LUg0LfQsNGB0YfQuNGC0LDRgtGM0YHRjy4g0J_QsNC90LXQu9GMINC_0YDQuNCy0L7QtNC40YIg0Y3RgtC4INGD0LfQu9GLCiAgICAg0Log0Y3RgtCw0LvQvtC90YMg0L_RgNC4INC60LDQttC00L7QuSDRgdCx0L7RgNC60LUuCgogICAgINCt0YLQsNC70L7QvSDRgdC90Y_RgiDRgSDQs9C70LDQstC90L7QuSAzMCDQvtC60YLRj9Cx0YDRjyAyMDI2LiDQldGB0LvQuCDQs9C70LDQstC90YPRjiDQtNC-0L_QvtC70L3Rj9GCIOKAlAogICAgINC-0LHQvdC-0LLQuNGC0Ywg0LfQtNC10YHRjCDQuCDQv9C10YDQtdGB0L7QsdGA0LDRgtGMINC90LDQsdC-0YA6IHB5dGhvbjMgcGFjay10b29sa2l0LnB5ICovCiAgdmFyIEFWWl9DQU5PTiA9IHsKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiOiB7CiAgICAgICJAdHlwZSI6ICJQZXJzb24iLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI3Bob3RvZ3JhcGhlciIsCiAgICAgICJuYW1lIjogItCQ0L3RgtC-0L0g0JDQstCw0L3Qt9Cw0YLQviIsCiAgICAgICJhbHRlcm5hdGVOYW1lIjogIkF2YW56YXRvIiwKICAgICAgImRlc2NyaXB0aW9uIjogItCf0L7RgNGC0YDQtdGC0L3Ri9C5INGE0L7RgtC-0LPRgNCw0YQg0LIg0JrQsNC30LDQvdC4LiDQn9GA0L7RhNC10YHRgdC40L7QvdCw0LvRjNC90LDRjyDQv9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDRgSAyMDE5INCz0L7QtNCwLiDQkdC-0LvQtdC1IDI1MCDRgNC10LDQu9C40LfQvtCy0LDQvdC90YvRhSDQv9GA0L7QtdC60YLQvtCyLiIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hdmFuemF0by5ydSIsCiAgICAgICJpbWFnZSI6IFsKICAgICAgICAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9ENDhTY0gxREE2anhVX3VTSC1Pci1DMGNKQ2xwUC1RUC9sRUFMMTI4eEVNUEdNMm9fckt3X2tNUEhLUjl2QUo4MC8waU9mTElldlBNcFE1X0ZHNk1LRGNPdlBIWTRTY2lQMi8zdjh3Y1BobE5qb1VISllfeDFGOUJQZDYyeE9zTTVPMS84NVpXYjZkWUZnVDliMzNIM0lHMW5nLmpwZyIsCiAgICAgICAgImh0dHBzOi8vaS53Zm9saW8ucnUveC9jWFBaUG11OWxDdzV0a1JOYXQ3SnR5SGpyUGlaaWNsTi9WSmdJcmx1Rkx0WldHd3phVDVGSjA3RHVTS19fYlRRQS95OERtNkpaVkNubDRDVUZ6a2VveGNodlBJMXdWZERDSy83LVVvTEtDMmdRa3JnYVh4cnJTeUxxWXRhTUdSel91LS9wQllnUlg1c1BiWXhYQk9QbURsWEVRLmpwZWciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvb1c0cWotbUxTeE9HSkxmRG1iU0REYWJocE5XOG5lSzgvNGxWbk1NOFpuQ3pDeUViZ1hJbkh6Q3ZDcHJQR3FySjYvSDl1YlQwSDlJRkFDYmJPUHhlbkY3US5qcGciLAogICAgICAgICJodHRwczovL2kud2ZvbGlvLnJ1L3gvRDQ4U2NIMURBNmp4VV91U0gtT3ItQzBjSkNscFAtUVAvbEVBTDEyOHhFTVBHTTJvX3JLd19rTVBIS1I5dkFKODAvX1JCc2FNaEcwakdNTTdfNnNsb3lFUHNkVi1aT1YzaXcvNXR5T0g5Ni0yUnVPVS1wX0lLQndVMDBEejVYSTlydFQvQWNvTHI2dERoQkFfMXNWM29pdENyUS5qcGciCiAgICAgIF0sCiAgICAgICJqb2JUaXRsZSI6ICLQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEIiwKICAgICAgImtub3dzQWJvdXQiOiBbCiAgICAgICAgItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPIiwKICAgICAgICAi0JzRg9C20YHQutC-0Lkg0L_QvtGA0YLRgNC10YIiLAogICAgICAgICLQltC10L3RgdC60LjQuSDQv9C-0YDRgtGA0LXRgiIsCiAgICAgICAgItCb0LjRh9C90YvQuSDQsdGA0LXQvdC0IiwKICAgICAgICAi0KDQtdC_0L7RgNGC0LDQttC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQn9GA0LXQtNC80LXRgtC90LDRjyDRgdGK0ZHQvNC60LAg0LTQu9GPINC80LDRgNC60LXRgtC_0LvQtdC50YHQvtCyIiwKICAgICAgICAi0JjQvdGC0LXRgNGM0LXRgNC90LDRjyDQuCDQsNGA0YXQuNGC0LXQutGC0YPRgNC90LDRjyDRgdGK0ZHQvNC60LAiLAogICAgICAgICLQkNCy0YLQvtC80L7QsdC40LvRjNC90LDRjyDRhNC-0YLQvtGB0YrRkdC80LrQsCIsCiAgICAgICAgItCS0LjQtNC10L7RgdGK0ZHQvNC60LAgUmVlbHMiCiAgICAgIF0sCiAgICAgICJhd2FyZCI6IFsKICAgICAgICAiUG9ydGZvbGlvIEF3YXJkIDIwMjQg4oCUIDIg0LzQtdGB0YLQviwg0YHQtdGA0LjRjyDQoNC10L_QvtGA0YLQsNC2IiwKICAgICAgICAiVGhlIFBsYWNlIEVjb25vbXkgVm9sLjMgYnkgSG95bmUgKEF1c3RyYWxpYSkiLAogICAgICAgICI1MDBweCBBd2FyZHMiLAogICAgICAgICJBZ29yYSBBd2FyZHMiLAogICAgICAgICIzNWF3YXJkcyIKICAgICAgXSwKICAgICAgImVtYWlsIjogImFudG9uaW9hdmFuemF0b0BnbWFpbC5jb20iLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAic2FtZUFzIjogWwogICAgICAgICJodHRwczovL3d3dy5iZWhhbmNlLm5ldC9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vdC5tZS9hdmFuemF0byIsCiAgICAgICAgImh0dHBzOi8vMjAyNC5wb3J0Zm9saW9hd2FyZC5jb20vI3NlY3Rpb24tMTkwMDYxNTciLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJ3b3JrTG9jYXRpb24iOiB7CiAgICAgICAgIkB0eXBlIjogIkNpdHkiLAogICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgfQogICAgfSwKICAgICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyI6IHsKICAgICAgIkB0eXBlIjogIlByb2Zlc3Npb25hbFNlcnZpY2UiLAogICAgICAiQGlkIjogImh0dHBzOi8vYXZhbnphdG8ucnUvI2J1c2luZXNzIiwKICAgICAgIm5hbWUiOiAiQXZhbnphdG8g4oCUINC_0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0LPRgNCw0YTQuNGPINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICLQn9C-0YDRgtGA0LXRgtC90YvQtSDRhNC-0YLQvtGB0LXRgdGB0LjQuCDQsiDQmtCw0LfQsNC90Lgg0YEgMjAxOSDQs9C-0LTQsDog0YHRgtGD0LTQuNGPINC4INGD0LvQuNGG0LAsINC80YPQttGB0LrQvtC5INC4INC20LXQvdGB0LrQuNC5INC_0L7RgNGC0YDQtdGCLCDRgdGK0ZHQvNC60LAg0LTQu9GPINC70LjRh9C90L7Qs9C-INCx0YDQtdC90LTQsC4gMjUwKyDQv9GA0L7QtdC60YLQvtCyLCA1INC80LXQttC00YPQvdCw0YDQvtC00L3Ri9GFINC90LDQs9GA0LDQtC4g0JLRi9C10LfQtNGLINCyINCc0L7RgdC60LLRgy4iLAogICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUiLAogICAgICAiaW1hZ2UiOiAiaHR0cHM6Ly9pLndmb2xpby5ydS94L0R3MTVFSUV1OWlWTi1zeEg2T1hkVXBKUmdmdG5SMi1lL0RZeGdtYjcwckZPZ3FKTm1Rbk9HX1JjZzBicjRfVlR6L24tOUdKQWZqek1QdEYxUGlLZ2JyN09ZZjBlaEZHdERPL3VhUzF2d0VPRlBnUU5JZUZBQnhhWTd0RF9tT3dZM0lCL2cwZ3NMcGtpMGhjN1hJSWNfQWduRkp6dVc4MjBJSTMzL1I1aWRVWHJKc0JRLnBuZyIsCiAgICAgICJmb3VuZGVyIjogewogICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jcGhvdG9ncmFwaGVyIgogICAgICB9LAogICAgICAiZm91bmRpbmdEYXRlIjogIjIwMTktMDEtMDEiLAogICAgICAidGVsZXBob25lIjogIis3LTk4Ny0yMjctMDAtNzciLAogICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICJhZGRyZXNzIjogewogICAgICAgICJAdHlwZSI6ICJQb3N0YWxBZGRyZXNzIiwKICAgICAgICAiYWRkcmVzc0xvY2FsaXR5IjogItCa0LDQt9Cw0L3RjCIsCiAgICAgICAgImFkZHJlc3NSZWdpb24iOiAi0KDQtdGB0L_Rg9Cx0LvQuNC60LAg0KLQsNGC0LDRgNGB0YLQsNC9IiwKICAgICAgICAiYWRkcmVzc0NvdW50cnkiOiAiUlUiCiAgICAgIH0sCiAgICAgICJnZW8iOiB7CiAgICAgICAgIkB0eXBlIjogIkdlb0Nvb3JkaW5hdGVzIiwKICAgICAgICAibGF0aXR1ZGUiOiA1NS43ODg3LAogICAgICAgICJsb25naXR1ZGUiOiA0OS4xMjIxCiAgICAgIH0sCiAgICAgICJhcmVhU2VydmVkIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCa0LDQt9Cw0L3RjCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJDaXR5IiwKICAgICAgICAgICJuYW1lIjogItCc0L7RgdC60LLQsCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJwcmljZVJhbmdlIjogIjE0OTAwLTU0OTAwIiwKICAgICAgIm9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iOiBbCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9wZW5pbmdIb3Vyc1NwZWNpZmljYXRpb24iLAogICAgICAgICAgImRheU9mV2VlayI6IFsKICAgICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAgICJUdWVzZGF5IiwKICAgICAgICAgICAgIldlZG5lc2RheSIsCiAgICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAgICJGcmlkYXkiLAogICAgICAgICAgICAiU2F0dXJkYXkiLAogICAgICAgICAgICAiU3VuZGF5IgogICAgICAgICAgXSwKICAgICAgICAgICJvcGVucyI6ICIxMDowMCIsCiAgICAgICAgICAiY2xvc2VzIjogIjIwOjAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgInNhbWVBcyI6IFsKICAgICAgICAiaHR0cHM6Ly93d3cuYmVoYW5jZS5uZXQvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3QubWUvYXZhbnphdG8iLAogICAgICAgICJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2F2YW56YXRvLyIsCiAgICAgICAgImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhbnRvbmlvYXZhbnphdG8iCiAgICAgIF0sCiAgICAgICJtYWtlc09mZmVyIjogWwogICAgICAgIHsKICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCiAgICAgICAgICAibmFtZSI6ICLQn9C-0YDRgtGA0LXRgtC90LDRjyDRhNC-0YLQvtGB0LXRgdGB0LjRjyDQsiDQmtCw0LfQsNC90LgiLAogICAgICAgICAgInByaWNlIjogIjE0OTAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8iLAogICAgICAgICAgICAic2VydmljZVR5cGUiOiAi0J_QvtGA0YLRgNC10YLQvdCw0Y8g0YTQvtGC0L7RgdGK0ZHQvNC60LAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcG9ydHJhaXQtcGhvdG9zZXNzaW9uIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHQtdGB0YHQuNGPINCyINCc0L7RgdC60LLQtSAo0LLRgdGRINCy0LrQu9GO0YfQtdC90L4pIiwKICAgICAgICAgICJwcmljZSI6ICI1NDkwMCIsCiAgICAgICAgICAicHJpY2VDdXJyZW5jeSI6ICJSVUIiLAogICAgICAgICAgInByaWNlVmFsaWRVbnRpbCI6ICIyMDI3LTA2LTMwIiwKICAgICAgICAgICJhdmFpbGFiaWxpdHkiOiAiaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2siLAogICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ByaWNlIiwKICAgICAgICAgICJzZWxsZXIiOiB7CiAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly9hdmFuemF0by5ydS8jYnVzaW5lc3MiCiAgICAgICAgICB9LAogICAgICAgICAgIml0ZW1PZmZlcmVkIjogewogICAgICAgICAgICAiQHR5cGUiOiAiU2VydmljZSIsCiAgICAgICAgICAgICJuYW1lIjogItCS0YvQtdC30LTQvdCw0Y8g0YTQvtGC0L7RgdC10YHRgdC40Y8g0LIg0JzQvtGB0LrQstC1IiwKICAgICAgICAgICAgInNlcnZpY2VUeXBlIjogItCf0L7RgNGC0YDQtdGC0L3QsNGPINGE0L7RgtC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3Bob3RvZ3JhcGhfbW9zY293IgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIkB0eXBlIjogIk9mZmVyIiwKICAgICAgICAgICJuYW1lIjogItCS0LjQtNC10L7RgdGK0ZHQvNC60LAg4oCUINC00L7Qv9C-0LvQvdC10L3QuNC1INC6INGE0L7RgtC-0YHQtdGB0YHQuNC4IiwKICAgICAgICAgICJwcmljZSI6ICI2MDAwIiwKICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlJVQiIsCiAgICAgICAgICAicHJpY2VWYWxpZFVudGlsIjogIjIwMjctMDYtMzAiLAogICAgICAgICAgImF2YWlsYWJpbGl0eSI6ICJodHRwczovL3NjaGVtYS5vcmcvSW5TdG9jayIsCiAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXZhbnphdG8ucnUvcHJpY2UiLAogICAgICAgICAgInNlbGxlciI6IHsKICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNidXNpbmVzcyIKICAgICAgICAgIH0sCiAgICAgICAgICAiaXRlbU9mZmVyZWQiOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJTZXJ2aWNlIiwKICAgICAgICAgICAgIm5hbWUiOiAi0JLQuNC00LXQvtGB0YrRkdC80LrQsCBSZWVscyIsCiAgICAgICAgICAgICJzZXJ2aWNlVHlwZSI6ICLQktC40LTQtdC-0YHRitGR0LzQutCwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1L3ZpZGVvX3Nob290aW5nX2themFuIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSwKICAgICAgImNvbnRhY3RQb2ludCI6IFsKICAgICAgICB7CiAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICJ0ZWxlcGhvbmUiOiAiKzctOTg3LTIyNy0wMC03NyIsCiAgICAgICAgICAiY29udGFjdFR5cGUiOiAiY3VzdG9tZXIgc2VydmljZSIsCiAgICAgICAgICAiZW1haWwiOiAiYW50b25pb2F2YW56YXRvQGdtYWlsLmNvbSIsCiAgICAgICAgICAiYXJlYVNlcnZlZCI6ICJSVSIsCiAgICAgICAgICAiYXZhaWxhYmxlTGFuZ3VhZ2UiOiBbCiAgICAgICAgICAgICJSdXNzaWFuIiwKICAgICAgICAgICAgIkVuZ2xpc2giCiAgICAgICAgICBdCiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgImh0dHBzOi8vYXZhbnphdG8ucnUvI3dlYnNpdGUiOiB7CiAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyN3ZWJzaXRlIiwKICAgICAgInVybCI6ICJodHRwczovL2F2YW56YXRvLnJ1IiwKICAgICAgIm5hbWUiOiAi0JDQvdGC0L7QvSDQkNCy0LDQvdC30LDRgtC-IOKAlCDQn9C-0YDRgtGA0LXRgtC90YvQuSDRhNC-0YLQvtCz0YDQsNGEINCyINCa0LDQt9Cw0L3QuCIsCiAgICAgICJwdWJsaXNoZXIiOiB7CiAgICAgICAgIkBpZCI6ICJodHRwczovL2F2YW56YXRvLnJ1LyNwaG90b2dyYXBoZXIiCiAgICAgIH0sCiAgICAgICJpbkxhbmd1YWdlIjogInJ1LVJVIgogICAgfQogIH07CgogIGZ1bmN0aW9uIHN5bmNDYW5vbihncmFwaCkgewogICAgaWYgKCFncmFwaCB8fCAhZ3JhcGgubGVuZ3RoKSByZXR1cm4gW107CiAgICB2YXIgZG9uZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgaWQgPSBncmFwaFtpXSAmJiBncmFwaFtpXVsnQGlkJ107CiAgICAgIGlmIChpZCAmJiBBVlpfQ0FOT05baWRdKSB7CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGdyYXBoW2ldKSAhPT0gSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpIHsKICAgICAgICAgIGRvbmUucHVzaChTdHJpbmcoaWQpLnNwbGl0KCcjJylbMV0pOwogICAgICAgIH0KICAgICAgICBncmFwaFtpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoQVZaX0NBTk9OW2lkXSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZhciBvbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXZ6YXUtcm9vdCcpOwogIGlmIChvbGQpIG9sZC5yZW1vdmUoKTsKCiAgdmFyIE1BWFcgPSAxMjQwOyAvLyDQv9GA0LXQtNC10Lsg0YjQuNGA0LjQvdGLINC60LDQtNGA0LAsINGB0LwuINC40YHRgtC-0YDQuNGOINC_0YDQvtC10LrRgtCwCiAgdmFyIFNJVEUgPSAnaHR0cHM6Ly9hdmFuemF0by5ydSc7CgogIGZ1bmN0aW9uIG9uZShlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBlbC5xdWVyeVNlbGVjdG9yKHNlbCk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0gfQogIGZ1bmN0aW9uIGFsbChlbCwgc2VsKSB7IHRyeSB7IHJldHVybiBbXS5zbGljZS5jYWxsKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKSk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFtdOyB9IH0KICBmdW5jdGlvbiB0KGVsKSB7IHJldHVybiBlbCA_IGVsLnRleHRDb250ZW50LnJlcGxhY2UoL1xzKy9nLCAnICcpLnRyaW0oKSA6ICcnOyB9CiAgZnVuY3Rpb24gaHRtbChlbCkgeyByZXR1cm4gZWwgPyBlbC5pbm5lckhUTUwudHJpbSgpIDogJyc7IH0KICBmdW5jdGlvbiBhdHRyKGVsLCBhKSB7IHJldHVybiBlbCA_IChlbC5nZXRBdHRyaWJ1dGUoYSkgfHwgJycpIDogJyc7IH0KICBmdW5jdGlvbiBkaWdpdHMocykgeyByZXR1cm4gU3RyaW5nKHMgfHwgJycpLnJlcGxhY2UoL1teMC05XS9nLCAnJyk7IH0KICBmdW5jdGlvbiBtb25leShzKSB7IHJldHVybiBkaWdpdHMocykucmVwbGFjZSgvXEIoPz0oXGR7M30pKyg_IVxkKSkvZywgJyAnKTsgfQoKICAvKiDQotC10LrRgdGCINC00LvRjyDRgNCw0LfQvNC10YLQutC4OiA8YnI–INGB0LDQvCDQv9C-INGB0LXQsdC1INC_0YDQvtCx0LXQu9CwINC90LUg0LTQsNGR0YIsINC4CiAgICAgwqtQcmVtaWVyZSBQcm8uPGJyPtCf0YDQvtGJ0LXCuyDQv9GA0LXQstGA0LDRidCw0LvQvtGB0Ywg0LIgwqtQcmVtaWVyZSBQcm8u0J_RgNC-0YnQtcK7LgogICAgINCU0LXRhNC10LrRgiDRh9C40L3QuNC70Lgg0LIg0L_QsNC90LXQu9GP0YUg0L7QsdGD0YfQtdC90LjRjyDQuCDQv9GA0LXRgdC10YLQvtCyIOKAlCDQt9C00LXRgdGMINC30LDQutGA0YvRgiDRgdGA0LDQt9GDLiAqLwogIGZ1bmN0aW9uIHRleHRXaXRoQnJlYWtzKGVsKSB7CiAgICBpZiAoIWVsKSByZXR1cm4gJyc7CiAgICB2YXIgYyA9IGVsLmNsb25lTm9kZSh0cnVlKTsKICAgIGFsbChjLCAnYnInKS5mb3JFYWNoKGZ1bmN0aW9uIChicikgewogICAgICBici5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSwgYnIpOwogICAgfSk7CiAgICByZXR1cm4gYy50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgfQoKICAvKiAtLS0tLS0tLS0tINGH0YLQtdC90LjQtSDRgdGC0YDQsNC90LjRhtGLINCyINC60L7QvdGE0LjQsyAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHJlYWRDZmcoc2NvcGUpIHsKICAgIHZhciBsaW5lcyA9IGFsbChzY29wZSwgJy5oZXJvLXRpdGxlLWlubmVyJyk7CiAgICByZXR1cm4gewogICAgICBoZXJvOiB7CiAgICAgICAgZXllYnJvdzogdChvbmUoc2NvcGUsICcuaGVyby1leWVicm93JykpLAogICAgICAgIGxpbmUxOiB0KGxpbmVzWzBdKSwKICAgICAgICBsaW5lMjogdChsaW5lc1sxXSksCiAgICAgICAgc3ViOiB0KG9uZShzY29wZSwgJy5oZXJvLXN1YicpKSwKICAgICAgICBoaW50OiB0KG9uZShzY29wZSwgJy5oZXJvLXNjcm9sbC1oaW50JykpLAogICAgICAgIC8qIHYyOiDRgdCy0L7QuCDRhNC-0L3RiyDQvtCx0LvQvtC20LrQuCDQuCDRhNC40L3QsNC70LA7INC_0YPRgdGC0L4g4oCUINC_0LXRgNCy0YvQuSDQuCDQv9C-0YHQu9C10LTQvdC40Lkg0LrQsNC00YAg0LvQtdC90YLRiyAqLwogICAgICAgIGJnOiBhdHRyKG9uZShzY29wZSwgJy5oZXJvJyksICdkYXRhLWJnJykgfHwgJycsCiAgICAgICAgY3RhQmc6IGF0dHIob25lKHNjb3BlLCAnLmN0YScpLCAnZGF0YS1iZycpIHx8ICcnCiAgICAgIH0sCiAgICAgIGdhbGxlcnlMYWJlbDogdChvbmUoc2NvcGUsICcuc2VjdGlvbi1sYWJlbCBzcGFuJykpLAogICAgICBjYXJkczogYWxsKHNjb3BlLCAnLmdhbGxlcnktaXRlbScpLm1hcChmdW5jdGlvbiAoaXQpIHsKICAgICAgICB2YXIgaW1nID0gb25lKGl0LCAnaW1nJyk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGhyZWY6IGF0dHIoaXQsICdocmVmJyksCiAgICAgICAgICBzcmM6IGF0dHIoaW1nLCAnc3JjJyksCiAgICAgICAgICBhbHQ6IGF0dHIoaW1nLCAnYWx0JyksCiAgICAgICAgICBicmFuZDogdChvbmUoaXQsICcub3ZlcmxheS10ZXh0IGgzJykpLAogICAgICAgICAgbW9kZWw6IHQob25lKGl0LCAnLm92ZXJsYXktdGV4dCBzcGFuJykpLAogICAgICAgICAgbnVtOiB0KG9uZShpdCwgJy5jYXJkLW51bScpKSwKICAgICAgICAgIGJhZGdlOiB0KG9uZShpdCwgJy5mZWF0dXJlZC1iYWRnZScpKSwKICAgICAgICAgIHc6IGF0dHIoaW1nLCAnd2lkdGgnKSwKICAgICAgICAgIGg6IGF0dHIoaW1nLCAnaGVpZ2h0JykKICAgICAgICB9OwogICAgICB9KSwKICAgICAgYWJvdXQ6IHsKICAgICAgICBsYWJlbDogdChvbmUoc2NvcGUsICcuYWJvdXQtbGFiZWwnKSksCiAgICAgICAgaDI6IHQob25lKHNjb3BlLCAnLmFib3V0IGgyJykpLAogICAgICAgIHA6IHQob25lKHNjb3BlLCAnLmFib3V0IHAnKSkKICAgICAgfSwKICAgICAgZm10TGFiZWw6IHQoYWxsKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwgc3BhbicpWzFdKSwKICAgICAgZm9ybWF0czogYWxsKHNjb3BlLCAnLmFkdi1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBpY29uOiB0KG9uZShpdCwgJy5pY29uJykpLAogICAgICAgICAgaDM6IHQob25lKGl0LCAnaDMnKSksCiAgICAgICAgICBwOiB0KG9uZShpdCwgJ3AnKSkKICAgICAgICB9OwogICAgICB9KSwKICAgICAgcHJvY1NlYzogewogICAgICAgIGxhYmVsOiB0KG9uZShzY29wZSwgJy5wcm9jZXNzLWhlYWRlciAubGFiZWwnKSksCiAgICAgICAgaDI6IHQob25lKHNjb3BlLCAnLnByb2Nlc3MtaGVhZGVyIGgyJykpCiAgICAgIH0sCiAgICAgIHByb2Nlc3M6IGFsbChzY29wZSwgJy5wcm9jZXNzLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG51bTogdChvbmUoaXQsICcucHJvY2Vzcy1udW0nKSksCiAgICAgICAgICBuYW1lOiB0KG9uZShpdCwgJy5wcm9jZXNzLW5hbWUnKSksCiAgICAgICAgICBkZXNjOiB0KG9uZShpdCwgJy5wcm9jZXNzLWRlc2MnKSkKICAgICAgICB9OwogICAgICB9KSwKICAgICAgY29zdDogewogICAgICAgIGxhYmVsOiB0KG9uZShzY29wZSwgJy5jb3N0IC5sYWJlbCcpKSwKICAgICAgICBwcmljZTogdChvbmUoc2NvcGUsICcuY29zdCBoMicpKSwKICAgICAgICBpdGVtczogYWxsKHNjb3BlLCAnLmNvc3QtbGlzdCBsaScpLm1hcChmdW5jdGlvbiAobGkpIHsgcmV0dXJuIHQobGkpOyB9KSwKICAgICAgICBub3RlOiB0KG9uZShzY29wZSwgJy5jb3N0LW5vdGUnKSksCiAgICAgICAgYnRuOiB0KG9uZShzY29wZSwgJy5jb3N0IC5hdnotYnRuJykpLAogICAgICAgIGJ0bkhyZWY6IGF0dHIob25lKHNjb3BlLCAnLmNvc3QgLmF2ei1idG4nKSwgJ2hyZWYnKQogICAgICB9LAogICAgICBmYXFTZWM6IHsKICAgICAgICBsYWJlbDogdChvbmUoc2NvcGUsICcuZmFxLWhlYWRlciAubGFiZWwnKSksCiAgICAgICAgaDI6IHQob25lKHNjb3BlLCAnLmZhcS1oZWFkZXIgaDInKSkKICAgICAgfSwKICAgICAgZmFxOiBhbGwoc2NvcGUsICcuZmFxLWl0ZW0nKS5tYXAoZnVuY3Rpb24gKGl0KSB7CiAgICAgICAgcmV0dXJuIHsgcTogdChvbmUoaXQsICcuZmFxLXEnKSksIGE6IGh0bWwob25lKGl0LCAnLmZhcS1hJykpIH07CiAgICAgIH0pLAogICAgICBjdGE6IHsKICAgICAgICBoMjogaHRtbChvbmUoc2NvcGUsICcuY3RhIGgyJykpLAogICAgICAgIHN1YjogdChvbmUoc2NvcGUsICcuY3RhLXN1YicpKSwKICAgICAgICBidG5zOiBhbGwoc2NvcGUsICcuYnRuLXJvdyAuYXZ6LWJ0bicpLm1hcChmdW5jdGlvbiAoYikgewogICAgICAgICAgcmV0dXJuIHsgdGV4dDogdChiKSwgaHJlZjogYXR0cihiLCAnaHJlZicpIH07CiAgICAgICAgfSksCiAgICAgICAgY29weTogdChvbmUoc2NvcGUsICcuY3RhLXNvY2lhbHMgc3BhbicpKSwKICAgICAgICBzb2NpYWxzOiBhbGwoc2NvcGUsICcuY3RhLXNvY2lhbHMgYScpLm1hcChmdW5jdGlvbiAoYSkgewogICAgICAgICAgcmV0dXJuIHsgdGV4dDogdChhKSwgaHJlZjogYXR0cihhLCAnaHJlZicpIH07CiAgICAgICAgfSkKICAgICAgfSwKICAgICAgbGQ6IHsgbmFtZTogJycsIGRlc2M6ICcnLCBzcnZOYW1lOiAnJywgc3J2RGVzYzogJycsIG9mZmVyRGVzYzogJycgfQogICAgfTsKICB9CgogIGZ1bmN0aW9uIHJlYWRMZChkb2MsIGNmZykgewogICAgdmFyIHMgPSBvbmUoZG9jLCAnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iXScpOwogICAgaWYgKCFzKSByZXR1cm47CiAgICB0cnkgewogICAgICB2YXIgbyA9IEpTT04ucGFyc2Uocy50ZXh0Q29udGVudCk7CiAgICAgIChvWydAZ3JhcGgnXSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnV2ViUGFnZScpIHsgY2ZnLmxkLm5hbWUgPSBuLm5hbWUgfHwgJyc7IGNmZy5sZC5kZXNjID0gbi5kZXNjcmlwdGlvbiB8fCAnJzsgfQogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnU2VydmljZScpIHsKICAgICAgICAgIGNmZy5sZC5zcnZOYW1lID0gbi5uYW1lIHx8ICcnOwogICAgICAgICAgY2ZnLmxkLnNydkRlc2MgPSBuLmRlc2NyaXB0aW9uIHx8ICcnOwogICAgICAgICAgaWYgKG4ub2ZmZXJzKSBjZmcubGQub2ZmZXJEZXNjID0gbi5vZmZlcnMuZGVzY3JpcHRpb24gfHwgJyc7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfQoKICAvKiAtLS0tLS0tLS0tINCy0ZHRgNGB0YLQutCwINC_0LDQvdC10LvQuCAtLS0tLS0tLS0tCiAgICAg0KLQtdC80LAgd2ZvbGlvINC60YDQsNGB0LjRgiDQv9C-0LvRjyDQsiDQsdC10LvRi9C5INGC0LXQutGB0YIg0L3QsCDQsdC10LvQvtC8INGE0L7QvdC1LCDQv9C-0Y3RgtC-0LzRgyDRhtCy0LXRgiwKICAgICDRiNGA0LjRhNGCINC4IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yINC30LDQtNCw0Y7RgtGB0Y8g0Y_QstC90L4g0Lgg0YEg0L_RgNC40L7RgNC40YLQtdGC0L7QvCwKICAgICDQsCDQstGB0LUg0YfQsNGB0YLQvdGL0LUg0L_RgNCw0LLQuNC70LAg0L3QsNGH0LjQvdCw0Y7RgtGB0Y8g0YEgI2F2emF1LXJvb3QuICovCgogIHZhciBjc3MgPSBbCiAgICAnI2F2emF1LXJvb3QsI2F2emF1LXJvb3QgKntjb2xvcjojMWQxZDFmICFpbXBvcnRhbnQ7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZiAhaW1wb3J0YW50OycsCiAgICAnbGV0dGVyLXNwYWNpbmc6bm9ybWFsICFpbXBvcnRhbnQ7dGV4dC10cmFuc2Zvcm06bm9uZSAhaW1wb3J0YW50O2JveC1zaXppbmc6Ym9yZGVyLWJveH0nLAogICAgJyNhdnphdS1yb290IGlucHV0LCNhdnphdS1yb290IHRleHRhcmVhe2JhY2tncm91bmQ6I2ZmZiAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiMxZDFkMWYgIWltcG9ydGFudDsnLAogICAgJ29wYWNpdHk6MSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6MS40ICFpbXBvcnRhbnR9JywKICAgICcjYXZ6YXUtcm9vdCBidXR0b257YmFja2dyb3VuZDojZmZmO2NvbG9yOiMxZDFkMWYgIWltcG9ydGFudDtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWIucHtiYWNrZ3JvdW5kOiMxZDFkMWYgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2ZmZiAhaW1wb3J0YW50fScsCiAgICAnI2F2emF1LXJvb3R7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7YmFja2dyb3VuZDpyZ2JhKDIwLDIwLDIyLC41NSk7JywKICAgICdmb250OjE0cHgvMS41IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyNHB4fScsCiAgICAnI2F2emF1LXdpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoxNHB4O3dpZHRoOm1pbig5ODBweCwxMDAlKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYm94LXNoYWRvdzowIDMwcHggODBweCByZ2JhKDAsMCwwLC4zNSk7b3ZlcmZsb3c6aGlkZGVufScsCiAgICAnI2F2emF1LWhlYWR7cGFkZGluZzoxNnB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U2ZTZlOTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMnB4O2ZsZXgtd3JhcDp3cmFwfScsCiAgICAnI2F2emF1LWhlYWQgaDJ7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwO2ZsZXg6MX0nLAogICAgJyNhdnphdS1ib2R5e2ZsZXg6MTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6OHB4IDIwcHggMjRweH0nLAogICAgJyNhdnphdS1mb290e3BhZGRpbmc6MTRweCAyMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTk7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcH0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1ie2ZvbnQ6aW5oZXJpdDtwYWRkaW5nOjlweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O2JvcmRlcjoxcHggc29saWQgI2QyZDJkNztiYWNrZ3JvdW5kOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtYjpob3Zlcntib3JkZXItY29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1iLnB7Ym9yZGVyLWNvbG9yOiMxZDFkMWZ9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtc2Vje2JvcmRlcjoxcHggc29saWQgI2U2ZTZlOTtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luLXRvcDoxNHB4O292ZXJmbG93OmhpZGRlbn0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1zZWM-c3VtbWFyeXtwYWRkaW5nOjEycHggMTRweDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo2MDA7YmFja2dyb3VuZDojZmFmYWZhO2xpc3Qtc3R5bGU6bm9uZX0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1zZWM-c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtc2VjPnN1bW1hcnk6OmJlZm9yZXtjb250ZW50OiJcXDI1QjggICI7Y29sb3I6Izg2ODY4Yn0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1zZWNbb3Blbl0-c3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6IlxcMjVCRSAgIn0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1pbntwYWRkaW5nOjE0cHh9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtZnttYXJnaW4tYm90dG9tOjEycHh9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtZiBsYWJlbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMXB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjRweH0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1mIGlucHV0LCNhdnphdS1yb290IC5hdnphdS1mIHRleHRhcmVhe3dpZHRoOjEwMCU7Zm9udDppbmhlcml0O3BhZGRpbmc6OHB4IDEwcHg7JywKICAgICdib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo3cHg7YmFja2dyb3VuZDojZmZmfScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWYgdGV4dGFyZWF7bWluLWhlaWdodDo3MHB4O3Jlc2l6ZTp2ZXJ0aWNhbH0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxMnB4fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NTYwcHgpeyNhdnphdS1yb290IC5hdnphdS1yb3d7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOjFmcn0jYXZ6YXUtd2lue2JvcmRlci1yYWRpdXM6MH19JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlY2VjZWY7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMnB4O21hcmdpbi1ib3R0b206MTJweDtiYWNrZ3JvdW5kOiNmY2ZjZmR9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtY2FyZCBoNHttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6Izg2ODY4YiAhaW1wb3J0YW50fScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWNhcmQud2Fybntib3JkZXItY29sb3I6I2U2YzIwMDtiYWNrZ3JvdW5kOiNmZmZkZjB9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtaW1ne2Rpc3BsYXk6ZmxleDtnYXA6MTBweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWltZz5pbWd7d2lkdGg6ODhweDtoZWlnaHQ6NzBweDtvYmplY3QtZml0OmNvdmVyO2JvcmRlci1yYWRpdXM6NnB4O2JhY2tncm91bmQ6I2VjZWNlYztmbGV4Om5vbmV9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtaW1nIC5ne2ZsZXg6MX0nLAogICAgJyNhdnphdS1yb290IC5hdnphdS1oaW50e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4Njg2OGIgIWltcG9ydGFudDttYXJnaW46MCAwIDEycHh9JywKICAgICcjYXZ6YXUtcm9vdCAuYXZ6YXUtZ3JpZHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2×1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE0MHB4LDFmcikpO2dhcDoxMHB4fScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWdyaWQgZmlndXJle21hcmdpbjowO2N1cnNvcjpwb2ludGVyfScsCiAgICAnI2F2emF1LXJvb3QgLmF2emF1LWdyaWQgaW1ne3dpZHRoOjEwMCU7aGVpZ2h0OjExMHB4O29iamVjdC1maXQ6Y292ZXI7Ym9yZGVyLXJhZGl1czo4cHg7ZGlzcGxheTpibG9ja30nLAogICAgJyNhdnphdS1vdXR7d2lkdGg6MTAwJTtoZWlnaHQ6MTEwcHg7Zm9udDoxMXB4LzEuNCB1aS1tb25vc3BhY2UsbW9ub3NwYWNlO3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNkMmQyZDc7Ym9yZGVyLXJhZGl1czo4cHh9JywKICAgICcjYXZ6YXUtbXNne2ZvbnQtc2l6ZToxM3B4fScKICBdLmpvaW4oJycpOwoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpCiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpOwogIH0KICBmdW5jdGlvbiBmaWVsZChsYWJlbCwgcGF0aCwgdmFsLCB0eXBlKSB7CiAgICAvKiDQu9C40YjQvdC40Lkg0L_QtdGA0LXQvdC-0YE6INCx0YDQsNGD0LfQtdGAINGB0YrQtdC00LDQtdGCINC_0LXRgNCy0YvQuSDQv9C-0YHQu9C1IDx0ZXh0YXJlYT4gKi8KICAgIHZhciB0YWcgPSB0eXBlID09PSAnYXJlYScKICAgICAgPyAnPHRleHRhcmVhIGRhdGEtcD0iJyArIHBhdGggKyAnIj5cbicgKyBlc2ModmFsKSArICc8L3RleHRhcmVhPicKICAgICAgOiAnPGlucHV0IGRhdGEtcD0iJyArIHBhdGggKyAnIiB2YWx1ZT0iJyArIGVzYyh2YWwpICsgJyI-JzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYXZ6YXUtZiI-PGxhYmVsPicgKyBsYWJlbCArICc8L2xhYmVsPicgKyB0YWcgKyAnPC9kaXY-JzsKICB9CgogIHZhciByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgcm9vdC5pZCA9ICdhdnphdS1yb290JzsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpOwoKICAvKiAtLS0tLS0tLS0tINC90LXQstC40LTQuNC80YvQtSDRgdC40LzQstC-0LvRiyAtLS0tLS0tLS0tCiAgICAg0KDQtdC00LDQutGC0L7RgCB3Zm9saW8g0Lgg0LXQs9C-INGB0L7QsdGB0YLQstC10L3QvdGL0Lkg0LjQvdGC0LXRgNGE0LXQudGBINCy0YHRgtCw0LLQu9GP0Y7RgiDQsiDQtNC70LjQvdC90YvQtQogICAgINGB0YLRgNC-0LrQuCDCq9C80Y_Qs9C60LjQtSDQv9C10YDQtdC90L7RgdGLwrsg4oCUIFUrMjAwQiDQuCDRgNC-0LTQvdGPLiDQndCwINGN0LrRgNCw0L3QtSDQuNGFINC90LUg0LLQuNC00L3QviwKICAgICDQsCDQsiDQsNC00YDQtdGB0LUg0YTQsNC50LvQsCDQvtC90Lgg0LvQvtC80LDRjtGCINGB0YHRi9C70LrRgzog0LHRgNCw0YPQt9C10YAg0L7RgtCy0LXRh9Cw0LXRgiDCq0Zvcm1hdCBlcnJvcsK7LAogICAgINC60LDRgNGC0LjQvdC60LAg0LjQu9C4INCy0LjQtNC10L4g0L3QtSDQs9GA0YPQt9GP0YLRgdGPLiDQndC4INCyINC-0LTQvdC-0Lwg0L_QvtC70LUg0L_QsNC90LXQu9C4INC40Lwg0LTQtdC70LDRgtGMCiAgICAg0L3QtdGH0LXQs9C-LCDQv9C-0Y3RgtC-0LzRgyDQstGL0YfQuNGJ0LDQtdC8INC40YUg0Lgg0L_RgNC4INCy0LLQvtC00LUsINC4INGB0L_Qu9C-0YjQvdGL0Lwg0L_RgNC-0YXQvtC00L7QvCDQv9C10YDQtdC0CiAgICAg0YHQsdC-0YDQutC-0Lkg4oCUINC30L3QsNGH0LXQvdC40LUg0LzQvtCz0LvQviDQv9C-0L_QsNGB0YLRjCDQsiDQv9C-0LvQtSDQvNC40LzQviDRgdC-0LHRi9GC0LjQuSDQstCy0L7QtNCwLiAqLwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgWlcgPSAvW1×1MjAwQi1cdTIwMERcdTIwNjBcdUZFRkZdL2c7CiAgICBmdW5jdGlvbiBzY3J1YihlbCkgewogICAgICBpZiAoIWVsIHx8IHR5cGVvZiBlbC52YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiAwOwogICAgICB2YXIgdiA9IGVsLnZhbHVlLnJlcGxhY2UoWlcsICcnKTsKICAgICAgaWYgKHYgPT09IGVsLnZhbHVlKSByZXR1cm4gMDsKICAgICAgZWwudmFsdWUgPSB2OwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoZSkgeyBzY3J1YihlLnRhcmdldCk7IH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciBlbCA9IGUudGFyZ2V0OwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgc2NydWIoZWwpOyB9LCAwKTsKICAgIH0sIHRydWUpOwogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGVscyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsdGV4dGFyZWEnKSwgbiA9IDAsIGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIG4gKz0gc2NydWIoZWxzW2ldKTsKICAgICAgaWYgKG4pIGNvbnNvbGUud2FybignQVZaOiDRg9Cx0YDQsNC90Ysg0L3QtdCy0LjQtNC40LzRi9C1INGB0LjQvNCy0L7Qu9GLINGA0LXQtNCw0LrRgtC-0YDQsCwg0L_QvtC70LXQuTogJyArIG4pOwogICAgfSwgdHJ1ZSk7CiAgfSkoKTsKCiAgZnVuY3Rpb24gbXNnKHMpIHsgdmFyIGUgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnphdS1tc2cnKTsgaWYgKGUpIGUudGV4dENvbnRlbnQgPSBzOyB9CgogIHZhciBjZmcgPSBudWxsOwoKICBmdW5jdGlvbiBwYWdlU291cmNlKCkgewogICAgcmV0dXJuIGZldGNoKGxvY2F0aW9uLnBhdGhuYW1lICsgJz90PScgKyBEYXRlLm5vdygpLCB7IGNyZWRlbnRpYWxzOiAnb21pdCcgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0g0YTQvtGA0LzQsCAtLS0tLS0tLS0tICovCgogIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgdmFyIGggPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnphdS13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6YXUtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQsNCy0YLQvtC80L7QsdC40LvRjNC90L7QuSDRgdGK0ZHQvNC60Lg8L2gyPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6YXUtYiIgaWQ9ImF2emF1LWNsb3NlIj7Ql9Cw0LrRgNGL0YLRjDwvYnV0dG9uPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6YXUtYm9keSI-JzsKCiAgICBoICs9ICc8cCBjbGFzcz0iYXZ6YXUtaGludCI-0J_RgNCw0LLQutC4INC90LUg0L_Rg9Cx0LvQuNC60YPRjtGC0YHRjy4g0J_QsNC90LXQu9GMINGB0L7QsdC10YDRkdGCINC60L7QtCDQsdC70L7QutCwINGG0LXQu9C40LrQvtC8IOKAlCAnICsKICAgICAgJ9Cy0YHRgtCw0LLQuNGC0LUg0LXQs9C-INC_0L7QstC10YDRhSBIVE1MLdCx0LvQvtC60LAg0YHRgtGA0LDQvdC40YbRiyDQsiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUuPC9wPic7CgogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emF1LXNlYyIgb3Blbj48c3VtbWFyeT7QqNCw0L_QutCwPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emF1LWluIj4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC30LDQs9C-0LvQvtCy0L7QuiAo0LrQu9GO0YfQtdCy0LDRjyDRhNGA0LDQt9CwLCDRgdGC0L7QuNGCINCy0L3Rg9GC0YDQuCBIMSknLCAnaGVyby5leWVicm93JywgY2ZnLmhlcm8uZXllYnJvdykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXUtcm93Ij4nICsKICAgICAgZmllbGQoJ9Cf0LXRgNCy0LDRjyDRgdGC0YDQvtC60LAg0LfQsNCz0L7Qu9C-0LLQutCwJywgJ2hlcm8ubGluZTEnLCBjZmcuaGVyby5saW5lMSkgKwogICAgICBmaWVsZCgn0JLRgtC-0YDQsNGPINGB0YLRgNC-0LrQsCAo0LrRg9GA0YHQuNCyKScsICdoZXJvLmxpbmUyJywgY2ZnLmhlcm8ubGluZTIpICsgJzwvZGl2PicgKwogICAgICBmaWVsZCgn0J_QvtC00LfQsNCz0L7Qu9C-0LLQvtC6JywgJ2hlcm8uc3ViJywgY2ZnLmhlcm8uc3ViLCAnYXJlYScpICsKICAgICAgZmllbGQoJ9Cf0L7QtNGB0LrQsNC30LrQsCDQviDQv9GA0L7QutGA0YPRgtC60LUnLCAnaGVyby5oaW50JywgY2ZnLmhlcm8uaGludCkgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXUtY2FyZCI-PGg0PtCk0L7QvSDQvtCx0LvQvtC20LrQuDwvaDQ-PGRpdiBjbGFzcz0iYXZ6YXUtaW1nIj48aW1nIHNyYz0iJyArIGVzYyhjZmcuaGVyby5iZykgKyAnIiBkYXRhLXByZXY9Imhlcm8uYmciIGFsdD0iIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImciPicgKyBmaWVsZCgn0JDQtNGA0LXRgSDRhNC-0YLQviAo0L_Rg9GB0YLQviDigJQg0L_QtdGA0LLRi9C5INC60LDQtNGAINC70LXQvdGC0YspJywgJ2hlcm8uYmcnLCBjZmcuaGVyby5iZykgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6YXUtYiIgZGF0YS1waWNrPSJoZXJvLmJnIj7QktGL0LHRgNCw0YLRjCDQutCw0LTRgDwvYnV0dG9uPjwvZGl2PjwvZGl2PjwvZGl2PicgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXUtY2FyZCI-PGg0PtCk0L7QvSDRhNC40L3QsNC70LA8L2g0PjxkaXYgY2xhc3M9ImF2emF1LWltZyI-PGltZyBzcmM9IicgKyBlc2MoY2ZnLmhlcm8uY3RhQmcpICsgJyIgZGF0YS1wcmV2PSJoZXJvLmN0YUJnIiBhbHQ9IiI-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJnIj4nICsgZmllbGQoJ9CQ0LTRgNC10YEg0YTQvtGC0L4gKNC_0YPRgdGC0L4g4oCUINC_0L7RgdC70LXQtNC90LjQuSDQutCw0LTRgCDQu9C10L3RgtGLKScsICdoZXJvLmN0YUJnJywgY2ZnLmhlcm8uY3RhQmcpICsKICAgICAgJzxidXR0b24gY2xhc3M9ImF2emF1LWIiIGRhdGEtcGljaz0iaGVyby5jdGFCZyI-0JLRi9Cx0YDQsNGC0Ywg0LrQsNC00YA8L2J1dHRvbj48L2Rpdj48L2Rpdj48L2Rpdj4nICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphdS1zZWMiPjxzdW1tYXJ5PtCc0LDRiNC40L3RiyDQsiDQs9Cw0LvQtdGA0LXQtSAoJyArIGNmZy5jYXJkcy5sZW5ndGggKyAnKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphdS1pbiI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCcsICdnYWxsZXJ5TGFiZWwnLCBjZmcuZ2FsbGVyeUxhYmVsKSArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXUtaGludCI-0JzQsNGA0LrQsCDQuCDQvNC-0LTQtdC70Ywg0LLQuNC00L3RiyDQvdCwINC60LDRgNGC0L7Rh9C60LUg0Lgg0YPRhdC-0LTRj9GCINCyINGA0LDQt9C80LXRgtC60YMuICcgKwogICAgICAn0JDQtNGA0LXRgSDigJQg0YHRgtGA0LDQvdC40YbQsCDRjdGC0L7QuSDQvNCw0YjQuNC90Ysg0L3QsCDRgdCw0LnRgtC1OiDQsdC10Lcg0L3QtdCz0L4g0LrQsNGA0YLQvtGH0LrQsCDRgdGC0LDQvdC10YIg0YLRg9C_0LjQutC-0LwuPC9wPic7CiAgICBjZmcuY2FyZHMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphdS1jYXJkIj48aDQ-0JrQsNGA0YLQvtGH0LrQsCAnICsgKGkgKyAxKSArIChpID09PSAwID8gJyDigJQg0YjQuNGA0L7QutCw0Y8nIDogJycpICsgJzwvaDQ-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImF2emF1LWltZyI-PGltZyBzcmM9IicgKyBlc2MoYy5zcmMpICsgJyIgZGF0YS1wcmV2PSJjYXJkcy4nICsgaSArICcuc3JjIiBhbHQ9IiI-JyArCiAgICAgICAgJzxkaXYgY2xhc3M9ImciPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJhdnphdS1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQnNCw0YDQutCwJywgJ2NhcmRzLicgKyBpICsgJy5icmFuZCcsIGMuYnJhbmQpICsKICAgICAgICBmaWVsZCgn0JzQvtC00LXQu9GMJywgJ2NhcmRzLicgKyBpICsgJy5tb2RlbCcsIGMubW9kZWwpICsgJzwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBINGB0YLRgNCw0L3QuNGG0Ysg0LzQsNGI0LjQvdGLJywgJ2NhcmRzLicgKyBpICsgJy5ocmVmJywgYy5ocmVmKSArCiAgICAgICAgZmllbGQoJ9Ce0L_QuNGB0LDQvdC40LUg0LrQsNC00YDQsCAoYWx0LCDQtNC70Y8g0L_QvtC40YHQutCwINC4INC90LXQt9GA0Y_Rh9C40YUpJywgJ2NhcmRzLicgKyBpICsgJy5hbHQnLCBjLmFsdCkgKwogICAgICAgIGZpZWxkKCfQkNC00YDQtdGBINGE0L7RgtC-0LPRgNCw0YTQuNC4JywgJ2NhcmRzLicgKyBpICsgJy5zcmMnLCBjLnNyYykgKwogICAgICAgIChpID09PSAwID8gZmllbGQoJ9Cc0LXRgtC60LAg0L3QsCDRiNC40YDQvtC60L7QuSDQutCw0YDRgtC-0YfQutC1JywgJ2NhcmRzLjAuYmFkZ2UnLCBjLmJhZGdlKSA6ICcnKSArCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImF2emF1LWIiIGRhdGEtcGljaz0iY2FyZHMuJyArIGkgKyAnIj7QktGL0LHRgNCw0YLRjCDQutCw0LTRgCDRgdC-INGB0YLRgNCw0L3QuNGG0Ysg0LzQsNGI0LjQvdGLPC9idXR0b24-JyArCiAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICB9KTsKICAgIGggKz0gJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzxkZXRhaWxzIGNsYXNzPSJhdnphdS1zZWMiPjxzdW1tYXJ5PtCeINC90LDQv9GA0LDQstC70LXQvdC40Lg8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXUtaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnYWJvdXQubGFiZWwnLCBjZmcuYWJvdXQubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuicsICdhYm91dC5oMicsIGNmZy5hYm91dC5oMikgKwogICAgICBmaWVsZCgn0KLQtdC60YHRgicsICdhYm91dC5wJywgY2ZnLmFib3V0LnAsICdhcmVhJykgKwogICAgICAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emF1LXNlYyI-PHN1bW1hcnk-0KTQvtGA0LzQsNGC0Ysg0YHRitGR0LzQutC4ICgnICsgY2ZnLmZvcm1hdHMubGVuZ3RoICsgJyk8L3N1bW1hcnk-PGRpdiBjbGFzcz0iYXZ6YXUtaW4iPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnZm10TGFiZWwnLCBjZmcuZm10TGFiZWwpICsKICAgICAgJzxwIGNsYXNzPSJhdnphdS1oaW50Ij7QndCw0LfQstCw0L3QuNGPINGE0L7RgNC80LDRgtC-0LIg0YPRhdC-0LTRj9GCINCyINGA0LDQt9C80LXRgtC60YMg0YPRgdC70YPQs9C4INGB0L_QuNGB0LrQvtC8INC_0YDQtdC00LvQvtC20LXQvdC40LkuPC9wPic7CiAgICBjZmcuZm9ybWF0cy5mb3JFYWNoKGZ1bmN0aW9uIChmLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emF1LWNhcmQiPjxoND7QpNC-0YDQvNCw0YIgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtScsICdmb3JtYXRzLicgKyBpICsgJy5oMycsIGYuaDMpICsKICAgICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtScsICdmb3JtYXRzLicgKyBpICsgJy5wJywgZi5wLCAnYXJlYScpICsKICAgICAgICBmaWVsZCgn0JfQvdCw0YfQvtC6ICjQuNC80Y8g0LjQtyDQvdCw0LHQvtGA0LAgTWF0ZXJpYWwgU3ltYm9scyknLCAnZm9ybWF0cy4nICsgaSArICcuaWNvbicsIGYuaWNvbikgKwogICAgICAgICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXUtc2VjIj48c3VtbWFyeT7Qn9GA0L7RhtC10YHRgSAoJyArIGNmZy5wcm9jZXNzLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emF1LWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emF1LXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCcsICdwcm9jU2VjLmxhYmVsJywgY2ZnLnByb2NTZWMubGFiZWwpICsKICAgICAgZmllbGQoJ9CX0LDQs9C-0LvQvtCy0L7QuiDRgNCw0LfQtNC10LvQsCcsICdwcm9jU2VjLmgyJywgY2ZnLnByb2NTZWMuaDIpICsgJzwvZGl2Pic7CiAgICBjZmcucHJvY2Vzcy5mb3JFYWNoKGZ1bmN0aW9uIChwLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emF1LWNhcmQiPjxoND7QqNCw0LMgJyArIChpICsgMSkgKyAnPC9oND4nICsKICAgICAgICAnPGRpdiBjbGFzcz0iYXZ6YXUtcm93Ij4nICsKICAgICAgICBmaWVsZCgn0J3QvtC80LXRgCcsICdwcm9jZXNzLicgKyBpICsgJy5udW0nLCBwLm51bSkgKwogICAgICAgIGZpZWxkKCfQndCw0LfQstCw0L3QuNC1JywgJ3Byb2Nlc3MuJyArIGkgKyAnLm5hbWUnLCBwLm5hbWUpICsgJzwvZGl2PicgKwogICAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1JywgJ3Byb2Nlc3MuJyArIGkgKyAnLmRlc2MnLCBwLmRlc2MsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emF1LXNlYyI-PHN1bW1hcnk-0KHRgtC-0LjQvNC-0YHRgtGMPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emF1LWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnphdS1oaW50Ij7QptC10L3QsCDRg9GF0L7QtNC40YIg0Lgg0LIg0LLQuNC00LjQvNGL0Lkg0LHQu9C-0LosINC4INCyINC_0YDQtdC00LvQvtC20LXQvdC40LUg0YDQsNC30LzQtdGC0LrQuCDigJQgJyArCiAgICAgICfRgNCw0LfQvtC50YLQuNGB0Ywg0LjQvCDQvdC10YfQtdC8LiDQldGB0LvQuCDQvtGH0LjRgdGC0LjRgtGMINC_0L7Qu9C1LCDQv9Cw0L3QtdC70Ywg0L7RgdGC0LDQstC40YIg0L_RgNC10LbQvdGO0Y4g0YbQtdC90YMg0LIg0YDQsNC30LzQtdGC0LrQtSAnICsKICAgICAgJ9C4INGB0LrQsNC20LXRgiDQvtCxINGN0YLQvtC8OiDQstGL0LTRg9C80YvQstCw0YLRjCDRh9C40YHQu9C-INC-0L3QsCDQvdC1INGB0YLQsNC90LXRgi48L3A-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJhdnphdS1yb3ciPicgKwogICAgICBmaWVsZCgn0J3QsNC00L_QuNGB0Ywg0YDQsNC30LTQtdC70LAnLCAnY29zdC5sYWJlbCcsIGNmZy5jb3N0LmxhYmVsKSArCiAgICAgIGZpZWxkKCfQptC10L3QsCcsICdjb3N0LnByaWNlJywgY2ZnLmNvc3QucHJpY2UpICsgJzwvZGl2Pic7CiAgICBjZmcuY29zdC5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7CiAgICAgIGggKz0gZmllbGQoJ9Cn0YLQviDQstGF0L7QtNC40YIg4oCUINGB0YLRgNC-0LrQsCAnICsgKGkgKyAxKSwgJ2Nvc3QuaXRlbXMuJyArIGksIHgpOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQn9C-0Y_RgdC90LXQvdC40LUg0L_QvtC0INGB0L_QuNGB0LrQvtC8JywgJ2Nvc3Qubm90ZScsIGNmZy5jb3N0Lm5vdGUsICdhcmVhJykgKwogICAgICAnPGRpdiBjbGFzcz0iYXZ6YXUtcm93Ij4nICsKICAgICAgZmllbGQoJ9Cd0LDQtNC_0LjRgdGMINC60L3QvtC_0LrQuCcsICdjb3N0LmJ0bicsIGNmZy5jb3N0LmJ0bikgKwogICAgICBmaWVsZCgn0JDQtNGA0LXRgSDQutC90L7Qv9C60LgnLCAnY29zdC5idG5IcmVmJywgY2ZnLmNvc3QuYnRuSHJlZikgKyAnPC9kaXY-JyArCiAgICAgICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXUtc2VjIj48c3VtbWFyeT7QktC-0L_RgNC-0YHRiyDQuCDQvtGC0LLQtdGC0YsgKCcgKyBjZmcuZmFxLmxlbmd0aCArICcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emF1LWluIj4nICsKICAgICAgJzxkaXYgY2xhc3M9ImF2emF1LXJvdyI-JyArCiAgICAgIGZpZWxkKCfQndCw0LTQv9C40YHRjCDRgNCw0LfQtNC10LvQsCcsICdmYXFTZWMubGFiZWwnLCBjZmcuZmFxU2VjLmxhYmVsKSArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0YDQsNC30LTQtdC70LAnLCAnZmFxU2VjLmgyJywgY2ZnLmZhcVNlYy5oMikgKyAnPC9kaXY-JyArCiAgICAgICc8cCBjbGFzcz0iYXZ6YXUtaGludCI-0JLQvtC_0YDQvtGB0Ysg0Lgg0L7RgtCy0LXRgtGLINGD0YXQvtC00Y_RgiDQsiDRgNCw0LfQvNC10YLQutGDINGB0LvQvtCy0L4g0LIg0YHQu9C-0LLQviDigJQg0L7RgtC00LXQu9GM0L3Ri9GFINC_0L7Qu9C10LkgJyArCiAgICAgICfCq9C00LvRjyDQv9C-0LjRgdC60LDCuyDQt9C00LXRgdGMINC90LXRgiDQuCDQsdGL0YLRjCDQvdC1INC00L7Qu9C20L3Qvi48L3A-JzsKICAgIGNmZy5mYXEuZm9yRWFjaChmdW5jdGlvbiAoZiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphdS1jYXJkIj48aDQ-0JLQvtC_0YDQvtGBICcgKyAoaSArIDEpICsgJzwvaDQ-JyArCiAgICAgICAgZmllbGQoJ9CS0L7Qv9GA0L7RgScsICdmYXEuJyArIGkgKyAnLnEnLCBmLnEpICsKICAgICAgICBmaWVsZCgn0J7RgtCy0LXRgiAo0LzQvtC20L3QviBIVE1MKScsICdmYXEuJyArIGkgKyAnLmEnLCBmLmEsICdhcmVhJykgKyAnPC9kaXY-JzsKICAgIH0pOwogICAgaCArPSAnPC9kaXY-PC9kZXRhaWxzPic7CgogICAgaCArPSAnPGRldGFpbHMgY2xhc3M9ImF2emF1LXNlYyI-PHN1bW1hcnk-0J_RgNC40LfRi9CyINC4INC_0L7QtNCy0LDQuzwvc3VtbWFyeT48ZGl2IGNsYXNzPSJhdnphdS1pbiI-JyArCiAgICAgIGZpZWxkKCfQl9Cw0LPQvtC70L7QstC-0Log0L_RgNC40LfRi9Cy0LAgKNC80L7QttC90L4g0L_QtdGA0LXQvdC-0YEg0YHRgtGA0L7QutC4INGC0LXQs9C-0LwgYnIpJywgJ2N0YS5oMicsIGNmZy5jdGEuaDIsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J_QvtC00L_QuNGB0Ywg0L_QvtC0INC30LDQs9C-0LvQvtCy0LrQvtC8JywgJ2N0YS5zdWInLCBjZmcuY3RhLnN1Yik7CiAgICBjZmcuY3RhLmJ0bnMuZm9yRWFjaChmdW5jdGlvbiAoYiwgaSkgewogICAgICBoICs9ICc8ZGl2IGNsYXNzPSJhdnphdS1yb3ciPicgKwogICAgICAgIGZpZWxkKCfQmtC90L7Qv9C60LAgJyArIChpICsgMSkgKyAnIOKAlCDQvdCw0LTQv9C40YHRjCcsICdjdGEuYnRucy4nICsgaSArICcudGV4dCcsIGIudGV4dCkgKwogICAgICAgIGZpZWxkKCfQmtC90L7Qv9C60LAgJyArIChpICsgMSkgKyAnIOKAlCDQsNC00YDQtdGBJywgJ2N0YS5idG5zLicgKyBpICsgJy5ocmVmJywgYi5ocmVmKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9IGZpZWxkKCfQmtC-0L_QuNGA0LDQudGCJywgJ2N0YS5jb3B5JywgY2ZnLmN0YS5jb3B5KTsKICAgIGNmZy5jdGEuc29jaWFscy5mb3JFYWNoKGZ1bmN0aW9uIChzLCBpKSB7CiAgICAgIGggKz0gJzxkaXYgY2xhc3M9ImF2emF1LXJvdyI-JyArCiAgICAgICAgZmllbGQoJ9Cf0YDQvtGE0LjQu9GMICcgKyAoaSArIDEpICsgJyDigJQg0L3QsNC00L_QuNGB0YwnLCAnY3RhLnNvY2lhbHMuJyArIGkgKyAnLnRleHQnLCBzLnRleHQpICsKICAgICAgICBmaWVsZCgn0J_RgNC-0YTQuNC70YwgJyArIChpICsgMSkgKyAnIOKAlCDQsNC00YDQtdGBJywgJ2N0YS5zb2NpYWxzLicgKyBpICsgJy5ocmVmJywgcy5ocmVmKSArICc8L2Rpdj4nOwogICAgfSk7CiAgICBoICs9ICc8L2Rpdj48L2RldGFpbHM-JzsKCiAgICBoICs9ICc8ZGV0YWlscyBjbGFzcz0iYXZ6YXUtc2VjIj48c3VtbWFyeT7QoNCw0LfQvNC10YLQutCwINC00LvRjyDQv9C-0LjRgdC60L7QstC40LrQvtCyPC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImF2emF1LWluIj4nICsKICAgICAgJzxwIGNsYXNzPSJhdnphdS1oaW50Ij7Ql9Cw0LPQvtC70L7QstC-0Log0Lgg0L7Qv9C40YHQsNC90LjQtSDRgdCw0LzQvtC5INGB0YLRgNCw0L3QuNGG0YsgKNGC0L4sINGH0YLQviDQstC40LTQvdC-INCyINCy0YvQtNCw0YfQtSkgJyArCiAgICAgICfQv9GA0LDQstGP0YLRgdGPINC90LUg0LfQtNC10YHRjCwg0LAg0LIg0L3QsNGB0YLRgNC-0LnQutCw0YUg0YHRgtGA0LDQvdC40YbRiyB3Zm9saW8uPC9wPicgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLINCyINGA0LDQt9C80LXRgtC60LUnLCAnbGQubmFtZScsIGNmZy5sZC5uYW1lKSArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0Ysg0LIg0YDQsNC30LzQtdGC0LrQtScsICdsZC5kZXNjJywgY2ZnLmxkLmRlc2MsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J3QsNC30LLQsNC90LjQtSDRg9GB0LvRg9Cz0LgnLCAnbGQuc3J2TmFtZScsIGNmZy5sZC5zcnZOYW1lKSArCiAgICAgIGZpZWxkKCfQntC_0LjRgdCw0L3QuNC1INGD0YHQu9GD0LPQuCcsICdsZC5zcnZEZXNjJywgY2ZnLmxkLnNydkRlc2MsICdhcmVhJykgKwogICAgICBmaWVsZCgn0J7Qv9C40YHQsNC90LjQtSDQv9GA0LXQtNC70L7QttC10L3QuNGPICjRh9GC0L4g0LLRhdC-0LTQuNGCINCyINGG0LXQvdGDKScsICdsZC5vZmZlckRlc2MnLCBjZmcubGQub2ZmZXJEZXNjLCAnYXJlYScpICsKICAgICAgJzwvZGl2PjwvZGV0YWlscz4nOwoKICAgIGggKz0gJzwvZGl2PjxkaXYgaWQ9ImF2emF1LWZvb3QiPicgKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYXZ6YXUtYiBwIiBpZD0iYXZ6YXUtYnVpbGQiPtCh0L7QsdGA0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLPC9idXR0b24-JyArCiAgICAgICc8YnV0dG9uIGNsYXNzPSJhdnphdS1iIiBpZD0iYXZ6YXUtdGVzdCI-0J_RgNC-0LLQtdGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6PC9idXR0b24-JyArCiAgICAgICc8c3BhbiBpZD0iYXZ6YXUtbXNnIj48L3NwYW4-PC9kaXY-JyArCiAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjAgMjBweCAxNnB4Ij48dGV4dGFyZWEgaWQ9ImF2emF1LW91dCIgcmVhZG9ubHk-PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4nOwoKICAgIHJvb3QuaW5uZXJIVE1MID0gaDsKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emF1LWNsb3NlJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcm9vdC5yZW1vdmUoKTsgfTsKCiAgICBhbGwocm9vdCwgJ2lucHV0W2RhdGEtcF0nKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnApIHsKICAgICAgdmFyIHAgPSBpbnAuZ2V0QXR0cmlidXRlKCdkYXRhLXAnKTsKICAgICAgaWYgKCEvXC5zcmMkLy50ZXN0KHApKSByZXR1cm47CiAgICAgIGlucC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHAgKyAnIl0nKTsKICAgICAgICBpZiAocHJldikgcHJldi5zcmMgPSBpbnAudmFsdWU7CiAgICAgIH0pOwogICAgfSk7CgogICAgLyog0YDQsNC30LzQtdGA0Ysg0LrQsNC00YDQsCDQuNC30LzQtdGA0Y_QtdC8INGB0LDQvNC4OiDQstGA0LDRgtGMINCyINGA0LDQt9C80LXRgtC60LUg0L3QtdC70YzQt9GPLAogICAgICAg0LAg0YDRg9C60LDQvNC4INC-0L3QuCDRg9GB0YLQsNGA0LXQstCw0Y7RgiDigJQg0YLQsNC6INGD0LbQtSDQsdGL0LvQviDQvdCwINC40L3RgtC10YDRjNC10YDQvdC-0LkgKi8KICAgIGZ1bmN0aW9uIG1lYXN1cmUodXJsKSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgdmFyIGltID0gbmV3IEltYWdlKCk7CiAgICAgICAgaW0ub25sb2FkID0gZnVuY3Rpb24gKCkgeyByZXMoeyB3OiBpbS5uYXR1cmFsV2lkdGgsIGg6IGltLm5hdHVyYWxIZWlnaHQgfSk7IH07CiAgICAgICAgaW0ub25lcnJvciA9IGZ1bmN0aW9uICgpIHsgcmVzKG51bGwpOyB9OwogICAgICAgIGltLnNyYyA9IHVybDsKICAgICAgfSk7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQstGL0LHQvtGAINC60LDQtNGA0LAg0YHQviDRgdGC0YDQsNC90LjRhtGLINC80LDRiNC40L3RiyAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYWJzKHUpIHsKICAgICAgaWYgKCF1KSByZXR1cm4gJyc7CiAgICAgIGlmICh1LmluZGV4T2YoJy8vJykgPT09IDApIHJldHVybiAnaHR0cHM6JyArIHU7CiAgICAgIHJldHVybiB1OwogICAgfQoKICAgIGZ1bmN0aW9uIGZyb21TcmNzZXQoc2V0LCBzcmMpIHsKICAgICAgaWYgKCFzZXQpIHJldHVybiBhYnMoc3JjKTsKICAgICAgdmFyIGJlc3QgPSBudWxsOwogICAgICBzZXQuc3BsaXQoJywnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7CiAgICAgICAgdmFyIGJpdHMgPSBwYXJ0LnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICAgICAgdmFyIHcgPSBwYXJzZUludCgoYml0c1sxXSB8fCAnJykucmVwbGFjZSgndycsICcnKSwgMTApOwogICAgICAgIGlmICghdyB8fCB3ID4gTUFYVykgcmV0dXJuOwogICAgICAgIGlmICghYmVzdCB8fCB3ID4gYmVzdC53KSBiZXN0ID0geyB3OiB3LCB1cmw6IGFicyhiaXRzWzBdKSB9OwogICAgICB9KTsKICAgICAgcmV0dXJuIGJlc3QgPyBiZXN0LnVybCA6IGFicyhzcmMpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNob3RzRnJvbSh1cmwpIHsKICAgICAgcmV0dXJuIGZldGNoKHVybCwgeyBjcmVkZW50aWFsczogJ29taXQnIH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsgcmV0dXJuIHIub2sgPyByLnRleHQoKSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcign0LrQvtC0ICcgKyByLnN0YXR1cykpOyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgICAgICAgdmFyIG91dCA9IFtdLCBzZWVuID0ge307CiAgICAgICAgICBhbGwoZG9jLCAnaW1nJykuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHsKICAgICAgICAgICAgdmFyIHUgPSBmcm9tU3Jjc2V0KGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmNzZXQnKSB8fCBpbS5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpLAogICAgICAgICAgICAgIGltLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSB8fCBpbS5nZXRBdHRyaWJ1dGUoJ3NyYycpKTsKICAgICAgICAgICAgaWYgKCF1IHx8IHUuaW5kZXhPZignaS53Zm9saW8ucnUnKSA8IDAgfHwgc2Vlblt1XSkgcmV0dXJuOwogICAgICAgICAgICBzZWVuW3VdID0gMTsgb3V0LnB1c2godSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfSk7CiAgICB9CgogICAgdmFyIHBpY2tMYXN0ID0gJyc7CiAgICBhbGwocm9vdCwgJ2J1dHRvbltkYXRhLXBpY2tdJykuZm9yRWFjaChmdW5jdGlvbiAoYnRuKSB7CiAgICAgIGJ0bi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBiYXNlID0gYnRuLmdldEF0dHJpYnV0ZSgnZGF0YS1waWNrJyk7CiAgICAgICAgdmFyIGhyZWZJbnAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXA9IicgKyBiYXNlICsgJy5ocmVmIl0nKTsKICAgICAgICB2YXIgdXJsID0gaHJlZklucCA_IGhyZWZJbnAudmFsdWUudHJpbSgpIDogJyc7CiAgICAgICAgLyog0YTQvtC90Ysg0L7QsdC70L7QttC60Lgg0Lgg0YTQuNC90LDQu9CwOiDRgdCy0L7QtdC5INGB0YLRgNCw0L3QuNGG0Ysg0L3QtdGCIOKAlCDRgdC_0YDQsNGI0LjQstCw0LXQvCDQsNC00YDQtdGBICovCiAgICAgICAgaWYgKCFocmVmSW5wICYmIC9eaGVyb1wuLy50ZXN0KGJhc2UpKSB7CiAgICAgICAgICB1cmwgPSAod2luZG93LnByb21wdCgn0JDQtNGA0LXRgSDRgdGC0YDQsNC90LjRhtGLLCDRgSDQutC-0YLQvtGA0L7QuSDQstC30Y_RgtGMINC60LDQtNGAOicsIHBpY2tMYXN0IHx8ICdodHRwczovL2F2YW56YXRvLnJ1L2F2dG9tb2JpbG55ZS1mb3Rvc2Vzc2lpJykgfHwgJycpLnRyaW0oKTsKICAgICAgICAgIGlmICghdXJsKSByZXR1cm47CiAgICAgICAgICBwaWNrTGFzdCA9IHVybDsKICAgICAgICB9CiAgICAgICAgaWYgKCF1cmwpIHsgbXNnKCfQoyDRjdGC0L7QuSDQutCw0YDRgtC-0YfQutC4INC90LUg0LfQsNC00LDQvSDQsNC00YDQtdGBINGB0YLRgNCw0L3QuNGG0Ysg0LzQsNGI0LjQvdGLIOKAlCDQstGL0LHQuNGA0LDRgtGMINC90LUg0LjQtyDRh9C10LPQvi4nKTsgcmV0dXJuOyB9CiAgICAgICAgdmFyIGJveCA9IGJ0bi5wYXJlbnROb2RlOwogICAgICAgIHZhciBoZWFkID0gYm94LnF1ZXJ5U2VsZWN0b3IoJy5hdnphdS1waWNraGVhZCcpOwogICAgICAgIGlmICghaGVhZCkgewogICAgICAgICAgaGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKICAgICAgICAgIGhlYWQuY2xhc3NOYW1lID0gJ2F2emF1LWhpbnQgYXZ6YXUtcGlja2hlYWQnOwogICAgICAgICAgYm94LmFwcGVuZENoaWxkKGhlYWQpOwogICAgICAgIH0KICAgICAgICB2YXIgZ3JpZCA9IGJveC5xdWVyeVNlbGVjdG9yKCcuYXZ6YXUtZ3JpZCcpOwogICAgICAgIGlmIChncmlkKSBncmlkLnJlbW92ZSgpOwogICAgICAgIGhlYWQudGV4dENvbnRlbnQgPSAn0JfQsNCz0YDRg9C20LDRjiAnICsgdXJsICsgJ-KApic7CiAgICAgICAgc2hvdHNGcm9tKHVybCkudGhlbihmdW5jdGlvbiAobGlzdCkgewogICAgICAgICAgaWYgKCFsaXN0Lmxlbmd0aCkgeyBoZWFkLnRleHRDb250ZW50ID0gJ9Ca0LDQtNGA0L7QsiDQvdC1INC90LDRiNC70L7RgdGMLic7IHJldHVybjsgfQogICAgICAgICAgaGVhZC50ZXh0Q29udGVudCA9ICfQktGL0LHQtdGA0LjRgtC1INC60LDQtNGAICgnICsgbGlzdC5sZW5ndGggKyAnKSc7CiAgICAgICAgICB2YXIgZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgZy5jbGFzc05hbWUgPSAnYXZ6YXUtZ3JpZCc7CiAgICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKHUpIHsKICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWd1cmUnKTsKICAgICAgICAgICAgdmFyIGltID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CiAgICAgICAgICAgIGltLnNyYyA9IHU7IGltLmxvYWRpbmcgPSAnbGF6eSc7CiAgICAgICAgICAgIGYuYXBwZW5kQ2hpbGQoaW0pOwogICAgICAgICAgICBmLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHJvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtcD0iJyArIGJhc2UgKyAnLnNyYyJdJykgfHwgcm9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1wPSInICsgYmFzZSArICciXScpOwogICAgICAgICAgICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgICAgICAgIHRhcmdldC52YWx1ZSA9IHU7CiAgICAgICAgICAgICAgICB2YXIgcHJldiA9IHJvb3QucXVlcnlTZWxlY3RvcignaW1nW2RhdGEtcHJldj0iJyArIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpICsgJyJdJyk7CiAgICAgICAgICAgICAgICBpZiAocHJldikgcHJldi5zcmMgPSB1OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBnLnJlbW92ZSgpOyBoZWFkLnRleHRDb250ZW50ID0gJ9Ca0LDQtNGAINCy0YvQsdGA0LDQvS4nOwogICAgICAgICAgICB9OwogICAgICAgICAgICBnLmFwcGVuZENoaWxkKGYpOwogICAgICAgICAgfSk7CiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQoZyk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHsgaGVhZC50ZXh0Q29udGVudCA9ICfQndC1INC-0YLQutGA0YvQu9C-0YHRjDogJyArIGUubWVzc2FnZTsgfSk7CiAgICAgIH07CiAgICB9KTsKCiAgICAvKiAtLS0tLS0tLS0tINGB0LHQvtGAINC30L3QsNGH0LXQvdC40Lkg0LjQtyDRhNC-0YDQvNGLIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBzZXRQYXRoKG9iaiwgcGF0aCwgdmFsKSB7CiAgICAgIHZhciBwID0gcGF0aC5zcGxpdCgnLicpLCBvID0gb2JqOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHAubGVuZ3RoIC0gMTsgaSsrKSBvID0gb1twW2ldXTsKICAgICAgb1twW3AubGVuZ3RoIC0gMV1dID0gdmFsOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbGxlY3QoKSB7CiAgICAgIHZhciBkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZmcpKTsKICAgICAgYWxsKHJvb3QsICdbZGF0YS1wXScpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CiAgICAgICAgc2V0UGF0aChkLCBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcCcpLCBlbC52YWx1ZS50cmltKCkpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGQ7CiAgICB9CgogICAgLyogLS0tLS0tLS0tLSDQt9Cw0L_QuNGB0Ywg0LIg0YDQsNC30LzQtdGC0LrRgyAtLS0tLS0tLS0tCiAgICAgICDQn9C40YjQtdC8INCyINGC0L7RgiDRgtC10LrRgdGC0L7QstGL0Lkg0YPQt9C10LssINCz0LTQtSDRgtC10LrRgdGCINC00LXQudGB0YLQstC40YLQtdC70YzQvdC-INC10YHRgtGMLgogICAgICAg0KHRgtC40YDQsNGC0Ywg0YHQvtC00LXRgNC20LjQvNC-0LUg0YbQtdC70LjQutC-0Lwg0L3QtdC70YzQt9GPOiDRgNGP0LTQvtC8INGBINGC0LXQutGB0YLQvtC8INC70LXQttCw0YIKICAgICAgINCy0LvQvtC20LXQvdC90YvQtSDRjdC70LXQvNC10L3RgtGLLCDQuCDQvtC90Lgg0YPQtdC30LbQsNC70Lgg0LIg0LrQvtC90LXRhiDigJQg0Y3RgtC-INGD0LbQtSDRgdGC0L7QuNC70L4KICAgICAgINGC0YDRkdGFINC_0YDQsNCy0L7QuiDQsiDQtNGA0YPQs9C40YUg0L_QsNC90LXQu9GP0YUuINCX0LTQtdGB0Ywg0Y3RgtC-INC60YDQuNGC0LjRh9C90L4g0LTQu9GPINC_0L7QtNGB0LrQsNC30LrQuAogICAgICAg0L4g0L_RgNC-0LrRgNGD0YLQutC1INC4INC30L3QsNGH0LrQvtCyINGE0L7RgNC80LDRgtC-0LIuICovCgogICAgZnVuY3Rpb24gc2V0VGV4dChlbCwgdikgewogICAgICBpZiAoIWVsKSByZXR1cm47CiAgICAgIHZhciBub2RlID0gbnVsbDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG4gPSBlbC5jaGlsZE5vZGVzW2ldOwogICAgICAgIGlmIChuLm5vZGVUeXBlID09PSAzICYmIG4ubm9kZVZhbHVlLnRyaW0oKSkgeyBub2RlID0gbjsgYnJlYWs7IH0KICAgICAgfQogICAgICBpZiAoIW5vZGUpIHsgZWwudGV4dENvbnRlbnQgPSB2OyByZXR1cm47IH0KICAgICAgdmFyIG0gPSBub2RlLm5vZGVWYWx1ZS5tYXRjaCgvXihccyopW1xzXFNdKj8oXHMqKSQvKTsKICAgICAgbm9kZS5ub2RlVmFsdWUgPSAobSA_IG1bMV0gOiAnJykgKyB2ICsgKG0gPyBtWzJdIDogJycpOwogICAgfQogICAgZnVuY3Rpb24gc2V0SHRtbChlbCwgdikgeyBpZiAoZWwpIGVsLmlubmVySFRNTCA9IHY7IH0KCiAgICBmdW5jdGlvbiB3cml0ZUFsbChzY29wZSwgZCkgewogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5oZXJvLWV5ZWJyb3cnKSwgZC5oZXJvLmV5ZWJyb3cpOwogICAgICB2YXIgbGluZXMgPSBhbGwoc2NvcGUsICcuaGVyby10aXRsZS1pbm5lcicpOwogICAgICBzZXRUZXh0KGxpbmVzWzBdLCBkLmhlcm8ubGluZTEpOwogICAgICBpZiAobGluZXNbMV0pIHsKICAgICAgICB2YXIgZW0gPSBvbmUobGluZXNbMV0sICdlbScpOwogICAgICAgIHNldFRleHQoZW0gfHwgbGluZXNbMV0sIGQuaGVyby5saW5lMik7CiAgICAgIH0KICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuaGVyby1zdWInKSwgZC5oZXJvLnN1Yik7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmhlcm8tc2Nyb2xsLWhpbnQnKSwgZC5oZXJvLmhpbnQpOwogICAgICBbWycuaGVybycsIGQuaGVyby5iZ10sIFsnLmN0YScsIGQuaGVyby5jdGFCZ11dLmZvckVhY2goZnVuY3Rpb24gKHgpIHsKICAgICAgICB2YXIgc2VjID0gb25lKHNjb3BlLCB4WzBdKTsKICAgICAgICBpZiAoc2VjICYmICh4WzFdIHx8IHNlYy5oYXNBdHRyaWJ1dGUoJ2RhdGEtYmcnKSkpIHNlYy5zZXRBdHRyaWJ1dGUoJ2RhdGEtYmcnLCB4WzFdIHx8ICcnKTsKICAgICAgfSk7CgogICAgICB2YXIgbGFiZWxzID0gYWxsKHNjb3BlLCAnLnNlY3Rpb24tbGFiZWwgc3BhbicpOwogICAgICBzZXRUZXh0KGxhYmVsc1swXSwgZC5nYWxsZXJ5TGFiZWwpOwogICAgICBpZiAobGFiZWxzWzFdKSBzZXRUZXh0KGxhYmVsc1sxXSwgZC5mbXRMYWJlbCk7CgogICAgICBhbGwoc2NvcGUsICcuZ2FsbGVyeS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuY2FyZHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHZhciBpbWcgPSBvbmUoaXQsICdpbWcnKTsKICAgICAgICBpZiAoaW1nKSB7CiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdzcmMnLCB2LnNyYyk7CiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdhbHQnLCB2LmFsdCk7CiAgICAgICAgICBpZiAodi53KSBpbWcuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHYudyk7CiAgICAgICAgICBpZiAodi5oKSBpbWcuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB2LmgpOwogICAgICAgIH0KICAgICAgICBpZiAodi5ocmVmKSBpdC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB2LmhyZWYpOwogICAgICAgIGVsc2UgaXQucmVtb3ZlQXR0cmlidXRlKCdocmVmJyk7CiAgICAgICAgc2V0VGV4dChvbmUoaXQsICcub3ZlcmxheS10ZXh0IGgzJyksIHYuYnJhbmQpOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLm92ZXJsYXktdGV4dCBzcGFuJyksIHYubW9kZWwpOwogICAgICAgIHZhciBiYWRnZSA9IG9uZShpdCwgJy5mZWF0dXJlZC1iYWRnZScpOwogICAgICAgIGlmIChiYWRnZSAmJiB2LmJhZGdlKSBzZXRUZXh0KGJhZGdlLCB2LmJhZGdlKTsKICAgICAgfSk7CgogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5hYm91dC1sYWJlbCcpLCBkLmFib3V0LmxhYmVsKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuYWJvdXQgaDInKSwgZC5hYm91dC5oMik7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmFib3V0IHAnKSwgZC5hYm91dC5wKTsKCiAgICAgIGFsbChzY29wZSwgJy5hZHYtaXRlbScpLmZvckVhY2goZnVuY3Rpb24gKGl0LCBpKSB7CiAgICAgICAgdmFyIHYgPSBkLmZvcm1hdHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLmljb24nKSwgdi5pY29uKTsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJ2gzJyksIHYuaDMpOwogICAgICAgIHNldFRleHQob25lKGl0LCAncCcpLCB2LnApOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLnByb2Nlc3MtaGVhZGVyIC5sYWJlbCcpLCBkLnByb2NTZWMubGFiZWwpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5wcm9jZXNzLWhlYWRlciBoMicpLCBkLnByb2NTZWMuaDIpOwogICAgICBhbGwoc2NvcGUsICcucHJvY2Vzcy1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQucHJvY2Vzc1tpXTsgaWYgKCF2KSByZXR1cm47CiAgICAgICAgc2V0VGV4dChvbmUoaXQsICcucHJvY2Vzcy1udW0nKSwgdi5udW0pOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLnByb2Nlc3MtbmFtZScpLCB2Lm5hbWUpOwogICAgICAgIHNldFRleHQob25lKGl0LCAnLnByb2Nlc3MtZGVzYycpLCB2LmRlc2MpOwogICAgICB9KTsKCiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmNvc3QgLmxhYmVsJyksIGQuY29zdC5sYWJlbCk7CiAgICAgIHNldFRleHQob25lKHNjb3BlLCAnLmNvc3QgaDInKSwgZC5jb3N0LnByaWNlKTsKICAgICAgYWxsKHNjb3BlLCAnLmNvc3QtbGlzdCBsaScpLmZvckVhY2goZnVuY3Rpb24gKGxpLCBpKSB7CiAgICAgICAgaWYgKGQuY29zdC5pdGVtc1tpXSAhPSBudWxsKSBzZXRUZXh0KGxpLCBkLmNvc3QuaXRlbXNbaV0pOwogICAgICB9KTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuY29zdC1ub3RlJyksIGQuY29zdC5ub3RlKTsKICAgICAgdmFyIGNiID0gb25lKHNjb3BlLCAnLmNvc3QgLmF2ei1idG4nKTsKICAgICAgc2V0VGV4dChjYiwgZC5jb3N0LmJ0bik7CiAgICAgIGlmIChjYikgY2Iuc2V0QXR0cmlidXRlKCdocmVmJywgZC5jb3N0LmJ0bkhyZWYpOwoKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuZmFxLWhlYWRlciAubGFiZWwnKSwgZC5mYXFTZWMubGFiZWwpOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5mYXEtaGVhZGVyIGgyJyksIGQuZmFxU2VjLmgyKTsKICAgICAgYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykuZm9yRWFjaChmdW5jdGlvbiAoaXQsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuZmFxW2ldOyBpZiAoIXYpIHJldHVybjsKICAgICAgICBzZXRUZXh0KG9uZShpdCwgJy5mYXEtcScpLCB2LnEpOwogICAgICAgIHNldEh0bWwob25lKGl0LCAnLmZhcS1hJyksIHYuYSk7CiAgICAgIH0pOwoKICAgICAgc2V0SHRtbChvbmUoc2NvcGUsICcuY3RhIGgyJyksIGQuY3RhLmgyKTsKICAgICAgc2V0VGV4dChvbmUoc2NvcGUsICcuY3RhLXN1YicpLCBkLmN0YS5zdWIpOwogICAgICBhbGwoc2NvcGUsICcuYnRuLXJvdyAuYXZ6LWJ0bicpLmZvckVhY2goZnVuY3Rpb24gKGIsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuY3RhLmJ0bnNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQoYiwgdi50ZXh0KTsKICAgICAgICBiLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgIH0pOwogICAgICBzZXRUZXh0KG9uZShzY29wZSwgJy5jdGEtc29jaWFscyBzcGFuJyksIGQuY3RhLmNvcHkpOwogICAgICBhbGwoc2NvcGUsICcuY3RhLXNvY2lhbHMgYScpLmZvckVhY2goZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICB2YXIgdiA9IGQuY3RhLnNvY2lhbHNbaV07IGlmICghdikgcmV0dXJuOwogICAgICAgIHNldFRleHQoYSwgdi50ZXh0KTsKICAgICAgICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHYuaHJlZik7CiAgICAgIH0pOwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YDQsNC30LzQtdGC0LrQsCAtLS0tLS0tLS0tICovCgogICAgZnVuY3Rpb24gYnVpbGRMZChkb2MsIHNjb3BlLCBkKSB7CiAgICAgIHZhciBzID0gb25lKGRvYywgJ3NjcmlwdFt0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIl0nKTsKICAgICAgaWYgKCFzKSByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiDRgNCw0LfQvNC10YLQutC4IGxkK2pzb24nIH07CiAgICAgIHZhciBvOwogICAgICB0cnkgeyBvID0gSlNPTi5wYXJzZShzLnRleHRDb250ZW50KTsgfQogICAgICBjYXRjaCAoZSkgeyByZXR1cm4geyB0ZXh0OiBudWxsLCBlcnI6ICfRgNCw0LfQvNC10YLQutCwINGB0YLRgNCw0L3QuNGG0Ysg4oCUINC90LUg0LLQsNC70LjQtNC90YvQuSBKU09OJyB9OyB9CiAgICAgIHZhciBnID0gb1snQGdyYXBoJ10gfHwgW107CiAgICAgIHN5bmNDYW5vbihnKTsKICAgICAgdmFyIHdhcm4gPSBbXTsKCiAgICAgIGcuZm9yRWFjaChmdW5jdGlvbiAobikgewogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnV2ViUGFnZScpIHsKICAgICAgICAgIG4ubmFtZSA9IGQubGQubmFtZTsKICAgICAgICAgIG4uZGVzY3JpcHRpb24gPSBkLmxkLmRlc2M7CiAgICAgICAgICBuLmRhdGVNb2RpZmllZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7CiAgICAgICAgfQogICAgICAgIGlmIChuWydAdHlwZSddID09PSAnU2VydmljZScpIHsKICAgICAgICAgIG4ubmFtZSA9IGQubGQuc3J2TmFtZTsKICAgICAgICAgIG4uZGVzY3JpcHRpb24gPSBkLmxkLnNydkRlc2M7CiAgICAgICAgICBpZiAobi5vZmZlcnMpIHsKICAgICAgICAgICAgbi5vZmZlcnMuZGVzY3JpcHRpb24gPSBkLmxkLm9mZmVyRGVzYzsKICAgICAgICAgICAgLyog0YbQtdC90LAg4oCUINC40Lcg0LLQuNC00LjQvNC-0LPQviDQsdC70L7QutCwLiDQn9GD0YHRgtC-IOKAlCDQvtGB0YLQsNCy0LvRj9C10Lwg0L_RgNC10LbQvdGO0Y4KICAgICAgICAgICAgICAg0Lgg0LPQvtCy0L7RgNC40Lwg0LLRgdC70YPRhS4g0KHQvtGH0LjQvdGP0YLRjCDRh9C40YHQu9C-INC90LXQu9GM0LfRjy4gKi8KICAgICAgICAgICAgdmFyIHAgPSBkaWdpdHMoZC5jb3N0LnByaWNlKTsKICAgICAgICAgICAgaWYgKHApIG4ub2ZmZXJzLnByaWNlID0gcDsKICAgICAgICAgICAgZWxzZSB3YXJuLnB1c2goJ9CyINCx0LvQvtC60LUg0YHRgtC-0LjQvNC-0YHRgtC4INC90LXRgiDRhtC40YTRgNGLIOKAlCDRhtC10L3QsCDQsiDRgNCw0LfQvNC10YLQutC1INC-0YHRgtCw0LvQsNGB0Ywg0L_RgNC10LbQvdC10LknKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChuLmhhc09mZmVyQ2F0YWxvZyAmJiBuLmhhc09mZmVyQ2F0YWxvZy5pdGVtTGlzdEVsZW1lbnQpIHsKICAgICAgICAgICAgbi5oYXNPZmZlckNhdGFsb2cuaXRlbUxpc3RFbGVtZW50ID0gZC5mb3JtYXRzLm1hcChmdW5jdGlvbiAoZikgewogICAgICAgICAgICAgIHJldHVybiB7ICdAdHlwZSc6ICdPZmZlcicsIGl0ZW1PZmZlcmVkOiB7ICdAdHlwZSc6ICdTZXJ2aWNlJywgbmFtZTogZi5oMyB9IH07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CgogICAgICAvKiDQs9C70LDQstC90L7QtSDQuNC30L7QsdGA0LDQttC10L3QuNC1IOKAlCDQv9C10YDQstGL0Lkg0LrQsNC00YAg0LPQsNC70LXRgNC10LggKi8KICAgICAgdmFyIGZpcnN0ID0gZC5jYXJkc1swXTsKICAgICAgZy5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgaWYgKFN0cmluZyhuWydAaWQnXSB8fCAnJykuaW5kZXhPZignI3ByaW1hcnlpbWFnZScpID4gLTEgJiYgZmlyc3QpIHsKICAgICAgICAgIG4udXJsID0gZmlyc3Quc3JjOwogICAgICAgICAgbi5jYXB0aW9uID0gZmlyc3QuYWx0OwogICAgICAgICAgaWYgKGZpcnN0LncpIG4ud2lkdGggPSBwYXJzZUludChmaXJzdC53LCAxMCk7CiAgICAgICAgICBpZiAoZmlyc3QuaCkgbi5oZWlnaHQgPSBwYXJzZUludChmaXJzdC5oLCAxMCk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIC8qINC80LDRiNC40L3Rizog0LjQvNGPINC40Lcg0LzQsNGA0LrQuCDQuCDQvNC-0LTQtdC70LgsINCw0LTRgNC10YEg0LjQtyDQutCw0YDRgtC-0YfQutC4ICovCiAgICAgIHZhciB3b3JrcyA9IGcuZmlsdGVyKGZ1bmN0aW9uIChuKSB7IHJldHVybiBTdHJpbmcoblsnQGlkJ10gfHwgJycpLmluZGV4T2YoJyN3b3JrcycpID4gLTE7IH0pWzBdOwogICAgICBpZiAod29ya3MpIHsKICAgICAgICB3b3Jrcy5udW1iZXJPZkl0ZW1zID0gZC5jYXJkcy5sZW5ndGg7CiAgICAgICAgd29ya3MuaXRlbUxpc3RFbGVtZW50ID0gZC5jYXJkcy5tYXAoZnVuY3Rpb24gKHYsIGkpIHsKICAgICAgICAgIHZhciBuYW1lID0gKHYuYnJhbmQgKyAnICcgKyB2Lm1vZGVsKS5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCk7CiAgICAgICAgICB2YXIgaW1nID0geyAnQHR5cGUnOiAnSW1hZ2VPYmplY3QnLCBjb250ZW50VXJsOiB2LnNyYywgbmFtZTogdi5hbHQsIGNhcHRpb246IG5hbWUgfTsKICAgICAgICAgIGlmICh2LmhyZWYpIGltZy5pc1BhcnRPZiA9IHsgJ0B0eXBlJzogJ1dlYlBhZ2UnLCB1cmw6IHYuaHJlZiB9OwogICAgICAgICAgZWxzZSB3YXJuLnB1c2goJ9GDINC60LDRgNGC0L7Rh9C60LggJyArIChpICsgMSkgKyAnINC90LXRgiDQsNC00YDQtdGB0LAg0YHRgtGA0LDQvdC40YbRiyDQvNCw0YjQuNC90YsnKTsKICAgICAgICAgIHZhciBub2RlID0geyAnQHR5cGUnOiAnTGlzdEl0ZW0nLCBwb3NpdGlvbjogaSArIDEsIG5hbWU6IG5hbWUsIGl0ZW06IGltZyB9OwogICAgICAgICAgaWYgKHYuaHJlZikgbm9kZS51cmwgPSB2LmhyZWY7CiAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgLyog0LLQvtC_0YDQvtGB0Ysg4oCUINC40Lcg0LLQuNC00LjQvNC-0LPQviDRgtC10LrRgdGC0LAg0YHQu9C-0LLQviDQsiDRgdC70L7QstC-ICovCiAgICAgIHZhciBmYXEgPSBnLmZpbHRlcihmdW5jdGlvbiAobikgeyByZXR1cm4gblsnQHR5cGUnXSA9PT0gJ0ZBUVBhZ2UnOyB9KVswXTsKICAgICAgaWYgKGZhcSkgewogICAgICAgIGZhcS5tYWluRW50aXR5ID0gYWxsKHNjb3BlLCAnLmZhcS1pdGVtJykubWFwKGZ1bmN0aW9uIChpdCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ0B0eXBlJzogJ1F1ZXN0aW9uJywKICAgICAgICAgICAgbmFtZTogdGV4dFdpdGhCcmVha3Mob25lKGl0LCAnLmZhcS1xJykpLAogICAgICAgICAgICBhY2NlcHRlZEFuc3dlcjogeyAnQHR5cGUnOiAnQW5zd2VyJywgdGV4dDogdGV4dFdpdGhCcmVha3Mob25lKGl0LCAnLmZhcS1hJykpIH0KICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIC8qINGG0LXQvdCwLCDQvdCw0LfQstCw0L3QvdCw0Y8g0LIg0L7Qv9C40YHQsNC90LjQuCDRgdGC0YDQsNC90LjRhtGLLCDQvdC1INC00L7Qu9C20L3QsCDRgNCw0YHRhdC-0LTQuNGC0YzRgdGPCiAgICAgICAgINGBINCy0LjQtNC40LzQvtC5LiDQn9Cw0L3QtdC70Ywg0L3QtSDQv9C-0LTQvNC10L3Rj9C10YIg0YfQuNGB0LvQviDQstC90YPRgtGA0Lgg0LbQuNCy0L7QuSDRhNGA0LDQt9GLIOKAlAogICAgICAgICDRgtC-0LvRjNC60L4g0YHQstC10YDRj9C10YIg0Lgg0LPQvtCy0L7RgNC40YIg0LLRgdC70YPRhTog0L_QvtC00YHRgtCw0LLQu9GP0YLRjCDQstGB0LvQtdC_0YPRjiDQvtC_0LDRgdC90LXQtS4gKi8KICAgICAgdmFyIHByaWNlTnVtID0gZGlnaXRzKGQuY29zdC5wcmljZSk7CiAgICAgIGlmIChwcmljZU51bSkgewogICAgICAgIHZhciBodW1hbiA9IG1vbmV5KHByaWNlTnVtKTsKICAgICAgICBbWyfQvtC_0LjRgdCw0L3QuNC1INGB0YLRgNCw0L3QuNGG0YsnLCBkLmxkLmRlc2NdLCBbJ9C-0L_QuNGB0LDQvdC40LUg0YPRgdC70YPQs9C4JywgZC5sZC5zcnZEZXNjXSwKICAgICAgICAgWyfQvtC_0LjRgdCw0L3QuNC1INC_0YDQtdC00LvQvtC20LXQvdC40Y8nLCBkLmxkLm9mZmVyRGVzY11dLmZvckVhY2goZnVuY3Rpb24gKHBhaXIpIHsKICAgICAgICAgIHZhciB0eHQgPSBTdHJpbmcocGFpclsxXSB8fCAnJyk7CiAgICAgICAgICB2YXIgZm91bmQgPSB0eHQubWF0Y2goL1xkW1xkXHMgIF17Mix9XGQvZykgfHwgW107CiAgICAgICAgICB2YXIgbWlzbWF0Y2ggPSBmb3VuZC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIGRpZ2l0cyh4KSAhPT0gcHJpY2VOdW07IH0pOwogICAgICAgICAgaWYgKG1pc21hdGNoLmxlbmd0aCkgewogICAgICAgICAgICB3YXJuLnB1c2goJ9CyINC_0L7Qu9C1IMKrJyArIHBhaXJbMF0gKyAnwrsg0YHRgtC-0LjRgiDRh9C40YHQu9C-ICcgKyBtaXNtYXRjaFswXS50cmltKCkgKwogICAgICAgICAgICAgICcsINCwINGG0LXQvdCwINC90LAg0YHRgtGA0LDQvdC40YbQtSAnICsgaHVtYW4pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICAvKiDQs9GA0LDRhCDQvtCx0Y_Qt9Cw0L0g0L7RgdGC0LDQstCw0YLRjNGB0Y8g0LfQsNC80LrQvdGD0YLRi9C8OiDRgdGB0YvQu9C60LAg0LIg0L_Rg9GB0YLQvtGC0YMg4oCUINC80L7Qu9GH0LDQu9C40LLQsNGPCiAgICAgICAgINC_0L7Qu9C-0LzQutCwLCDQtdGRINC90LjQutGC0L4g0L3QtSDQt9Cw0LzQtdGC0LjRgiDQsdC10Lcg0L_RgNC-0LLQtdGA0LrQuCAqLwogICAgICB2YXIgaWRzID0ge30sIGRhbmdsaW5nID0gW107CiAgICAgIGcuZm9yRWFjaChmdW5jdGlvbiAobikgeyBpZiAoblsnQGlkJ10pIGlkc1tuWydAaWQnXV0gPSAxOyB9KTsKICAgICAgKGZ1bmN0aW9uIHdhbGsoeCkgewogICAgICAgIGlmICh4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JykgewogICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHgpICYmIHhbJ0BpZCddICYmIE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMSAmJiAhaWRzW3hbJ0BpZCddXSkgewogICAgICAgICAgICBkYW5nbGluZy5wdXNoKHhbJ0BpZCddKTsKICAgICAgICAgIH0KICAgICAgICAgIE9iamVjdC5rZXlzKHgpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgaWYgKGsgIT09ICdAaWQnKSB3YWxrKHhba10pOyB9KTsKICAgICAgICB9CiAgICAgIH0pKGcpOwogICAgICBpZiAoZGFuZ2xpbmcubGVuZ3RoKSB3YXJuLnB1c2goJ9GB0YHRi9C70LrQuCDQsiDQv9GD0YHRgtC-0YLRgzogJyArIGRhbmdsaW5nLmpvaW4oJywgJykpOwoKICAgICAgcmV0dXJuIHsgdGV4dDogSlNPTi5zdHJpbmdpZnkobywgbnVsbCwgMiksIGVycjogbnVsbCwgd2Fybjogd2FybiB9OwogICAgfQoKICAgIC8qIC0tLS0tLS0tLS0g0YHQsdC-0YDQutCwIC0tLS0tLS0tLS0gKi8KCiAgICBmdW5jdGlvbiBhc3NlbWJsZShkKSB7CiAgICAgIHJldHVybiBwYWdlU291cmNlKCkudGhlbihmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoc3JjLCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdnotYXV0bycpOwogICAgICAgIHZhciBzdHlsZSA9IGFsbChkb2MsICdzdHlsZScpLmZpbHRlcihmdW5jdGlvbiAoeCkgewogICAgICAgICAgcmV0dXJuIHgudGV4dENvbnRlbnQuaW5kZXhPZignLmF2ei1hdXRvIC5nYWxsZXJ5LWdyaWQnKSA-IC0xOwogICAgICAgIH0pWzBdOwogICAgICAgIHZhciBzY3JpcHQgPSBhbGwoZG9jLCAnc2NyaXB0Om5vdChbdHlwZV0pJykuZmlsdGVyKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geC50ZXh0Q29udGVudC5pbmRleE9mKCd3YWl0Rm9yRE9NJykgPiAtMSAmJiB4LnRleHRDb250ZW50LmluZGV4T2YoJy5hdnotYXV0bycpID4gLTE7CiAgICAgICAgfSlbMF07CiAgICAgICAgLyog0YHRgtGA0L7QutGDINGI0YDQuNGE0YLQvtCyINCx0LXRgNGR0Lwg0LjQtyDQuNGB0YXQvtC00L3QuNC60LAg0KHQq9Cg0KvQnCDRgtC10LrRgdGC0L7QvDog0YfQtdGA0LXQtyBvdXRlckhUTUwKICAgICAgICAgICDQsdGA0LDRg9C30LXRgCDQt9Cw0L_QuNGB0LDQuyDQsdGLINCw0LzQv9C10YDRgdCw0L3QtNGLINC60LDQuiAmYW1wOyDigJQg0YDQsNCx0L7RgtCw0LXRgiDRgtCw0Log0LbQtSwg0L3QvgogICAgICAgICAgINC30LDRgdC-0YDRj9C10YIg0YHRgNCw0LLQvdC10L3QuNC1INGBINC40YHRhdC-0LTQvdGL0Lwg0LrQvtC00L7QvCAqLwogICAgICAgIHZhciBmb250UmF3ID0gKHNyYy5tYXRjaCgvPGxpbmsgaHJlZj0iaHR0cHM6XC9cL2ZvbnRzXC5nb29nbGVhcGlzXC5jb21cL2NzczJbXj5dKj4vKSB8fCBbbnVsbF0pWzBdOwogICAgICAgIHZhciBjb21tZW50ID0gKHNyYy5tYXRjaCgvPCEtLVxuXHMrPStbXHNcU10qPy0tPi8pIHx8IFtudWxsXSlbMF07CgogICAgICAgIHZhciBtaXNzaW5nID0gW107CiAgICAgICAgaWYgKCFzY29wZSkgbWlzc2luZy5wdXNoKCfQsdC70L7QuiAuYXZ6LWF1dG8nKTsKICAgICAgICBpZiAoIXN0eWxlKSBtaXNzaW5nLnB1c2goJ9GB0YLQuNC70Lgg0YHRgtGA0LDQvdC40YbRiycpOwogICAgICAgIGlmICghc2NyaXB0KSBtaXNzaW5nLnB1c2goJ9GB0LrRgNC40L_RgiDRgdGC0YDQsNC90LjRhtGLJyk7CiAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ9CyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0L3QtSDQvdCw0LnQtNC10L3QvjogJyArIG1pc3Npbmcuam9pbignLCAnKSk7CgogICAgICAgIHdyaXRlQWxsKHNjb3BlLCBkKTsKICAgICAgICB2YXIgbGQgPSBidWlsZExkKGRvYywgc2NvcGUsIGQpOwogICAgICAgIGlmICghbGQudGV4dCkgdGhyb3cgbmV3IEVycm9yKGxkLmVycik7CgogICAgICAgIC8qINCf0L7RgNGP0LTQvtC6INGH0LDRgdGC0LXQuSDigJQg0LrQsNC6INCyINGB0LDQvNC-0Lwg0LHQu9C-0LrQtTog0YHQvdCw0YfQsNC70LAg0YHRgtGA0L7QutC4INGI0LDQv9C60LgsCiAgICAgICAgICAg0L_QvtGC0L7QvCDRgdGC0LjQu9C4LCDQv9C-0YLQvtC8INGA0LDQt9C80LXRgtC60LAuINCh0LLQtdGA0LXQvdC-INGBINGA0LXQsNC70YzQvdGL0Lwg0LrQvtC00L7QvAogICAgICAgICAgINGB0YLRgNCw0L3QuNGG0YssINCwINC90LUg0L_QtdGA0LXQvdC10YHQtdC90L4g0YEg0YHQvtGB0LXQtNC90LXQuSDQv9Cw0L3QtdC70LguICovCiAgICAgICAgLyogdjI6INCyINC60L7QtNC1INGB0YLRgNCw0L3QuNGG0Ysg0YjRgNC40YTRgtGLINCy0YjQuNGC0Ysg4oCUINGB0YLRgNC-0LogR29vZ2xlIEZvbnRzINC90LXRgiDQuCDQvdC1INC00L7QsdCw0LLQu9GP0LXQvCAqLwogICAgICAgIHZhciB0ZXh0ID0gKGNvbW1lbnQgPyBbY29tbWVudCwgJyddIDogW10pLmNvbmNhdChmb250UmF3ID8gWwogICAgICAgICAgJzxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSI-JywKICAgICAgICAgICc8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20iIGNyb3Nzb3JpZ2luPicsCiAgICAgICAgICBBVlpfRk9OVF9MSU5LLAogICAgICAgICAgJyddIDogW10pLmNvbmNhdChbCiAgICAgICAgICBzdHlsZS5vdXRlckhUTUwsCiAgICAgICAgICAnJywKICAgICAgICAgIHNjb3BlLm91dGVySFRNTCwKICAgICAgICAgICcnLAogICAgICAgICAgJzxzY3JpcHQ-JywKICAgICAgICAgIHNjcmlwdC50ZXh0Q29udGVudC50cmltKCksCiAgICAgICAgICAnPCcgKyAnL3NjcmlwdD4nLAogICAgICAgICAgJycsCiAgICAgICAgICAnPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4nLAogICAgICAgICAgbGQudGV4dCwKICAgICAgICAgICc8JyArICcvc2NyaXB0PicKICAgICAgICBdKS5qb2luKCdcbicpOwoKICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCB3YXJuOiBsZC53YXJuIHx8IFtdIH07CiAgICAgIH0pOwogICAgfQoKICAgIC8qIHdhcm4g0L_RgNC40LrQu9C10LjQstCw0LXRgtGB0Y8g0JLQniDQktCh0JXQpSDQstC10YLQutCw0YU6INC10YHQu9C4INC60L7Qv9C40YDQvtCy0LDQvdC40LUg0L3QtSDRg9C00LDQu9C-0YHRjCwKICAgICAgINC_0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y8g0LLRgdGRINGA0LDQstC90L4g0LTQvtC70LbQvdGLINC00L7QudGC0LguINCY0L3QsNGH0LUg0L_QsNC90LXQu9GMINC80L7Qu9GH0LAg0YLQtdGA0Y_QtdGCCiAgICAgICDRgNC-0LLQvdC-INGC0L4sINGA0LDQtNC4INGH0LXQs9C-INC_0YDQtdC00YPQv9GA0LXQttC00LDQtdGCLiAqLwogICAgZnVuY3Rpb24gY29weSh0ZXh0LCBub3RlLCB3YXJuKSB7CiAgICAgIC8qINCf0L7RgdC70LXQtNC90Y_RjyDRh9C10YDRgtCwOiDQvdC10LLQuNC00LjQvNGL0LUgwqvQvNGP0LPQutC40LUg0L_QtdGA0LXQvdC-0YHRi8K7INC90LUg0LTQvtC70LbQvdGLINC_0L7Qv9Cw0YHRgtGMCiAgICAgICAgINCyINC60L7QtCDRgdGC0YDQsNC90LjRhtGLINC00LDQttC1INC40Lcg0YLQtdGFINC60YPRgdC60L7Qsiwg0LrQvtGC0L7RgNGL0LUg0L_QsNC90LXQu9GMINC60L7Qv9C40YDRg9C10YIKICAgICAgICAg0LTQvtGB0LvQvtCy0L3QviDigJQg0LjQtyDRgdGC0LjQu9C10LksINGB0LrRgNC40L_RgtCwINC4INGA0LDQt9C80LXRgtC60Lgg0LLQvdC1INC_0L7Qu9C10LkuINCi0YPQtNCwINC40YUKICAgICAgICAg0LzQvtCzINC30LDQvdC10YHRgtC4INGA0LXQtNCw0LrRgtC-0YAgd2ZvbGlvLCDQvNC40L3Rg9GPINC_0L7Qu9GPINC_0LDQvdC10LvQuC4gKi8KICAgICAgdGV4dCA9IFN0cmluZyh0ZXh0KS5yZXBsYWNlKC9bXHUyMDBCLVx1MjAwRFx1MjA2MFx1RkVGRl0vZywgJycpOwogICAgICB2YXIgdGEgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNhdnphdS1vdXQnKTsKICAgICAgdGEudmFsdWUgPSB0ZXh0OyB0YS5zZWxlY3QoKTsKICAgICAgdmFyIHRhaWwgPSB3YXJuID8gJyDQktC90LjQvNCw0L3QuNC1OiAnICsgd2FybiArICcuJyA6ICcnOwogICAgICB2YXIgbWFudWFsID0gJ9CS0YvQtNC10LvQuNGC0LUg0YLQtdC60YHRgiDQvdC40LbQtSDQuCDRgdC60L7Qv9C40YDRg9C50YLQtSDQstGA0YPRh9C90YPRjiAoQ21kK0MpLic7CiAgICAgIHZhciBvayA9IGZhbHNlOwogICAgICB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgIGlmIChvaykgeyBtc2cobm90ZSArIHRhaWwpOyByZXR1cm47IH0KICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKGZ1bmN0aW9uICgpIHsgbXNnKG5vdGUgKyB0YWlsKTsgfSkKICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7IG1zZyhtYW51YWwgKyB0YWlsKTsgfSk7CiAgICAgIH0gZWxzZSB7IG1zZyhtYW51YWwgKyB0YWlsKTsgfQogICAgfQoKICAgIHJvb3QucXVlcnlTZWxlY3RvcignI2F2emF1LWJ1aWxkJykub25jbGljayA9IGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGQgPSBjb2xsZWN0KCk7CiAgICAgIG1zZygn0KfQuNGC0LDRjiDQuNGB0YXQvtC00L3Ri9C5INC60L7QtCDRgdGC0YDQsNC90LjRhtGL4oCmJyk7CiAgICAgIFByb21pc2UuYWxsKGQuY2FyZHMubWFwKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgcmV0dXJuIG1lYXN1cmUoYy5zcmMpLnRoZW4oZnVuY3Rpb24gKG0pIHsKICAgICAgICAgIGlmIChtKSB7IGMudyA9IFN0cmluZyhtLncpOyBjLmggPSBTdHJpbmcobS5oKTsgfQogICAgICAgICAgcmV0dXJuIG07CiAgICAgICAgfSk7CiAgICAgIH0pKS50aGVuKGZ1bmN0aW9uIChzaXplcykgewogICAgICAgIHZhciBsb3N0ID0gc2l6ZXMubWFwKGZ1bmN0aW9uIChtLCBpKSB7IHJldHVybiBtID8gbnVsbCA6IChpICsgMSk7IH0pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICByZXR1cm4gYXNzZW1ibGUoZCkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAvKiDRgdCy0LXRgNGP0LXQvDog0LLRgdGRINC70Lgg0LLQstC10LTRkdC90L3QvtC1INC00LXQudGB0YLQstC40YLQtdC70YzQvdC-INC_0L7Qv9Cw0LvQviDQsiDQutC-0LQgKi8KICAgICAgICB2YXIgZG9jMiA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcocmVzLnRleHQsICd0ZXh0L2h0bWwnKTsKICAgICAgICB2YXIgYWdhaW4gPSByZWFkQ2ZnKGRvYzIucXVlcnlTZWxlY3RvcignLmF2ei1hdXRvJykpOwogICAgICAgIHJlYWRMZChkb2MyLCBhZ2Fpbik7CiAgICAgICAgdmFyIG5vdExhbmRlZCA9IGFnYWluID8gbGFuZGVkKGQsIGFnYWluLCAvXmNhcmRzXC5cZCtcLih3fGgpJC8pIDogWyfRgdGC0YDQsNC90LjRhtCwINC90LUg0YDQsNC30L7QsdGA0LDQu9Cw0YHRjCddOwogICAgICAgIHZhciBub3RlID0gJ9Ch0LrQvtC_0LjRgNC-0LLQsNC9INC60L7QtCDRgdGC0YDQsNC90LjRhtGLINGG0LXQu9C40LrQvtC8ICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4gJyArCiAgICAgICAgICAgICfQkiDQutC-0L3RgdGC0YDRg9C60YLQvtGA0LUg0LLRi9C00LXQu9C40YLQtSDQstC10YHRjCBIVE1MLdCx0LvQvtC6INGB0YLRgNCw0L3QuNGG0Ysg0Lgg0LLRgdGC0LDQstGM0YLQtSDQv9C-0LLQtdGA0YUuJzsKICAgICAgICAgIHZhciB3ID0gcmVzLndhcm4uc2xpY2UoKTsKICAgICAgICAgIGlmIChsb3N0Lmxlbmd0aCkgdy5wdXNoKCfQvdC1INC-0YLQutGA0YvQu9C40YHRjCDQutCw0LTRgNGLOiAnICsgbG9zdC5qb2luKCcsICcpKTsKICAgICAgICAgIGlmIChub3RMYW5kZWQubGVuZ3RoKSB3LnB1c2goJ9Cd0JUg0JfQkNCf0JjQodCQ0JvQntCh0Kwg0LIg0LrQvtC0OiAnICsgbm90TGFuZGVkLnNsaWNlKDAsIDYpLmpvaW4oJywgJykgKwogICAgICAgICAgICAobm90TGFuZGVkLmxlbmd0aCA-IDYgPyAnINC4INC10YnRkSAnICsgKG5vdExhbmRlZC5sZW5ndGggLSA2KSA6ICcnKSk7CiAgICAgICAgICBjb3B5KHJlcy50ZXh0LCBub3RlLCB3LmpvaW4oJzsgJykpOwogICAgICAgIH0pOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgeyBtc2coJ9Cd0LUg0YHQvtCx0YDQsNC90L46ICcgKyBlLm1lc3NhZ2UpOyB9KTsKICAgIH07CgogICAgcm9vdC5xdWVyeVNlbGVjdG9yKCcjYXZ6YXUtdGVzdCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIG1zZygn0J_RgNC-0LLQtdGA0Y_RjuKApicpOwogICAgICB2YXIgc25hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2ZnKSk7CiAgICAgIGFzc2VtYmxlKHNuYXApLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlcy50ZXh0LCAndGV4dC9odG1sJyk7CiAgICAgICAgdmFyIGFnYWluID0gcmVhZENmZyhkb2MucXVlcnlTZWxlY3RvcignLmF2ei1hdXRvJykpOwogICAgICAgIHJlYWRMZChkb2MsIGFnYWluKTsKICAgICAgICB2YXIgYSA9IEpTT04uc3RyaW5naWZ5KHNuYXApLCBiID0gSlNPTi5zdHJpbmdpZnkoYWdhaW4pOwogICAgICAgIGlmIChhID09PSBiKSBtc2coJ9Ch0YXQvtC00LjRgtGB0Y86INGB0LHQvtGA0LrQsCDQsdC10Lcg0L_RgNCw0LLQvtC6INC00LDRkdGCINGC0LUg0LbQtSDQt9C90LDRh9C10L3QuNGPICgnICsgcmVzLnRleHQubGVuZ3RoICsgJyDRgdC40LzQstC-0LvQvtCyKS4nKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIG1zZygn0KDQkNCh0KXQntCW0JTQldCd0JjQlSDigJQg0YHQvNC-0YLRgNC40YLQtSDQutC-0L3RgdC-0LvRjC4nKTsKICAgICAgICAgIGNvbnNvbGUud2FybignQVZaOiDQsdGL0LvQvicsIEpTT04ucGFyc2UoYSkpOwogICAgICAgICAgY29uc29sZS53YXJuKCdBVlo6INGB0YLQsNC70L4nLCBKU09OLnBhcnNlKGIpKTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlKSB7IG1zZygn0J_RgNC-0LLQtdGA0LrQsCDQvdC1INC_0YDQvtGI0LvQsDogJyArIGUubWVzc2FnZSk7IH0pOwogICAgfTsKICB9CgogIHBhZ2VTb3VyY2UoKS50aGVuKGZ1bmN0aW9uIChzcmMpIHsKICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHNyYywgJ3RleHQvaHRtbCcpOwogICAgdmFyIHNjb3BlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJy5hdnotYXV0bycpOwogICAgaWYgKCFzY29wZSkgdGhyb3cgbmV3IEVycm9yKCfQsiDQutC-0LTQtSDRgdGC0YDQsNC90LjRhtGLINC90LXRgiDQsdC70L7QutCwIC5hdnotYXV0bycpOwogICAgY2ZnID0gcmVhZENmZyhzY29wZSk7CiAgICByZWFkTGQoZG9jLCBjZmcpOwogICAgc3RhcnQoKTsKICB9KS5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgcm9vdC5pbm5lckhUTUwgPSAnPHN0eWxlPicgKyBjc3MgKyAnPC9zdHlsZT48ZGl2IGlkPSJhdnphdS13aW4iPicgKwogICAgICAnPGRpdiBpZD0iYXZ6YXUtaGVhZCI-PGgyPtCf0LDQvdC10LvRjCDQsNCy0YLQvtC80L7QsdC40LvRjNC90L7QuSDRgdGK0ZHQvNC60Lg8L2gyPjwvZGl2PicgKwogICAgICAnPGRpdiBpZD0iYXZ6YXUtYm9keSI-PHAgY2xhc3M9ImF2emF1LWhpbnQiPtCd0LUg0YPQtNCw0LvQvtGB0Ywg0L_RgNC-0YfQuNGC0LDRgtGMINC60L7QtCDRgdGC0YDQsNC90LjRhtGLOiAnICsKICAgICAgZXNjKGUubWVzc2FnZSkgKyAnPC9wPjwvZGl2PjwvZGl2Pic7CiAgfSk7CgogIHJldHVybiAn0J_QsNC90LXQu9GMINCw0LLRgtC-0LzQvtCx0LjQu9GM0L3QvtC5INGB0YrRkdC80LrQuCDQvtGC0LrRgNGL0YLQsC4nOwp9KSgpOwoKfX0KXTsKCiAgdmFyIHBhdGggPSBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywgJycpIHx8ICcvJzsKCiAgZnVuY3Rpb24gZml0cyh0b29sKSB7CiAgICByZXR1cm4gdG9vbC5wYWdlcy5zb21lKGZ1bmN0aW9uIChwKSB7IHJldHVybiBwID09PSBwYXRoOyB9KTsKICB9CgogIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2ei1tZW51Jyk7CiAgICBpZiAoZWwpIGVsLnJlbW92ZSgpOwogICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5KTsKICB9CgogIGZ1bmN0aW9uIG9uS2V5KGUpIHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2xvc2UoKTsgfQoKICBmdW5jdGlvbiBydW4odG9vbCkgewogICAgY2xvc2UoKTsKICAgIHRyeSB7CiAgICAgIHRvb2wucnVuKCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FWWjog0LjQvdGB0YLRgNGD0LzQtdC90YIgwqsnICsgdG9vbC50aXRsZSArICfCuyDRg9C_0LDQuyDigJQnLCBlKTsKICAgICAgYWxlcnQoJ9CY0L3RgdGC0YDRg9C80LXQvdGCINC90LUg0LfQsNC_0YPRgdGC0LjQu9GB0Y86ICcgKyBlLm1lc3NhZ2UgKyAnXG7Qn9C-0LTRgNC-0LHQvdC-0YHRgtC4INCyINC60L7QvdGB0L7Qu9C4LicpOwogICAgfQogIH0KCiAgdmFyIENTUyA9IFsKICAgICcjYXZ6LW1lbnV7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjIxNDc0ODM2NDc7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjsnLAogICAgJ2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzoyMHB4O2JhY2tncm91bmQ6cmdiYSgxNiwxNiwxOCwuNik7JywKICAgICctd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDZweCk7YmFja2Ryb3AtZmlsdGVyOmJsdXIoNnB4KTsnLAogICAgJ2ZvbnQ6MTRweC8xLjQ1IC1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9JywKICAgICcjYXZ6LW1lbnUgKntib3gtc2l6aW5nOmJvcmRlci1ib3h9JywKICAgICcjYXZ6LWJveHt3aWR0aDptaW4oNTIwcHgsMTAwJSk7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjsnLAogICAgJ2JhY2tncm91bmQ6IzFkMWQxZjtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MThweDtvdmVyZmxvdzpoaWRkZW47JywKICAgICdib3gtc2hhZG93OjAgMzBweCA4MHB4IHJnYmEoMCwwLDAsLjU1KX0nLAogICAgJyNhdnotdG9we2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDoxMnB4O3BhZGRpbmc6MThweCAyMHB4IDE0cHh9JywKICAgICcjYXZ6LXRvcCAudHtmbGV4OjE7bWluLXdpZHRoOjB9JywKICAgICcjYXZ6LXRvcCAua3tmb250LXNpemU6MTBweDtsZXR0ZXItc3BhY2luZzouMjhlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7b3BhY2l0eTouNX0nLAogICAgJyNhdnotdG9wIC5we2ZvbnQtc2l6ZToxMnB4O29wYWNpdHk6LjQyO21hcmdpbi10b3A6M3B4O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0nLAogICAgJyNhdnoteHtmbGV4Om5vbmU7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjsnLAogICAgJ2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDkpO2NvbG9yOiNmZmY7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjMwcHg7cGFkZGluZzowfScsCiAgICAnI2F2ei14OmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTgpfScsCiAgICAnI2F2ei1zY3JvbGx7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjAgMjBweCAyMHB4Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofScsCiAgICAnLmF2ei1sYmx7Zm9udC1zaXplOjEwcHg7bGV0dGVyLXNwYWNpbmc6LjJlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7b3BhY2l0eTouMzI7bWFyZ2luOjZweCAwIDEwcHh9JywKICAgICcuYXZ6LWdyaWR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCg5NnB4LDFmcikpO2dhcDo4cHh9JywKICAgICcuYXZ6LXR7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjEvMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uOycsCiAgICAnYWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjhweCA2cHg7dGV4dC1hbGlnbjpjZW50ZXI7JywKICAgICdib3JkZXItcmFkaXVzOjEzcHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjsnLAogICAgJ2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpOycsCiAgICAnY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNTUpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNnMgZWFzZSxiYWNrZ3JvdW5kIC4xNnMgZWFzZSxjb2xvciAuMTZzIGVhc2V9JywKICAgICcuYXZ6LXQ6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMSk7Y29sb3I6I2ZmZjt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KX0nLAogICAgJy5hdnotdC5vbntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzFkMWQxZjtib3JkZXItY29sb3I6I2ZmZjtmb250LXdlaWdodDo2MDB9JywKICAgICcuYXZ6LXQub246aG92ZXJ7YmFja2dyb3VuZDojZjJmMmY0fScsCiAgICAnLmF2ei1ub25le3BhZGRpbmc6MTBweCAwIDRweDtvcGFjaXR5Oi41NTtmb250LXNpemU6MTNweH0nLAogICAgJy5hdnotaGludHttYXJnaW4tdG9wOjEycHg7Zm9udC1zaXplOjExcHg7b3BhY2l0eTouMzU7bGluZS1oZWlnaHQ6MS41fScsCiAgICAvKiDQsdC10LcgYXNwZWN0LXJhdGlvICjRgdGC0LDRgNGL0LUg0LHRgNCw0YPQt9C10YDRiykg0L_Qu9C40YLQutCwINC90LUg0YHRhdC70L7Qv9C90LXRgtGB0Y8gKi8KICAgICdAc3VwcG9ydHMgbm90IChhc3BlY3QtcmF0aW86MS8xKXsuYXZ6LXR7aGVpZ2h0Ojk2cHh9fScsCiAgICAnQG1lZGlhIChtYXgtd2lkdGg6NDIwcHgpeycsCiAgICAnI2F2ei1tZW51e3BhZGRpbmc6MDthbGlnbi1pdGVtczpmbGV4LWVuZH0nLAogICAgJyNhdnotYm94e3dpZHRoOjEwMCU7bWF4LWhlaWdodDo4NnZoO2JvcmRlci1yYWRpdXM6MThweCAxOHB4IDAgMH0nLAogICAgJyNhdnotdG9we3BhZGRpbmc6MTZweCAxNnB4IDEwcHh9JywKICAgICcjYXZ6LXNjcm9sbHtwYWRkaW5nOjAgMTZweCAxOHB4fScsCiAgICAnLmF2ei1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMywxZnIpO2dhcDo3cHh9JywKICAgIC8qINC90LAg0YPQt9C60L7QvCDRjdC60YDQsNC90LUg0LrQstCw0LTRgNCw0YIg0YHQu9C40YjQutC-0Lwg0LLRi9GB0L7QutC40Lk6INC-0LTQuNC90L3QsNC00YbQsNGC0Ywg0L_Qu9C40YLQvtC6CiAgICAgICDRg9GF0L7QtNC40LvQuCDQt9CwINC60YDQsNC5INC4INC_0L7QtNGB0LrQsNC30LrQsCDQstC90LjQt9GDINC90LUg0L_QvtC80LXRidCw0LvQsNGB0YwgKi8KICAgICcuYXZ6LXR7YXNwZWN0LXJhdGlvOmF1dG87aGVpZ2h0OjcwcHg7Zm9udC1zaXplOjExLjVweDtib3JkZXItcmFkaXVzOjEycHh9JywKICAgICd9JwogIF0uam9pbignJyk7CgogIGZ1bmN0aW9uIHRpbGUodG9vbCwgYWN0aXZlKSB7CiAgICB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgYi50eXBlID0gJ2J1dHRvbic7CiAgICBiLmNsYXNzTmFtZSA9ICdhdnotdCcgKyAoYWN0aXZlID8gJyBvbicgOiAnJyk7CiAgICBiLnRpdGxlID0gYWN0aXZlCiAgICAgID8gdG9vbC50aXRsZSArICcg4oCUICcgKyB0b29sLmhpbnQKICAgICAgOiB0b29sLnRpdGxlICsgJyDigJQg0L7RgtC60YDRi9GC0YwgJyArIHRvb2wucGFnZXNbMF07CgogICAgYi50ZXh0Q29udGVudCA9IHRvb2wuc2hvcnQgfHwgdG9vbC50aXRsZTsKCiAgICBpZiAoYWN0aXZlKSBiLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJ1bih0b29sKTsgfTsKICAgIGVsc2UgYi5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBsb2NhdGlvbi5ocmVmID0gdG9vbC5wYWdlc1swXTsgfTsKICAgIHJldHVybiBiOwogIH0KCiAgZnVuY3Rpb24gb3BlbigpIHsKICAgIGNsb3NlKCk7CgogICAgdmFyIHdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHdyYXAuaWQgPSAnYXZ6LW1lbnUnOwoKICAgIHZhciBzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAgICBzdC50ZXh0Q29udGVudCA9IENTUzsKICAgIHdyYXAuYXBwZW5kQ2hpbGQoc3QpOwoKICAgIHZhciBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGJveC5pZCA9ICdhdnotYm94JzsKCiAgICB2YXIgdG9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB0b3AuaWQgPSAnYXZ6LXRvcCc7CiAgICB2YXIgdHRsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB0dGwuY2xhc3NOYW1lID0gJ3QnOwogICAgdHRsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJrIj7QmNC90YHRgtGA0YPQvNC10L3RgtGLIGF2YW56YXRvPC9kaXY-JyArCiAgICAgICc8ZGl2IGNsYXNzPSJwIj48L2Rpdj4nOwogICAgdHRsLnF1ZXJ5U2VsZWN0b3IoJy5wJykudGV4dENvbnRlbnQgPSBwYXRoOwogICAgdmFyIHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgIHgudHlwZSA9ICdidXR0b24nOwogICAgeC5pZCA9ICdhdnoteCc7CiAgICB4LnRleHRDb250ZW50ID0gJ-KclSc7CiAgICB4LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICfQl9Cw0LrRgNGL0YLRjCcpOwogICAgeC5vbmNsaWNrID0gY2xvc2U7CiAgICB0b3AuYXBwZW5kQ2hpbGQodHRsKTsKICAgIHRvcC5hcHBlbmRDaGlsZCh4KTsKICAgIGJveC5hcHBlbmRDaGlsZCh0b3ApOwoKICAgIHZhciBzY3JvbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHNjcm9sbC5pZCA9ICdhdnotc2Nyb2xsJzsKCiAgICB2YXIgaGVyZSA9IFRPT0xTLmZpbHRlcihmaXRzKTsKICAgIHZhciByZXN0ID0gVE9PTFMuZmlsdGVyKGZ1bmN0aW9uICh0KSB7IHJldHVybiAhZml0cyh0KTsgfSk7CgogICAgaWYgKGhlcmUubGVuZ3RoKSB7CiAgICAgIHZhciBsMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBsMS5jbGFzc05hbWUgPSAnYXZ6LWxibCc7CiAgICAgIGwxLnRleHRDb250ZW50ID0gJ9CU0LvRjyDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtGLJzsKICAgICAgc2Nyb2xsLmFwcGVuZENoaWxkKGwxKTsKICAgICAgdmFyIGcxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGcxLmNsYXNzTmFtZSA9ICdhdnotZ3JpZCc7CiAgICAgIGhlcmUuZm9yRWFjaChmdW5jdGlvbiAodCkgeyBnMS5hcHBlbmRDaGlsZCh0aWxlKHQsIHRydWUpKTsgfSk7CiAgICAgIHNjcm9sbC5hcHBlbmRDaGlsZChnMSk7CiAgICB9IGVsc2UgewogICAgICB2YXIgbm9uZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBub25lLmNsYXNzTmFtZSA9ICdhdnotbm9uZSc7CiAgICAgIG5vbmUudGV4dENvbnRlbnQgPSAn0JTQu9GPINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0Ysg0LjQvdGB0YLRgNGD0LzQtdC90YLQvtCyINC_0L7QutCwINC90LXRgi4nOwogICAgICBzY3JvbGwuYXBwZW5kQ2hpbGQobm9uZSk7CiAgICB9CgogICAgaWYgKHJlc3QubGVuZ3RoKSB7CiAgICAgIHZhciBsMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBsMi5jbGFzc05hbWUgPSAnYXZ6LWxibCc7CiAgICAgIGwyLnN0eWxlLm1hcmdpblRvcCA9ICcxOHB4JzsKICAgICAgbDIudGV4dENvbnRlbnQgPSAn0JTRgNGD0LPQuNC1INGB0YLRgNCw0L3QuNGG0YsnOwogICAgICBzY3JvbGwuYXBwZW5kQ2hpbGQobDIpOwogICAgICB2YXIgZzIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgZzIuY2xhc3NOYW1lID0gJ2F2ei1ncmlkJzsKICAgICAgcmVzdC5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7IGcyLmFwcGVuZENoaWxkKHRpbGUodCwgZmFsc2UpKTsgfSk7CiAgICAgIHNjcm9sbC5hcHBlbmRDaGlsZChnMik7CiAgICB9CgogICAgdmFyIGhpbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGhpbnQuY2xhc3NOYW1lID0gJ2F2ei1oaW50JzsKICAgIGhpbnQudGV4dENvbnRlbnQgPSAn0JHQtdC70YvQtSDQv9C70LjRgtC60Lgg0YDQsNCx0L7RgtCw0Y7RgiDQt9C00LXRgdGMLiDQodC10YDQsNGPIOKAlCDQv9C10YDQtdC50LTRkdGCINC90LAg0YHQstC-0Y4g0YHRgtGA0LDQvdC40YbRgy4nOwogICAgc2Nyb2xsLmFwcGVuZENoaWxkKGhpbnQpOwoKICAgIGJveC5hcHBlbmRDaGlsZChzY3JvbGwpOwogICAgd3JhcC5hcHBlbmRDaGlsZChib3gpOwogICAgd3JhcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7IGlmIChlLnRhcmdldCA9PT0gd3JhcCkgY2xvc2UoKTsgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXkpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh3cmFwKTsKICB9CgogIG9wZW4oKTsKfSkoKTsKAVZ-CODE-END

На сайте используются файлы cookie для работы сайта и анализа посещаемости. Политика конфиденциальности