# Name: upm_image v0.6.2 # Type: Admin/Client side plugin # More powerful image display. # Author: Mary Fredborg # URL: http://utterplush.com/txp-plugins/upm-image # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjk6InVwbV9pbWFnZSI7czo2OiJhdXRob3IiO3M6MTM6Ik1h cnkgRnJlZGJvcmciO3M6MTA6ImF1dGhvcl91cmkiO3M6NDM6Imh0dHA6Ly91dHRlcnBsdXNo LmNvbS90eHAtcGx1Z2lucy91cG0taW1hZ2UiO3M6NzoidmVyc2lvbiI7czo1OiIwLjYuMiI7 czoxMToiZGVzY3JpcHRpb24iO3M6Mjg6Ik1vcmUgcG93ZXJmdWwgaW1hZ2UgZGlzcGxheS4i O3M6NDoiY29kZSI7czoyNTI0MzoidXBtX2ltYWdlX2luc3RhbGwoKTsKCglpZiAodHhwaW50 ZXJmYWNlID09ICdhZG1pbicpCgl7CgkJYWRkX3ByaXZzKCd1cG1faW1hZ2VfcHJlZnMnLCAn MSwyJyk7CgkJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJ3VwbV9pbWFnZV9wcmVmcycs ICd1cG1faW1hZ2UnKTsKCQlyZWdpc3Rlcl9jYWxsYmFjaygndXBtX2ltYWdlX3ByZWZzJywg J3VwbV9pbWFnZV9wcmVmcycpOwoJfQoKCWVsc2UKCXsKCQlpZiAoZ3BzKCdqcycpID09ICd1 cG1faW1hZ2UnKQoJCXsKCQkJd2hpbGUgKEBvYl9lbmRfY2xlYW4oKSk7CgoJCQl1cG1faW1h Z2VfanMoKTsKCQl9CgoJCWVsc2UKCQl7CgkJCXVwbV9pbWFnZV9jaGVja19sb2FkKCk7CgkJ fQoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9hcnRpY2xlX2ltYWdlKCRhdHRzID0g YXJyYXkoKSwgJHRoaW5nID0gTlVMTCkKCXsKCQlnbG9iYWwgJHByZWZzLCAkdGhpc2FydGlj bGU7CgoJCSRhdHRzID0gbEF0dHMoYXJyYXkoCgkJCSdicmVhaycJCQkJPT4gJycsCgkJCSdi cmVha19jbGFzcycgPT4gJycsCgkJCSdjbGFzcycJCQkJPT4gJycsCgkJCSdmb3JtJwkJCQk9 PiAnJywKCQkJJ2lkJwkJCQkJPT4gJycsCgkJCSdsaW1pdCcJCQkJPT4gJycsCgkJCSdvZmZz ZXQnCQkJPT4gMCwKCQkJJ3Nob3dfd2lkdGgnCT0+ICd5ZXMnLAoJCQknc2hvd19oZWlnaHQn ID0+ICd5ZXMnLAoJCQknc2hvd19hbHQnCQk9PiAneWVzJywKCQkJJ3Nob3dfdGl0bGUnCT0+ ICd5ZXMnLAoJCQkndHlwZScJCQkJPT4gJ2ltYWdlJywKCQkJJ3VybCcJCQkJCT0+ICcnLAoJ CQknd3JhcGZvcm0nCQk9PiAnJywKCQkJJ3dyYXB0YWcnCQkJPT4gJycsCgkJCSd4aHRtbCcJ CQkJPT4gJ3llcycKCQkpLCAkYXR0cyk7CgoJCWV4dHJhY3QoJGF0dHMpOwoKCQkkYXJ0aWNs ZV9pbWFnZSA9ICR0aGlzYXJ0aWNsZVsnYXJ0aWNsZV9pbWFnZSddOwoKCQlpZiAoZW1wdHko JGFydGljbGVfaW1hZ2UpKQoJCXsKCQkJcmV0dXJuOwoJCX0KCgkJJGltYWdlX3VybCA9IHJh d3VybGVuY29kZSgkYXJ0aWNsZV9pbWFnZSk7CgoJCWlmIChmaWxlX2V4aXN0cygkaW1hZ2Vf dXJsKSkKCQl7CgkJCSR3ID0gJyc7CgkJCSRoID0gJyc7CgoJCQlpZiAoJHNob3dfd2lkdGgg b3IgJHNob3dfaGVpZ2h0KQoJCQl7CgkJCQkkZm9wZW4gPSBnZXRfY2ZnX3ZhcignYWxsb3df dXJsX2ZvcGVuJykgPyB0cnVlIDogZmFsc2U7CgoJCQkJaWYgKCRmb3BlbikKCQkJCXsKCQkJ CQlsaXN0KCR3LCAkaCkgPSBnZXRpbWFnZXNpemUoJGltYWdlX3VybCk7CgkJCQl9CgkJCX0K CgkJCSRvdXQgPSAnPGltZyBzcmM9IicuJGltYWdlX3VybC4nIicuCgkJCQkoICgkaWQgYW5k ICEkd3JhcHRhZykgPyAnIGlkPSInLiRpZC4nIicgOiAnJykuCgkJCQkoICgkY2xhc3MgYW5k ICEkd3JhcHRhZykgPyAnIGNsYXNzPSInLiRjbGFzcy4nIicgOiAnJykuCgkJCQkoICgkdyBh bmQgKCRzaG93X3dpZHRoID09ICd5ZXMnKSkgPyAnIHdpZHRoPSInLiR3LiciJyA6ICcnICku CgkJCQkoICgkaCBhbmQgKCRzaG93X2hlaWdodCA9PSAneWVzJykpID8gJyBoZWlnaHQ9Iicu JGguJyInIDogJycgKS4KCQkJCScgYWx0PSIiJy4KCQkJCSgkeGh0bWwgPT0gJ3llcycgPyAn IC8+JyA6ICc+Jyk7CgoJCQlpZiAoJHVybCkKCQkJewoJCQkJJG91dCA9IGlzX251bWVyaWMo JHVybCkgPyBocmVmKCRvdXQsIHBlcm1saW5rdXJsX2lkKCR1cmwpKSA6CWhyZWYoJG91dCwg JHVybCk7CgkJCX0KCgkJCXJldHVybiAoJHdyYXB0YWcpID8gZG9UYWcoJG91dCwgJHdyYXB0 YWcsICRjbGFzcywgJycsICRpZCkgOiAkb3V0OwoJCX0KCgkJaWYgKHN0cnN0cigkYXJ0aWNs ZV9pbWFnZSwgJywnKSkKCQl7CgkJCWlmICgkbGltaXQgPT0gMSkKCQkJewoJCQkJJGFydGlj bGVfaW1hZ2UgPSBqb2luKCcnLCBhcnJheV9zbGljZShleHBsb2RlKCcsJywgJGFydGljbGVf aW1hZ2UpLCAkb2Zmc2V0LCAxKSk7CgkJCX0KCgkJCWVsc2UKCQkJewoJCQkJcmV0dXJuIHVw bV9hcnRpY2xlX2ltYWdlX2xpc3QoJGFydGljbGVfaW1hZ2UsICRhdHRzLCAkdGhpbmcpOwoJ CQl9CgkJfQoKCQlpZiAoaXNfbnVtZXJpYygkYXJ0aWNsZV9pbWFnZSkpCgkJewoJCQkkaW1h Z2VfaWQgPSBkb1NsYXNoKCRhcnRpY2xlX2ltYWdlKTsKCgkJCSRycyA9IHNhZmVfcm93KCcq JywgJ3R4cF9pbWFnZScsICJpZCA9ICckaW1hZ2VfaWQnIGxpbWl0IDAsIDEiKTsKCgkJCWlm ICghJHJzKQoJCQl7CgkJCQlyZXR1cm4gKCRwcmVmc1sncHJvZHVjdGlvbl9zdGF0dXMnXSAh PSAnbGl2ZScpID8KCQkJCQl1cG1faW1hZ2VfZ1R4dCgnbm90X2ZvdW5kJywgYXJyYXkoJ3tp bWFnZX0nID0+ICRpbWFnZV9pZCkpIDoKCQkJCQknJzsKCQkJfQoJCX0KCgkJZWxzZQoJCXsK CQkJJGltYWdlX25hbWUgPSBkb1NsYXNoKCRhcnRpY2xlX2ltYWdlKTsKCgkJCSRycyA9IHNh ZmVfcm93KCcqJywgJ3R4cF9pbWFnZScsICJuYW1lID0gJyRpbWFnZV9uYW1lJyBsaW1pdCAw LCAxIik7CgoJCQlpZiAoISRycykKCQkJewoJCQkJcmV0dXJuICgkcHJlZnNbJ3Byb2R1Y3Rp b25fc3RhdHVzJ10gIT0gJ2xpdmUnKSA/CgkJCQkJdXBtX2ltYWdlX2dUeHQoJ25vdF9mb3Vu ZCcsIGFycmF5KCd7aW1hZ2V9JyA9PiAkaW1hZ2VfbmFtZSkpIDoKCQkJCQknJzsKCQkJfQoJ CX0KCgkJaWYgKCRmb3JtIG9yICR0aGluZykKCQl7CgkJCXJldHVybiB1cG1faW1nX2N1c3Rv bSgkcnMsICRhdHRzLCAkZm9ybSwgJHRoaW5nKTsKCQl9CgoJCWVsc2UKCQl7CgkJCXJldHVy biB1cG1faW1nX2RlZmF1bHQoJHJzLCAkYXR0cyk7CgkJfQoJfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQ YXJ0cyBmcm9tIHplbV9hcnRpY2xlX2ltYWdlCi8vIGh0dHA6Ly90aHJlc2hvbGRzdGF0ZS5j b20vCi8vIGh0dHA6Ly92aWdpbGFudC50di8KLy8gVGhhbmtzIEFsZXguCgoJZnVuY3Rpb24g dXBtX2FydGljbGVfaW1hZ2VfbGlzdCgkYXJ0aWNsZV9pbWFnZSwgJGF0dHMsICR0aGluZyA9 IE5VTEwpCgl7CgkJZ2xvYmFsICRwcmVmczsKCgkJZXh0cmFjdCgkYXR0cyk7CgoJCSRvdXQg PSBhcnJheSgpOwoKCQlpZiAoJGxpbWl0KQoJCXsKCQkJJGltYWdlcyA9IGFycmF5X3NsaWNl KGV4cGxvZGUoJywnLCAkYXJ0aWNsZV9pbWFnZSksICRvZmZzZXQsICRsaW1pdCk7CgkJfQoK CQllbHNlCgkJewoJCQkkaW1hZ2VzID0gYXJyYXlfc2xpY2UoZXhwbG9kZSgnLCcsICRhcnRp Y2xlX2ltYWdlKSwgJG9mZnNldCk7CgkJfQoKCQlmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgk aW1hZ2VzKTsgJGkrKykKCQl7CgkJCWlmIChlbXB0eSgkaW1hZ2VzWyRpXSkpCgkJCXsKCQkJ CXVuc2V0KCRpbWFnZXNbJGldKTsKCQkJfQoJCX0KCgkJJGlkc19yZXF1ZXN0ZWQgPSAkaW1h Z2VzOwoKCQkkaW1hZ2VzID0gZG9TbGFzaChqb2luKCcsJywgJGltYWdlcykpOwoKCQkkcnMg PSBzYWZlX3Jvd3MoJyonLCAndHhwX2ltYWdlJywgImlkIGluKCRpbWFnZXMpIG9yZGVyIGJ5 IGZpZWxkKGlkLCAkaW1hZ2VzKSIpOwoKCQlpZiAoJHJzKQoJCXsKCQkJJGlkc19mb3VuZCA9 IGFycmF5KCk7CgoJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykKCQkJewoJCQkJJGlkc19mb3Vu ZFtdID0gJHJvd1snaWQnXTsKCgkJCQlpZiAoJGZvcm0gb3IgJHRoaW5nKQoJCQkJewoJCQkJ CSRvdXRbXSA9IHVwbV9pbWdfY3VzdG9tKCRyb3csICRhdHRzLCAkZm9ybSwgJHRoaW5nKTsK CQkJCX0KCgkJCQllbHNlCgkJCQl7CgkJCQkJJGltZ191cmwgPSBodS4kcHJlZnNbJ2ltZ19k aXInXS4nLyc7CgkJCQkJJGltZyA9ICRyb3dbJ2lkJ10uJHJvd1snZXh0J107CgoJCQkJCWlm IChpbl9hcnJheSgkdHlwZSwgYXJyYXkoJ3BvcHVwJywgJ3RodW1iJywgJ3RodW1ibmFpbCcp KSkKCQkJCQl7CgkJCQkJCSRpbWdfcGF0aCA9ICRwcmVmc1sncGF0aF90b19zaXRlJ10uRFMu JHByZWZzWydpbWdfZGlyJ10uRFM7CgkJCQkJCSR0aHVtYiA9ICRyb3dbJ2lkJ10uJ3QnLiRy b3dbJ2V4dCddOwoKCQkJCQkJJHRodW1iX2V4aXN0cyA9IGZhbHNlOwoKCQkJCQkJaWYgKCRy b3dbJ3RodW1ibmFpbCddIGFuZCBmaWxlX2V4aXN0cygkaW1nX3BhdGguJHRodW1iKSkKCQkJ CQkJewoJCQkJCQkJJHRodW1iX2V4aXN0cyA9IHRydWU7CgoJCQkJCQkJbGlzdCgkdGh1bWJf dywgJHRodW1iX2gpID0gZ2V0aW1hZ2VzaXplKCRpbWdfcGF0aC4kdGh1bWIpOwoJCQkJCQl9 CgkJCQkJfQoKCQkJCQlzd2l0Y2ggKCR0eXBlKQoJCQkJCXsKCQkJCQkJY2FzZSAncG9wdXAn OgoJCQkJCQkJaWYgKCR0aHVtYl9leGlzdHMpCgkJCQkJCQl7CgkJCQkJCQkJJG91dFtdID0g JzxhIGhyZWY9IicuJGltZ191cmwuJGltZy4nIicuCgkJCQkJCQkJCSggKCRyb3dbJ2NhcHRp b24nXSBhbmQgKCRzaG93X3RpdGxlID09ICd5ZXMnKSkgPyAnIHRpdGxlPSInLmh0bWxzcGVj aWFsY2hhcnMoJHJvd1snY2FwdGlvbiddKS4nIicgOiAnJyApLgoJCQkJCQkJCQkoICgkY2xh c3MgYW5kICEkd3JhcHRhZykgPyAnIGNsYXNzPSInLiRjbGFzcy4nIicgOiAnJykuCgkJCQkJ CQkJCScgb25jbGljaz0idXBtX3BvcF9pbWcodGhpcy5ocmVmLCBcJycuJHJvd1sndyddLidc JywgXCcnLiRyb3dbJ2gnXS4nXCcsIFwnJy4kcm93WyduYW1lJ10uJ1wnLCB0aGlzLnRpdGxl KTsgcmV0dXJuIGZhbHNlOyI+Jy4KCQkJCQkJCQkJJzxpbWcgc3JjPSInLiRpbWdfdXJsLiR0 aHVtYi4nIicuCgkJCQkJCQkJCSgkc2hvd193aWR0aCA9PSAneWVzJyA/ICcgd2lkdGg9Iicu JHRodW1iX3cuJyInIDogJycpLgoJCQkJCQkJCQkoJHNob3dfaGVpZ2h0ID09ICd5ZXMnID8g JyBoZWlnaHQ9IicuJHRodW1iX2guJyInIDogJycpLgoJCQkJCQkJCQkoICgkcm93WydhbHQn XSBhbmQgKCRzaG93X2FsdCA9PSAneWVzJykpID8gJyBhbHQ9IicuaHRtbHNwZWNpYWxjaGFy cygkcm93WydhbHQnXSkuJyIgdGl0bGU9IiInIDogJyBhbHQ9IiInICkuCgkJCQkJCQkJCSgk eGh0bWwgPT0gJ3llcycgPyAnIC8+JyA6ICc+JykuCgkJCQkJCQkJCSc8L2E+JzsKCQkJCQkJ CX0KCgkJCQkJCQllbHNlaWYgKCRwcmVmc1sncHJvZHVjdGlvbl9zdGF0dXMnXSAhPSAnbGl2 ZScpCgkJCQkJCQl7CgkJCQkJCQkJJG91dFtdID0gdXBtX2ltYWdlX2dUeHQoJ25vX3RodW1i JywgYXJyYXkoJ3tpbWFnZX0nID0+ICRyb3dbJ2lkJ10pKTsKCQkJCQkJCX0KCQkJCQkJYnJl YWs7CgoJCQkJCQljYXNlICd0aHVtYm5haWwnOgoJCQkJCQljYXNlICd0aHVtYic6CgkJCQkJ CQlpZiAoJHRodW1iX2V4aXN0cykKCQkJCQkJCXsKCQkJCQkJCQkkb3V0W10gPSAnPGltZyBz cmM9IicuJGltZ191cmwuJHRodW1iLiciJy4KCQkJCQkJCQkJKCAoJGNsYXNzIGFuZCAhJHdy YXB0YWcpID8gJyBjbGFzcz0iJy4kY2xhc3MuJyInIDogJycpLgoJCQkJCQkJCQkoJHNob3df d2lkdGggPT0gJ3llcycgPyAnIHdpZHRoPSInLiR0aHVtYl93LiciJyA6ICcnKS4KCQkJCQkJ CQkJKCRzaG93X2hlaWdodCA9PSAneWVzJyA/ICcgaGVpZ2h0PSInLiR0aHVtYl9oLiciJyA6 ICcnKS4KCQkJCQkJCQkJKCAoJHJvd1snYWx0J10gYW5kICgkc2hvd19hbHQgPT0gJ3llcycp KSA/ICcgYWx0PSInLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1snYWx0J10pLiciJyA6ICcgYWx0 PSIiJykuCgkJCQkJCQkJCSggKCRyb3dbJ2NhcHRpb24nXSBhbmQgKCRzaG93X3RpdGxlID09 ICd5ZXMnKSkgPyAnIHRpdGxlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1snY2FwdGlvbidd KS4nIicgOiAnJykuCgkJCQkJCQkJCSgkeGh0bWwgPT0gJ3llcycgPyAnIC8+JyA6ICc+Jyk7 CgkJCQkJCQl9CgoJCQkJCQkJZWxzZWlmICgkcHJlZnNbJ3Byb2R1Y3Rpb25fc3RhdHVzJ10g IT0gJ2xpdmUnKQoJCQkJCQkJewoJCQkJCQkJCSRvdXRbXSA9IHVwbV9pbWFnZV9nVHh0KCdu b190aHVtYicsIGFycmF5KCd7aW1hZ2V9JyA9PiAkcm93WydpZCddKSk7CgkJCQkJCQl9CgkJ CQkJCWJyZWFrOwoKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCSR0ZW1wID0gJzxpbWcgc3JjPSIn LiRpbWdfdXJsLiRpbWcuJyInLgoJCQkJCQkJCSggKCRjbGFzcyBhbmQgISR3cmFwdGFnKSA/ ICcgY2xhc3M9IicuJGNsYXNzLiciJyA6ICcnKS4KCQkJCQkJCQkoJHNob3dfd2lkdGggPT0g J3llcycgPyAnIHdpZHRoPSInLiRyb3dbJ3cnXS4nIicgOiAnJykuCgkJCQkJCQkJKCRzaG93 X2hlaWdodCA9PSAneWVzJyA/ICcgaGVpZ2h0PSInLiRyb3dbJ2gnXS4nIicgOiAnJykuCgkJ CQkJCQkJKCAoJHJvd1snYWx0J10gYW5kICgkc2hvd19hbHQgPT0gJ3llcycpKSA/ICcgYWx0 PSInLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1snYWx0J10pLiciJyA6ICcnICkuCgkJCQkJCQkJ KCAoJHJvd1snY2FwdGlvbiddIGFuZCAoJHNob3dfdGl0bGUgPT0gJ3llcycpKSA/ICcgdGl0 bGU9IicuaHRtbHNwZWNpYWxjaGFycygkcm93WydjYXB0aW9uJ10pLiciJyA6ICcnICkuCgkJ CQkJCQkJKCR4aHRtbCA9PSAneWVzJyA/ICcgLz4nIDogJz4nKTsKCgkJCQkJCQlpZiAoJHVy bCkKCQkJCQkJCXsKCQkJCQkJCQkkdGVtcCA9IGlzX251bWVyaWMoJHVybCkgPwoJCQkJCQkJ CQlocmVmKCR0ZW1wLCBwZXJtbGlua3VybF9pZCgkdXJsKSkgOgoJCQkJCQkJCQlocmVmKCR0 ZW1wLCAkdXJsKTsKCQkJCQkJCX0KCgkJCQkJCQkkb3V0W10gPSAkdGVtcDsKCQkJCQkJYnJl YWs7CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQkkaWRzX3JlcXVlc3RlZCA9IGFycmF5X3VuaXF1 ZSgkaWRzX3JlcXVlc3RlZCk7CgoJCQlpZiAoJHdyYXBmb3JtKQoJCQl7CgkJCQkkdXBtX2lt Z19jdXN0b21bJ2xpc3QnXSA9IGpvaW4oJycsICRvdXQpOwoKCQkJCSR0ZW1wID0gcGFyc2Uo ZmV0Y2hfZm9ybSgkd3JhcGZvcm0pKTsKCQkJfQoKCQkJZWxzZQoJCQl7CgkJCQkkYXR0cyA9 ICgkaWQpID8gJyBpZD0iJy4kaWQuJyInIDogJyc7CgoJCQkJJHRlbXAgPSBkb1dyYXAoJG91 dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtfY2xhc3MsICRhdHRzKTsKCQkJ fQoKCQkJaWYgKCRwcmVmc1sncHJvZHVjdGlvbl9zdGF0dXMnXSAhPSAnbGl2ZScgJiYgKCRp ZHNfcmVxdWVzdGVkICE9ICRpZHNfZm91bmQpKQoJCQl7CgkJCQkkaWRzX21pc3NpbmcgPSBh cnJheV9kaWZmKCRpZHNfcmVxdWVzdGVkLCAkaWRzX2ZvdW5kKTsKCgkJCQlyZXR1cm4gJHRl bXAudXBtX2ltYWdlX2dUeHQoJ25vdF9mb3VuZF9saXN0JywgYXJyYXkoJ3tsaXN0fScgPT4g am9pbignLCAnLCAkaWRzX21pc3NpbmcpKSk7CgkJCX0KCgkJCWVsc2UKCQkJewoJCQkJcmV0 dXJuICR0ZW1wOwoJCQl9CgkJfQoKCQlyZXR1cm4gKCRwcmVmc1sncHJvZHVjdGlvbl9zdGF0 dXMnXSAhPSAnbGl2ZScpID8KCQkJdXBtX2ltYWdlX2dUeHQoJ25vdF9mb3VuZF9saXN0Jywg YXJyYXkoJ3tsaXN0fScgPT4gam9pbignLCAnLCAkaW1hZ2VzKSkpCgkJCTogJyc7Cgl9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi8vIGlmIG9uZSBvciBtb3JlIGFydGljbGUgaW1hZ2VzIGV4aXN0CgoJZnVu Y3Rpb24gdXBtX2lmX2FydGljbGVfaW1hZ2UoJGF0dHMgPSBhcnJheSgpLCAkdGhpbmcgPSBO VUxMKQoJewoJCWdsb2JhbCAkdGhpc2FydGljbGU7CgoJCWFzc2VydF9hcnRpY2xlKCk7CgoJ CSRjb25kaXRpb24gPSAoICFlbXB0eSgkdGhpc2FydGljbGVbJ2FydGljbGVfaW1hZ2UnXSkg KTsKCgkJcmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJGNvbmRpdGlvbikpOwoJfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQovLyBpZiBtb3JlIHRoYW4gb25lIGFydGljbGUgaW1hZ2UgZXhpc3RzCgoJ ZnVuY3Rpb24gdXBtX2lmX2FydGljbGVfaW1hZ2VfbGlzdCgkYXR0cyA9IGFycmF5KCksICR0 aGluZyA9IE5VTEwpCgl7CgkJZ2xvYmFsICR0aGlzYXJ0aWNsZTsKCgkJYXNzZXJ0X2FydGlj bGUoKTsKCgkJJGNvbmRpdGlvbiA9ICggIWVtcHR5KCR0aGlzYXJ0aWNsZVsnYXJ0aWNsZV9p bWFnZSddKSBhbmQgc3Ryc3RyKCR0aGlzYXJ0aWNsZVsnYXJ0aWNsZV9pbWFnZSddLCAnLCcp ICk7CgoJCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRjb25kaXRpb24pKTsKCX0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1hZ2UoJGF0dHMgPSBhcnJheSgpLCAkdGhp bmcgPSBOVUxMKQoJewoJCWdsb2JhbCAkcHJlZnM7CgoJCSRhdHRzID0gbEF0dHMoYXJyYXko CgkJCSdjbGFzcycJCQkJPT4gJycsCgkJCSdmb3JtJwkJCQk9PiAnJywKCQkJJ2lkJwkJCQkJ PT4gJycsCgkJCSdpbWFnZV9pZCcJCT0+ICcnLAoJCQknaW1hZ2VfbmFtZScJPT4gJycsCgkJ CSdpbWFnZV91cmwnCQk9PiAnJywKCQkJJ3Nob3dfd2lkdGgnCT0+ICd5ZXMnLAoJCQknc2hv d19oZWlnaHQnID0+ICd5ZXMnLAoJCQknc2hvd19hbHQnCQk9PiAneWVzJywKCQkJJ3Nob3df dGl0bGUnCT0+ICd5ZXMnLAoJCQkndHlwZScJCQkJPT4gJ2ltYWdlJywKCQkJJ3VybCcJCQkJ CT0+ICcnLAoJCQknd3JhcHRhZycJCQk9PiAnJywKCQkJJ3hodG1sJwkJCQk9PiAneWVzJwoJ CSksICRhdHRzKTsKCgkJZXh0cmFjdCgkYXR0cyk7CgoJCWlmICgkdHlwZSA9PSAnYXJ0aWNs ZScpCgkJewoJCQlyZXR1cm4gdXBtX2FydGljbGVfaW1hZ2UoJGF0dHMsICR0aGluZyk7CgkJ fQoKCQlpZiAoJGltYWdlX3VybCkKCQl7CgkJCSRpbWFnZV91cmwgPSByYXd1cmxlbmNvZGUo JGltYWdlX3VybCk7CgoJCQlpZiAoZmlsZV9leGlzdHMoJGltYWdlX3VybCkpCgkJCXsKCQkJ CSR3ID0gJyc7CgkJCQkkaCA9ICcnOwoKCQkJCSRmb3BlbiA9IGdldF9jZmdfdmFyKCdhbGxv d191cmxfZm9wZW4nKSA/IHRydWUgOiBmYWxzZTsKCgkJCQlpZiAoJGZvcGVuKQoJCQkJewoJ CQkJCWxpc3QoJHcsICRoKSA9IGdldGltYWdlc2l6ZSgkaW1hZ2VfdXJsKTsKCQkJCX0KCgkJ CQkkb3V0ID0gJzxpbWcgc3JjPSInLiRpbWFnZV91cmwuJyInLgoJCQkJCSggKCRpZCBhbmQg ISR3cmFwdGFnKSA/ICcgaWQ9IicuJGlkLiciJyA6ICcnKS4KCQkJCQkoICgkY2xhc3MgYW5k ICEkd3JhcHRhZykgPyAnIGNsYXNzPSInLiRjbGFzcy4nIicgOiAnJykuCgkJCQkJKCAoJHcg YW5kICgkc2hvd193aWR0aCA9PSAneWVzJykpID8gJyB3aWR0aD0iJy4kdy4nIicgOiAnJyAp LgoJCQkJCSggKCRoIGFuZCAoJHNob3dfaGVpZ2h0ID09ICd5ZXMnKSkgPyAnIGhlaWdodD0i Jy4kaC4nIicgOiAnJyApLgoJCQkJCScgYWx0PSIiJy4KCQkJCQkoJHhodG1sID09ICd5ZXMn ID8gJyAvPicgOiAnPicpOwoKCQkJCWlmICgkdXJsKQoJCQkJewoJCQkJCSRvdXQgPSBpc19u dW1lcmljKCR1cmwpID8KCQkJCQkJaHJlZigkb3V0LCBwZXJtbGlua3VybF9pZCgkdXJsKSkg OgoJCQkJCQlocmVmKCRvdXQsICR1cmwpOwoJCQkJfQoKCQkJCXJldHVybiAoJHdyYXB0YWcp ID8gZG9UYWcoJG91dCwgJHdyYXB0YWcsICRjbGFzcywgJycsICRpZCkgOiAkb3V0OwoJCQl9 CgoJCQlyZXR1cm4gKCRwcmVmc1sncHJvZHVjdGlvbl9zdGF0dXMnXSAhPSAnbGl2ZScpID8K CQkJCXVwbV9pbWFnZV9nVHh0KCdub3RfZm91bmQnLCBhcnJheSgne2ltYWdlfScgPT4gJGlt YWdlX3VybCkpIDoKCQkJCScnOwoJCX0KCgkJZWxzZWlmICgkaW1hZ2VfaWQpCgkJewoJCQlp ZiAoIWlzX251bWVyaWMoJGltYWdlX2lkKSkKCQkJewoJCQkJcmV0dXJuIHVwbV9pbWFnZV9n VHh0KCdpbnZhbGlkX2lkJyk7CgkJCX0KCgkJCSRpbWFnZV9pZCA9IGRvU2xhc2goJGltYWdl X2lkKTsKCgkJCSRycyA9IHNhZmVfcm93KCcqJywgJ3R4cF9pbWFnZScsICJpZCA9ICckaW1h Z2VfaWQnIGxpbWl0IDAsIDEiKTsKCgkJCWlmICghJHJzKQoJCQl7CgkJCQlyZXR1cm4gKCRw cmVmc1sncHJvZHVjdGlvbl9zdGF0dXMnXSAhPSAnbGl2ZScpID8KCQkJCQl1cG1faW1hZ2Vf Z1R4dCgnbm90X2ZvdW5kJywgYXJyYXkoJ3tpbWFnZX0nID0+ICRpbWFnZV9pZCkpIDoKCQkJ CQknJzsKCQkJfQoJCX0KCgkJZWxzZWlmICgkaW1hZ2VfbmFtZSAhPSAnJykKCQl7CgkJCSRp bWFnZV9uYW1lID0gZG9TbGFzaCgkaW1hZ2VfbmFtZSk7CgoJCQkkcnMgPSBzYWZlX3Jvdygn KicsICd0eHBfaW1hZ2UnLCAibmFtZSA9ICckaW1hZ2VfbmFtZScgbGltaXQgMCwgMSIpOwoK CQkJaWYgKCEkcnMpCgkJCXsKCQkJCXJldHVybiAoJHByZWZzWydwcm9kdWN0aW9uX3N0YXR1 cyddICE9ICdsaXZlJykgPwoJCQkJCXVwbV9pbWFnZV9nVHh0KCdub3RfZm91bmQnLCBhcnJh eSgne2ltYWdlfScgPT4gJGltYWdlX25hbWUpKSA6CgkJCQkJJyc7CgkJCX0KCQl9CgoJCWVs c2UKCQl7CgkJCXJldHVybiAoJHByZWZzWydwcm9kdWN0aW9uX3N0YXR1cyddICE9ICdsaXZl JykgPwoJCQkJdXBtX2ltYWdlX2dUeHQoJ25vdGhpbmdfcmVxdWVzdGVkJykgOgoJCQkJJyc7 CgkJfQoKCQlpZiAoJGZvcm0gb3IgJHRoaW5nKQoJCXsKCQkJcmV0dXJuIHVwbV9pbWdfY3Vz dG9tKCRycywgJGF0dHMsICRmb3JtLCAkdGhpbmcpOwoJCX0KCgkJZWxzZQoJCXsKCQkJcmV0 dXJuIHVwbV9pbWdfZGVmYXVsdCgkcnMsICRhdHRzKTsKCQl9Cgl9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJ ZnVuY3Rpb24gdXBtX2ltZ19jdXN0b20oJHJvdywgJGF0dHMsICRmb3JtID0gJycsICR0aGlu ZyA9IE5VTEwpCgl7CgkJZ2xvYmFsICRwcmVmcywgJHVwbV9pbWdfY3VzdG9tOwoKCQlpZiAo JGZvcm0pCgkJewoJCQkkd2hhdCA9IGZldGNoX2Zvcm0oJGZvcm0pOwoJCX0KCgkJZWxzZWlm ICgkdGhpbmcpCgkJewoJCQkkd2hhdCA9ICR0aGluZzsKCQl9CgoJCWVsc2UKCQl7CgkJCXJl dHVybjsKCQl9CgoJCSRpbWdfdXJsID0gaHUuJHByZWZzWydpbWdfZGlyJ10uJy8nOwoJCSRp bWdfcGF0aCA9ICRwcmVmc1sncGF0aF90b19zaXRlJ10uRFMuJHByZWZzWydpbWdfZGlyJ10u RFM7CgoJCSR1cG1faW1nX2N1c3RvbSA9IGFycmF5KAoJCQknYWx0JwkJCQkJID0+ICRyb3db J2FsdCddLAoJCQknYXV0aG9yJwkJCSA9PiAkcm93WydhdXRob3InXSwKCQkJJ2NhcHRpb24n CQkJID0+ICRyb3dbJ2NhcHRpb24nXSwKCQkJJ2NhdGVnb3J5JwkJID0+ICRyb3dbJ2NhdGVn b3J5J10sCgkJCSdkYXRlJwkJCQkgPT4gJHJvd1snZGF0ZSddLAoJCQknZnVsbF9oZWlnaHQn CSA9PiAkcm93WydoJ10sCgkJCSdmdWxsX3VybCcJCSA9PiAkaW1nX3VybC4kcm93WydpZCdd LiRyb3dbJ2V4dCddLAoJCQknZnVsbF93aWR0aCcJID0+ICRyb3dbJ3cnXSwKCQkJJ2hyZWYn CQkJCSA9PiAkYXR0c1sndXJsJ10sCgkJCSdpZCcJCQkJCSA9PiAkcm93WydpZCddLAoJCQkn bGlzdCcJCQkJID0+ICcnLAoJCQknbmFtZScJCQkJID0+ICRyb3dbJ25hbWUnXSwKCQkJJ3Ro dW1iX3VybCcJCSA9PiAnJywKCQkJJ3RodW1iX2hlaWdodCcgPT4gJycsCgkJCSd0aHVtYl93 aWR0aCcJID0+ICcnLAoJCSk7CgoJCSR0aHVtYiA9ICRyb3dbJ2lkJ10uJ3QnLiRyb3dbJ2V4 dCddOwoKCQlpZiAoJHJvd1sndGh1bWJuYWlsJ10gYW5kIGZpbGVfZXhpc3RzKCRpbWdfcGF0 aC4kdGh1bWIpKQoJCXsKCQkJbGlzdCgkdywgJGgpID0gZ2V0aW1hZ2VzaXplKCRpbWdfcGF0 aC4kdGh1bWIpOwoKCQkJJHVwbV9pbWdfY3VzdG9tWyd0aHVtYl9oZWlnaHQnXSA9ICRoOwoJ CQkkdXBtX2ltZ19jdXN0b21bJ3RodW1iX3VybCddCQk9ICRpbWdfdXJsLiR0aHVtYjsKCQkJ JHVwbV9pbWdfY3VzdG9tWyd0aHVtYl93aWR0aCddCT0gJHc7CgkJfQoKCQlyZXR1cm4gcGFy c2UoJHdoYXQpOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9pbWdfY3VzdG9tX2Fz c2VydCgpCgl7CgkJZ2xvYmFsICR1cG1faW1nX2N1c3RvbTsKCgkJaWYgKGVtcHR5KCR1cG1f aW1nX2N1c3RvbSkpCgkJewoJCQl0cmlnZ2VyX2Vycm9yKHVwbV9pbWFnZV9nVHh0KCdlcnJv cl9jb250ZXh0JykpOwoJCX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX2Fs dCgkYXR0cyA9IGFycmF5KCkpCgl7CgkJZ2xvYmFsICR1cG1faW1nX2N1c3RvbTsKCgkJdXBt X2ltZ19jdXN0b21fYXNzZXJ0KCk7CgoJCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJCSdlc2Nh cGUnID0+ICdodG1sJwoJCSksICRhdHRzKSk7CgoJCXJldHVybiAoJGVzY2FwZSA9PSAnaHRt bCcpID8KCQkJaHRtbHNwZWNpYWxjaGFycygkdXBtX2ltZ19jdXN0b21bJ2FsdCddKSA6CgkJ CSR1cG1faW1nX2N1c3RvbVsnYWx0J107Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBt X2ltZ19hdXRob3IoJGF0dHMgPSBhcnJheSgpKQoJewoJCWdsb2JhbCAkdXBtX2ltZ19jdXN0 b207CgoJCXVwbV9pbWdfY3VzdG9tX2Fzc2VydCgpOwoKCQlyZXR1cm4gZ2V0X2F1dGhvcl9u YW1lKCR0aGlzYXJ0aWNsZVsnYXV0aG9yaWQnXSk7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rp b24gdXBtX2ltZ19jYXB0aW9uKCRhdHRzID0gYXJyYXkoKSkKCXsKCQlnbG9iYWwgJHVwbV9p bWdfY3VzdG9tOwoKCQl1cG1faW1nX2N1c3RvbV9hc3NlcnQoKTsKCgkJZXh0cmFjdChsQXR0 cyhhcnJheSgKCQkJJ2NsYXNzJwkJID0+ICcnLAoJCQknZXNjYXBlJwkgPT4gJ2h0bWwnLAoJ CQknbGFiZWwnCQkgPT4gJycsCgkJCSdsYWJlbHRhZycgPT4gJycsCgkJCSd3cmFwdGFnJwkg PT4gJycKCQkpLCAkYXR0cykpOwoKCQlpZiAoJHVwbV9pbWdfY3VzdG9tWydjYXB0aW9uJ10p CgkJewoJCQkkY2FwdGlvbiA9ICgkZXNjYXBlID09ICdodG1sJykgPwoJCQkJaHRtbHNwZWNp YWxjaGFycygkdXBtX2ltZ19jdXN0b21bJ2NhcHRpb24nXSkgOgoJCQkJJHVwbV9pbWdfY3Vz dG9tWydjYXB0aW9uJ107CgoJCQlyZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJlbHRhZyku ZG9UYWcoJGNhcHRpb24sICR3cmFwdGFnLCAkY2xhc3MpOwoJCX0KCX0KCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K CglmdW5jdGlvbiB1cG1faW1nX2NhdGVnb3J5KCRhdHRzID0gYXJyYXkoKSkKCXsKCQlnbG9i YWwgJHVwbV9pbWdfY3VzdG9tOwoKCQl1cG1faW1nX2N1c3RvbV9hc3NlcnQoKTsKCgkJZXh0 cmFjdChsQXR0cyhhcnJheSgKCQkJJ2NsYXNzJwkJID0+ICcnLAoJCQknbGFiZWwnCQkgPT4g JycsCgkJCSdsYWJlbHRhZycgPT4gJycsCgkJCSd0aXRsZScJCSA9PiAnMCcsCgkJCSd3cmFw dGFnJwkgPT4gJycsCgkJKSwgJGF0dHMpKTsKCgkJaWYgKCR1cG1faW1nX2N1c3RvbVsnY2F0 ZWdvcnknXSkKCQl7CgkJCSRjYXRlZ29yeSA9ICgkdGl0bGUpID8KCQkJCWZldGNoX2NhdGVn b3J5X3RpdGxlKCR1cG1faW1nX2N1c3RvbVsnY2F0ZWdvcnknXSwgJ2ltYWdlJykgOgoJCQkJ JHVwbV9pbWdfY3VzdG9tWydjYXRlZ29yeSddOwoKCQkJcmV0dXJuIGRvTGFiZWwoJGxhYmVs LCAkbGFiZWx0YWcpLmRvVGFnKCRjYXRlZ29yeSwgJHdyYXB0YWcsICRjbGFzcyk7CgkJfQoJ fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9pbWdfZGF0ZSgkYXR0cyA9IGFycmF5KCkp Cgl7CgkJZ2xvYmFsICR1cG1faW1nX2N1c3RvbSwgJHByZWZzOwoKCQl1cG1faW1nX2N1c3Rv bV9hc3NlcnQoKTsKCgkJZXh0cmFjdChsQXR0cyhhcnJheSgKCQkJJ2Zvcm1hdCcJPT4gJHBy ZWZzWydkYXRlZm9ybWF0J10sCgkJCSdnbXQnCQkJPT4gJycsCgkJCSdsYW5nJwkJPT4gJycs CgkJKSwgJGF0dHMpKTsKCgkJaWYgKCRmb3JtYXQpCgkJewoJCQlyZXR1cm4gc2FmZV9zdHJm dGltZSgkZm9ybWF0LCAkdXBtX2ltZ19jdXN0b21bJ2RhdGUnXSwgJGdtdCwgJGxhbmcpOwoJ CX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX2Z1bGxfaGVpZ2h0KCRhdHRz ID0gYXJyYXkoKSkKCXsKCQlnbG9iYWwgJHVwbV9pbWdfY3VzdG9tOwoKCQl1cG1faW1nX2N1 c3RvbV9hc3NlcnQoKTsKCgkJcmV0dXJuICR1cG1faW1nX2N1c3RvbVsnZnVsbF9oZWlnaHQn XTsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX2Z1bGxfdXJsKCRhdHRzID0g YXJyYXkoKSkKCXsKCQlnbG9iYWwgJHVwbV9pbWdfY3VzdG9tOwoKCQl1cG1faW1nX2N1c3Rv bV9hc3NlcnQoKTsKCgkJcmV0dXJuICR1cG1faW1nX2N1c3RvbVsnZnVsbF91cmwnXTsKCX0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX2Z1bGxfd2lkdGgoJGF0dHMgPSBhcnJh eSgpKQoJewoJCWdsb2JhbCAkdXBtX2ltZ19jdXN0b207CgoJCXVwbV9pbWdfY3VzdG9tX2Fz c2VydCgpOwoKCQlyZXR1cm4gJHVwbV9pbWdfY3VzdG9tWydmdWxsX3dpZHRoJ107Cgl9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ19ocmVmKCRhdHRzID0gYXJyYXkoKSwgJHRo aW5nID0gTlVMTCkKCXsKCQlnbG9iYWwgJHVwbV9pbWdfY3VzdG9tOwoKCQl1cG1faW1nX2N1 c3RvbV9hc3NlcnQoKTsKCgkJZXh0cmFjdChsQXR0cyhhcnJheSgKCQkJJ2NsYXNzJwkJID0+ ICcnLAoJCQknZXNjYXBlJwkgPT4gJycsCgkJCSdsYWJlbCcJCSA9PiAnJywKCQkJJ2xhYmVs dGFnJyA9PiAnJywKCQkJJ3dyYXB0YWcnCSA9PiAnJywKCQkpLCAkYXR0cykpOwoKCQlpZiAo JHVwbV9pbWdfY3VzdG9tWydocmVmJ10pCgkJewoJCQkkaHJlZiA9ICgkZXNjYXBlID09ICdo dG1sJykgPwoJCQkJaHRtbHNwZWNpYWxjaGFycygkdXBtX2ltZ19jdXN0b21bJ2hyZWYnXSkg OgoJCQkJJHVwbV9pbWdfY3VzdG9tWydocmVmJ107CgoJCQkkaHJlZiA9ICgkdGhpbmcpID8g aHJlZihwYXJzZSgkdGhpbmcpLCAkaHJlZikgOiAkaHJlZjsKCgkJCXJldHVybiBkb0xhYmVs KCRsYWJlbCwgJGxhYmVsdGFnKS5kb1RhZygkaHJlZiwgJHdyYXB0YWcsICRjbGFzcyk7CgkJ fQoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9pbWdfaWQoJGF0dHMgPSBhcnJheSgp KQoJewoJCWdsb2JhbCAkdXBtX2ltZ19jdXN0b207CgoJCXVwbV9pbWdfY3VzdG9tX2Fzc2Vy dCgpOwoKCQlyZXR1cm4gJHVwbV9pbWdfY3VzdG9tWydpZCddOwoJfQoKLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK CWZ1bmN0aW9uIHVwbV9pbWdfbGlzdCgkYXR0cyA9IGFycmF5KCkpCgl7CgkJZ2xvYmFsICR1 cG1faW1nX2N1c3RvbTsKCgkJdXBtX2ltZ19jdXN0b21fYXNzZXJ0KCk7CgoJCXJldHVybiAk dXBtX2ltZ19jdXN0b21bJ2xpc3QnXTsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1f aW1nX25hbWUoJGF0dHMgPSBhcnJheSgpKQoJewoJCWdsb2JhbCAkdXBtX2ltZ19jdXN0b207 CgoJCXVwbV9pbWdfY3VzdG9tX2Fzc2VydCgpOwoKCQlyZXR1cm4gJHVwbV9pbWdfY3VzdG9t WyduYW1lJ107Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltZ190aHVtYl9oZWln aHQoJGF0dHMgPSBhcnJheSgpKQoJewoJCWdsb2JhbCAkdXBtX2ltZ19jdXN0b207CgoJCXVw bV9pbWdfY3VzdG9tX2Fzc2VydCgpOwoKCQlyZXR1cm4gJHVwbV9pbWdfY3VzdG9tWyd0aHVt Yl9oZWlnaHQnXTsKCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1nX3RodW1iX3Vy bCgkYXR0cyA9IGFycmF5KCkpCgl7CgkJZ2xvYmFsICR1cG1faW1nX2N1c3RvbTsKCgkJdXBt X2ltZ19jdXN0b21fYXNzZXJ0KCk7CgoJCXJldHVybiAkdXBtX2ltZ19jdXN0b21bJ3RodW1i X3VybCddOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9pbWdfdGh1bWJfd2lkdGgo JGF0dHMgPSBhcnJheSgpKQoJewoJCWdsb2JhbCAkdXBtX2ltZ19jdXN0b207CgoJCXVwbV9p bWdfY3VzdG9tX2Fzc2VydCgpOwoKCQlyZXR1cm4gJHVwbV9pbWdfY3VzdG9tWyd0aHVtYl93 aWR0aCddOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9pbWdfZGVmYXVsdCgkcm93 LCAkYXR0cykKCXsKCQlnbG9iYWwgJHByZWZzOwoKCQlleHRyYWN0KCRhdHRzKTsKCgkJJGlt Z191cmwgPSBodS4kcHJlZnNbJ2ltZ19kaXInXS4nLyc7CgkJJGltZyA9ICRyb3dbJ2lkJ10u JHJvd1snZXh0J107CgoJCWlmIChpbl9hcnJheSgkdHlwZSwgYXJyYXkoJ3BvcHVwJywgJ3Ro dW1iJywgJ3RodW1ibmFpbCcpKSkKCQl7CgkJCSRpbWdfcGF0aCA9ICRwcmVmc1sncGF0aF90 b19zaXRlJ10uRFMuJHByZWZzWydpbWdfZGlyJ10uRFM7CgkJCSR0aHVtYiA9ICRyb3dbJ2lk J10uJ3QnLiRyb3dbJ2V4dCddOwoKCQkJJHRodW1iX2V4aXN0cyA9IGZhbHNlOwoKCQkJaWYg KCRyb3dbJ3RodW1ibmFpbCddIGFuZCBmaWxlX2V4aXN0cygkaW1nX3BhdGguJHRodW1iKSkK CQkJewoJCQkJJHRodW1iX2V4aXN0cyA9IHRydWU7CgoJCQkJbGlzdCgkdGh1bWJfdywgJHRo dW1iX2gpID0gZ2V0aW1hZ2VzaXplKCRpbWdfcGF0aC4kdGh1bWIpOwoJCQl9CgkJfQoKCQlz d2l0Y2ggKCR0eXBlKQoJCXsKCQkJY2FzZSAncG9wdXAnOgoJCQkJaWYgKCR0aHVtYl9leGlz dHMpCgkJCQl7CgkJCQkJJG91dCA9ICc8YSBocmVmPSInLiRpbWdfdXJsLiRpbWcuJyInLgoJ CQkJCQkoICgkaWQgYW5kICEkd3JhcHRhZykgPyAnIGlkPSInLiRpZC4nIicgOiAnJykuCgkJ CQkJCSggKCRjbGFzcyBhbmQgISR3cmFwdGFnKSA/ICcgY2xhc3M9IicuJGNsYXNzLiciJyA6 ICcnKS4KCQkJCQkJKCAoJHJvd1snY2FwdGlvbiddIGFuZCAoJHNob3dfdGl0bGUgPT0gJ3ll cycpKSA/ICcgdGl0bGU9IicuaHRtbHNwZWNpYWxjaGFycygkcm93WydjYXB0aW9uJ10pLici JyA6ICcnICkuCgkJCQkJCScgb25jbGljaz0idXBtX3BvcF9pbWcodGhpcy5ocmVmLCAnLmNo cigzOSkuJHJvd1sndyddLmNocigzOSkuJywgJy5jaHIoMzkpLiRyb3dbJ2gnXS5jaHIoMzkp LicsICcuY2hyKDM5KS4kcm93WyduYW1lJ10uY2hyKDM5KS4nLCB0aGlzLnRpdGxlKTsgcmV0 dXJuIGZhbHNlOyI+Jy4KCQkJCQkJJzxpbWcgc3JjPSInLiRpbWdfdXJsLiR0aHVtYi4nIicu CgkJCQkJCSgkc2hvd193aWR0aCA9PSAneWVzJyA/ICcgd2lkdGg9IicuJHRodW1iX3cuJyIn IDogJycpLgoJCQkJCQkoJHNob3dfaGVpZ2h0ID09ICd5ZXMnID8gJyBoZWlnaHQ9IicuJHRo dW1iX2guJyInIDogJycpLgoJCQkJCQkoICgkcm93WydhbHQnXSBhbmQgKCRzaG93X2FsdCA9 PSAneWVzJykpID8gJyBhbHQ9IicuaHRtbHNwZWNpYWxjaGFycygkcm93WydhbHQnXSkuJyIg dGl0bGU9IiInIDogJyBhbHQ9IiInICkuCgkJCQkJCSgkeGh0bWwgPT0gJ3llcycgPyAnIC8+ JyA6ICc+JykuCgkJCQkJCSc8L2E+JzsKCgkJCQkJcmV0dXJuICgkd3JhcHRhZykgPyBkb1Rh Zygkb3V0LCAkd3JhcHRhZywgJGNsYXNzLCAnJywgJGlkKSA6ICRvdXQ7CgkJCQl9CgoJCQkJ ZWxzZWlmICgkcHJlZnNbJ3Byb2R1Y3Rpb25fc3RhdHVzJ10gIT0gJ2xpdmUnKQoJCQkJewoJ CQkJCXJldHVybiB1cG1faW1hZ2VfZ1R4dCgnbm9fdGh1bWInLCBhcnJheSgne2ltYWdlfScg PT4gJHJvd1snaWQnXSkpOwoJCQkJfQoJCQlicmVhazsKCgkJCWNhc2UgJ3RodW1ibmFpbCc6 CgkJCWNhc2UgJ3RodW1iJzoKCQkJCWlmICgkdGh1bWJfZXhpc3RzKQoJCQkJewoJCQkJCSRv dXQgPSAnPGltZyBzcmM9IicuJGltZ191cmwuJHRodW1iLiciJy4KCQkJCQkJKCAoJGlkIGFu ZCAhJHdyYXB0YWcpID8gJyBpZD0iJy4kaWQuJyInIDogJycpLgoJCQkJCQkoICgkY2xhc3Mg YW5kICEkd3JhcHRhZykgPyAnIGNsYXNzPSInLiRjbGFzcy4nIicgOiAnJykuCgkJCQkJCSgk c2hvd193aWR0aCA9PSAneWVzJyA/ICcgd2lkdGg9IicuJHRodW1iX3cuJyInIDogJycpLgoJ CQkJCQkoJHNob3dfaGVpZ2h0ID09ICd5ZXMnID8gJyBoZWlnaHQ9IicuJHRodW1iX2guJyIn IDogJycpLgoJCQkJCQkoICgkcm93WydhbHQnXSBhbmQgKCRzaG93X2FsdCA9PSAneWVzJykp ID8gJyBhbHQ9IicuaHRtbHNwZWNpYWxjaGFycygkcm93WydhbHQnXSkuJyInIDogJyBhbHQ9 IiInICkuCgkJCQkJCSggKCRyb3dbJ2NhcHRpb24nXSBhbmQgKCRzaG93X3RpdGxlID09ICd5 ZXMnKSkgPyAnIHRpdGxlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1snY2FwdGlvbiddKS4n IicgOiAnJyApLgoJCQkJCQkoJHhodG1sID09ICd5ZXMnID8gJyAvPicgOiAnPicpOwoKCQkJ CQlpZiAoJHVybCkKCQkJCQl7CgkJCQkJCSRvdXQgPSBpc19udW1lcmljKCR1cmwpID8gaHJl Zigkb3V0LCBwZXJtbGlua3VybF9pZCgkdXJsKSkgOiBocmVmKCRvdXQsICR1cmwpOwoJCQkJ CX0KCgkJCQkJcmV0dXJuICgkd3JhcHRhZykgPyBkb1RhZygkb3V0LCAkd3JhcHRhZywgJGNs YXNzLCAnJywgJGlkKSA6ICRvdXQ7CgkJCQl9CgoJCQkJZWxzZWlmICgkcHJlZnNbJ3Byb2R1 Y3Rpb25fc3RhdHVzJ10gIT0gJ2xpdmUnKQoJCQkJewoJCQkJCXJldHVybiB1cG1faW1hZ2Vf Z1R4dCgnbm9fdGh1bWInLCBhcnJheSgne2ltYWdlfScgPT4gJHJvd1snaWQnXSkpOwoJCQkJ fQoJCQlicmVhazsKCgkJCWNhc2UgJ2ltYWdlJzoKCQkJZGVmYXVsdDoKCQkJCSRvdXQgPSAn PGltZyBzcmM9IicuJGltZ191cmwuJGltZy4nIicuCgkJCQkJKCAoJGlkIGFuZCAhJHdyYXB0 YWcpID8gJyBpZD0iJy4kaWQuJyInIDogJycpLgoJCQkJCSggKCRjbGFzcyBhbmQgISR3cmFw dGFnKSA/ICcgY2xhc3M9IicuJGNsYXNzLiciJyA6ICcnKS4KCQkJCQkoJHNob3dfd2lkdGgg PT0gJ3llcycgPyAnIHdpZHRoPSInLiRyb3dbJ3cnXS4nIicgOiAnJykuCgkJCQkJKCRzaG93 X2hlaWdodCA9PSAneWVzJyA/ICcgaGVpZ2h0PSInLiRyb3dbJ2gnXS4nIicgOiAnJykuCgkJ CQkJKCAoJHJvd1snYWx0J10gYW5kICgkc2hvd19hbHQgPT0gJ3llcycpKSA/ICcgYWx0PSIn Lmh0bWxzcGVjaWFsY2hhcnMoJHJvd1snYWx0J10pLiciJyA6ICcgYWx0PSIiJyApLgoJCQkJ CSggKCRyb3dbJ2NhcHRpb24nXSBhbmQgKCRzaG93X3RpdGxlID09ICd5ZXMnKSkgPyAnIHRp dGxlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1snY2FwdGlvbiddKS4nIicgOiAnJyApLgoJ CQkJCSgkeGh0bWwgPT0gJ3llcycgPyAnIC8+JyA6ICc+Jyk7CgoJCQkJaWYgKCR1cmwpCgkJ CQl7CgkJCQkJJG91dCA9IGlzX251bWVyaWMoJHVybCkgPyBocmVmKCRvdXQsIHBlcm1saW5r dXJsX2lkKCR1cmwpKSA6IGhyZWYoJG91dCwgJHVybCk7CgkJCQl9CgoJCQkJcmV0dXJuICgk d3JhcHRhZykgPyBkb1RhZygkb3V0LCAkd3JhcHRhZywgJGNsYXNzLCAnJywgJGlkKSA6ICRv dXQ7CgkJCWJyZWFrOwoJCX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1hZ2Vf Y2hlY2tfbG9hZCgpCgl7CgkJZ2xvYmFsICRwcmVmczsKCgkJaWYgKCRwcmVmc1sndXBtX2lt YWdlX2xvYWRfc2NyaXB0J10gPT0gMSkKCQl7CgkJCW9iX3N0YXJ0KCd1cG1faW1hZ2VfbGlu aycpOwoJCX0KCX0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCglmdW5jdGlvbiB1cG1faW1hZ2VfbGluaygkYnVm ZmVyKQoJewoJCSRmaW5kID0gJzwvaGVhZD4nOwoJCSRyZXBsYWNlID0gbi50Lic8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLmh1LidpbmRleC5waHA/anM9dXBtX2lt YWdlIj48L3NjcmlwdD4nLm4uJGZpbmQ7CgoJCXJldHVybiBzdHJfcmVwbGFjZSgkZmluZCwg JHJlcGxhY2UsICRidWZmZXIpOwoJfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1bmN0aW9uIHVwbV9pbWFn ZV9qcygpCgl7CgkJaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvamF2YXNjcmlwdCIpOwoK CQllY2hvIDw8PGpzCmZ1bmN0aW9uIHVwbV9wb3BfaW1nKHNyYywgdywgaCwgbmFtZSwgdGl0 bGUpCnsKCXZhciB3dyA9IHBhcnNlSW50KHcpOwoJdmFyIHdoID0gcGFyc2VJbnQoaCk7CgoJ aWYgKHd3IDwgMTAwKQoJewoJCXd3ID0gMTI1OwoJfQoKCWlmICh3aCA8IDEwMCkKCXsKCQl3 aCA9IDEyNTsKCgkJd3cgKz0gNzU7Cgl9CgoJdmFyIHNjcm9sbCA9IGZhbHNlOwoKCWlmIChz Y3JlZW4ud2lkdGggJiYgKHNjcmVlbi53aWR0aCA8IHd3KSkKCXsKCQlzY3JvbGwgPSAneWVz JzsKCQl3dyA9IHNjcmVlbi53aWR0aDsKCX0KCglpZiAoc2NyZWVuLmhlaWdodCAmJiAoc2Ny ZWVuLmhlaWdodCA8IHdoKSkKCXsKCQlzY3JvbGwgPSAneWVzJzsKCQl3aCA9IHNjcmVlbi5o ZWlnaHQ7Cgl9CgoJaWYgKCF0aXRsZSkKCXsKCQl0aXRsZSA9IG5hbWU7Cgl9CgoJdmFyIHQg PSAoc2NyZWVuLmhlaWdodCkgPyAoc2NyZWVuLmhlaWdodCAtIHdoKSAvIDIgOiAwOwoJdmFy IGwgPSAoc2NyZWVuLndpZHRoKSA/IChzY3JlZW4ud2lkdGggLSB3dykgLyAyIDogMDsKCgl2 YXIgdXBtX3BvcF93aW4gPSB3aW5kb3cub3BlbignJywgJ3VwbV9wb3Bfd2luJywgJ3RvcCA9 ICcrdCsnLCBsZWZ0ID0gJytsKycsIHdpZHRoID0gJyt3dysnLCBoZWlnaHQgPSAnK3doKycs IHRvb2xiYXIgPSBubywgbG9jYXRpb24gPSBubywgZGlyZWN0b3JpZXMgPSBubywgc3RhdHVz ID0gbm8sIG1lbnViYXIgPSBubywgc2Nyb2xsYmFycyA9ICcrc2Nyb2xsKycsIGNvcHloaXN0 b3J5ID0gbm8sIHJlc2l6YWJsZSA9IHllcycpOwoKCXVwbV9wb3Bfd2luLmRvY3VtZW50Lndy aXRlbG4oJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9F TiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiPicpOwoJdXBtX3Bv cF93aW4uZG9jdW1lbnQud3JpdGVsbignPGh0bWw+Jyk7Cgl1cG1fcG9wX3dpbi5kb2N1bWVu dC53cml0ZWxuKCc8aGVhZD4nKTsKCXVwbV9wb3Bfd2luLmRvY3VtZW50LndyaXRlbG4oJzxt ZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFy c2V0PXV0Zi04Ij4nKTsKCXVwbV9wb3Bfd2luLmRvY3VtZW50LndyaXRlbG4oJzxtZXRhIGh0 dHAtZXF1aXY9ImltYWdldG9vbGJhciIgY29udGVudD0ibm8iPicpOwoJdXBtX3BvcF93aW4u ZG9jdW1lbnQud3JpdGVsbignPHRpdGxlPicrdGl0bGUrJzwvdGl0bGU+Jyk7Cgl1cG1fcG9w X3dpbi5kb2N1bWVudC53cml0ZWxuKCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicpOwoJdXBt X3BvcF93aW4uZG9jdW1lbnQud3JpdGVsbignPCEtLScpOwoJdXBtX3BvcF93aW4uZG9jdW1l bnQud3JpdGVsbignYm9keSB7Jyk7Cgl1cG1fcG9wX3dpbi5kb2N1bWVudC53cml0ZWxuKCdt YXJnaW46IDA7Jyk7Cgl1cG1fcG9wX3dpbi5kb2N1bWVudC53cml0ZWxuKCdwYWRkaW5nOiAw OycpOwoJdXBtX3BvcF93aW4uZG9jdW1lbnQud3JpdGVsbignY29sb3I6ICMwMDA7Jyk7Cgl1 cG1fcG9wX3dpbi5kb2N1bWVudC53cml0ZWxuKCdiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOycp OwoJdXBtX3BvcF93aW4uZG9jdW1lbnQud3JpdGVsbigndGV4dC1hbGlnbjogY2VudGVyOycp OwoKCWlmIChzY3JvbGwgPT0gZmFsc2UpCgl7CgkJdXBtX3BvcF93aW4uZG9jdW1lbnQud3Jp dGVsbignb3ZlcmZsb3c6IGhpZGRlbjsnKTsKCX0KCgl1cG1fcG9wX3dpbi5kb2N1bWVudC53 cml0ZWxuKCd9Jyk7CgoJdXBtX3BvcF93aW4uZG9jdW1lbnQud3JpdGVsbignJyk7Cgl1cG1f cG9wX3dpbi5kb2N1bWVudC53cml0ZWxuKCdpbWcgeycpOwoJdXBtX3BvcF93aW4uZG9jdW1l bnQud3JpdGVsbignbWFyZ2luOiAwIGF1dG87Jyk7Cgl1cG1fcG9wX3dpbi5kb2N1bWVudC53 cml0ZWxuKCdwYWRkaW5nOiAwOycpOwoJdXBtX3BvcF93aW4uZG9jdW1lbnQud3JpdGVsbign Ym9yZGVyOiBub25lOycpOwoKCWlmICh3aCA9PSAxMjUpCgl7CgkJdXBtX3BvcF93aW4uZG9j dW1lbnQud3JpdGVsbignbWFyZ2luLXRvcDogJyArIE1hdGguZmxvb3IoNTAtKGgvMikpICsg J3B4OycpOwoJfQoKCXVwbV9wb3Bfd2luLmRvY3VtZW50LndyaXRlbG4oJ30nKTsKCgl1cG1f cG9wX3dpbi5kb2N1bWVudC53cml0ZWxuKCctLT4nKTsKCXVwbV9wb3Bfd2luLmRvY3VtZW50 LndyaXRlbG4oJzwvc3R5bGU+Jyk7Cgl1cG1fcG9wX3dpbi5kb2N1bWVudC53cml0ZWxuKCc8 L2hlYWQ+Jyk7Cgl1cG1fcG9wX3dpbi5kb2N1bWVudC53cml0ZWxuKCc8Ym9keT4nKTsKCXVw bV9wb3Bfd2luLmRvY3VtZW50LndyaXRlbG4oJzxkaXYgaWQ9InVwbS1pbWFnZS12aWV3Ij4n KTsKCXVwbV9wb3Bfd2luLmRvY3VtZW50LndyaXRlbG4oJzxpbWcgc3JjPSInK3NyYysnIiB3 aWR0aD0iJyt3KyciIGhlaWdodD0iJytoKyciIGFsdD0iIj4nKTsKCXVwbV9wb3Bfd2luLmRv Y3VtZW50LndyaXRlbG4oJzwvZGl2PicpOwoJdXBtX3BvcF93aW4uZG9jdW1lbnQud3JpdGVs bignPC9ib2R5PicpOwoJdXBtX3BvcF93aW4uZG9jdW1lbnQud3JpdGUoJzwvaHRtbD4nKTsK Cgl1cG1fcG9wX3dpbi5kb2N1bWVudC5jbG9zZSgpOwoKCXVwbV9wb3Bfd2luLmZvY3VzKCk7 CgoJcmV0dXJuIGZhbHNlOwp9CmpzOwoKCQlleGl0KDApOwoJfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCWZ1 bmN0aW9uIHVwbV9pbWFnZV9wcmVmcygkZXZlbnQsICRzdGVwKQoJewoJCWdsb2JhbCAkcHJl ZnM7CgoJCXBhZ2V0b3AodXBtX2ltYWdlX2dUeHQoJ3ByZWZzJyksICgkc3RlcCA9PSAndXBk YXRlJyA/IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJykgOiAnJykpOwoKCQlpZiAoJHN0ZXAg PT0gJ3VwZGF0ZScpCgkJewoJCQkkbG9hZF9zY3JpcHQgPSBkb1NsYXNoKHBzKCdsb2FkX3Nj cmlwdCcpKTsKCgkJCXNhZmVfdXBkYXRlKCd0eHBfcHJlZnMnLCAidmFsID0gJyRsb2FkX3Nj cmlwdCciLCAibmFtZSA9ICd1cG1faW1hZ2VfbG9hZF9zY3JpcHQnIik7CgoJCQkkcHJlZnMg PSBnZXRfcHJlZnMoKTsKCQl9CgoJCWVjaG8gbi5uLic8ZGl2IHN0eWxlPSJtYXJnaW46IDNl bSBhdXRvIGF1dG8gYXV0bzsgd2lkdGg6IDE2ZW07Ij4nLgoKCQkJbi5uLmhlZCh1cG1faW1h Z2VfZ1R4dCgncHJlZnMnKSwgJzEnKS4KCgkJCW4ubi5mb3JtKAoJCQkJbi5lSW5wdXQoJ3Vw bV9pbWFnZV9wcmVmcycpLgoJCQkJbi5zSW5wdXQoJ3VwZGF0ZScpLgoKCQkJCW4ubi5ncmFm KAoJCQkJCXVwbV9pbWFnZV9nVHh0KCdsb2FkX3NjcmlwdCcpLmJyLgoJCQkJCW4ueWVzbm9S YWRpbygnbG9hZF9zY3JpcHQnLCAkcHJlZnNbJ3VwbV9pbWFnZV9sb2FkX3NjcmlwdCddKQoJ CQkJKS4KCgkJCQluLm4uZklucHV0KCdzdWJtaXQnLCAndXBkYXRlJywgJ1VwZGF0ZScsICdz bWFsbGVyYm94JykKCQkJKS5uLm4uJzwvZGl2Pic7Cgl9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJZnVuY3Rp b24gdXBtX2ltYWdlX2luc3RhbGwoKQoJewoJCWdsb2JhbCAkcHJlZnM7CgoJCWlmICghaXNz ZXQoJHByZWZzWyd1cG1faW1hZ2VfbG9hZF9zY3JpcHQnXSkpCgkJewoJCQlzYWZlX2luc2Vy dCgndHhwX3ByZWZzJywgIgoJCQkJbmFtZSA9ICd1cG1faW1hZ2VfbG9hZF9zY3JpcHQnLAoJ CQkJdmFsID0gJzEnLAoJCQkJaHRtbCA9ICd5ZXNub3JhZGlvJywKCQkJCXByZWZzX2lkID0g MSwKCQkJCXR5cGUgPSAyLAoJCQkJZXZlbnQgPSAnYWRtaW4nLAoJCQkJcG9zaXRpb24gPSAw CgkJCSIpOwoKCQkJJEdMT0JBTFNbJ3ByZWZzJ10gPSBnZXRfcHJlZnMoKTsKCQl9Cgl9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCgoJZnVuY3Rpb24gdXBtX2ltYWdlX2dUeHQoJHdoYXQsICRhdHRzID0gYXJy YXkoKSkKCXsKCQkkbGFuZyA9IGFycmF5KAoJCQknZXJyb3JfY29udGV4dCcJCQk9PiAndXBt X2ltYWdlOiBpbnZhbGlkIGNvbnRleHQsIHRhZyBtdXN0IGJlIHVzZWQgd2l0aGluIHRoZSB0 YWcgYXMgYSB3cmFwcGVyIG9yIGZyb20gaXRzIG93biBmb3JtIGNhbGxlZCBieSB0aGUgdGFn LicsCgkJCSdpbnZhbGlkX2lkJwkJCQk9PiAndXBtX2ltYWdlOiBzdXBwbGllZCBpbWFnZSBp ZCBpcyBpbnZhbGlkLCBpdCBtdXN0IGJlIGEgc2luZ2xlIG51bWVyaWMgdmFsdWUuJywKCQkJ J2xvYWRfc2NyaXB0JwkJCQk9PiAnQXV0by1sb2FkIEphdmFTY3JpcHQ/JywKCQkJJ25vX3Ro dW1iJwkJCQkJPT4gJ3VwbV9pbWFnZTogaW1hZ2UgJiM4MjIwO3tpbWFnZX0mIzgyMjE7IGRv ZXMgbm90IGhhdmUgYSB0aHVtYm5haWwuJywKCQkJJ25vdF9mb3VuZCcJCQkJCT0+ICd1cG1f aW1hZ2U6IHJlcXVlc3RlZCBpbWFnZSBjb3VsZCBub3QgYmUgZm91bmQ6ICYjODIyMDt7aW1h Z2V9JiM4MjIxOycsCgkJCSdub3RfZm91bmRfbGlzdCcJCT0+ICd1cG1faW1hZ2U6IHJlcXVl c3RlZCBpbWFnZXMgY291bGQgbm90IGJlIGZvdW5kOiAmIzgyMjA7e2xpc3R9JiM4MjIxOycs CgkJCSdub3RoaW5nX3JlcXVlc3RlZCcgPT4gJ3VwbV9pbWFnZTogbm8gaW1hZ2Ugd2FzIHJl cXVlc3RlZC4nLAoJCQkncHJlZnMnCQkJCQkJCT0+ICd1cG1faW1hZ2UgUHJlZmVyZW5jZXMn CgkJKTsKCgkJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOwoJfSI7czo0OiJ0 eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6MToiNSI7czo0OiJoZWxwIjtzOjE3NDY4OiI8 c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4scHJvamVjdGlvbiI+CjwhLS0K cHJlLCBjb2RlIHsKYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKfQoKaDMgY29kZSB7CmZvbnQt ZmFtaWx5OiBpbmhlcml0OwpiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQotLT4K PC9zdHlsZT4KCjxoMT51cG1faW1hZ2U8L2gxPgoKPG9sIGlkPSJzdGFydCI+Cgk8bGk+PGEg aHJlZj0iI2ludHJvLXNlY3Rpb24iPkludHJvPC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3Rh Zy1zZWN0aW9uIj5OZXcgSW1hZ2UgVGFnczwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiNjdXN0 b20tc2VjdGlvbiI+Q3VzdG9taXppbmcgT3V0cHV0PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0i I2NyZWRpdC1zZWN0aW9uIj5DcmVkaXQgYW5kIERldmVsb3BlciBOb3RlczwvYT48L2xpPgo8 L29sPgoKCjxoMiBpZD0iaW50cm8tc2VjdGlvbiI+SW50cm88L2gyPgoKPHA+VGV4dHBhdHRl cm4gY29tZXMgd2l0aCBpdHMgb3duIGltYWdlIHRhZ3MsIGJ1dCBhcyBJIHdvcmtlZCBvbiB0 aGlzIHBsdWdpbiwgSSBkZWNpZGVkIHRvCmNyZWF0ZSBleHRlbmRlZCB2ZXJzaW9ucywgdG8g YWxsb3cgYSBsb3QgbW9yZSBjdXN0b21pemF0aW9uLiBUaGlzIHBsdWdpbiB3b24mIzgyMTc7 dAphdXRvbWF0aWNhbGx5IGNyZWF0ZSB2YXN0LCBjb21wbGljYXRlZCBnYWxsZXJpZXMsIGJ1 dCB5b3UgY291bGQgY2VydGFpbmx5IHVzZSBpdCB0bwpjcmVhdGUgYSBtaW5pLWdhbGxlcnkg b2Ygc29ydHMuIDxhIGhyZWY9IiNzdGFydCIgdGl0bGU9Ikp1bXAgYmFjayBjb250ZW50cyBs aXN0Ij4mIzg2MTc7PC9hPjwvcD4KCgo8aDIgaWQ9InRhZy1zZWN0aW9uIj5OZXcgSW1hZ2Ug VGFnczwvaDI+Cgo8cD5UaGlzIHBsdWdpbiBwcm92aWRlcyB5b3Ugd2l0aCB0d28gbmV3IGlt YWdlIHRhZ3MuPC9wPgoKPGgzPjxjb2RlPiZsdDt0eHA6dXBtX2ltYWdlIC8mZ3Q7PC9jb2Rl PjwvaDM+Cgo8ZGw+Cgk8ZHQ+PGNvZGU+PGI+Y2xhc3M9IjwvYj48ZW0+Y2xhc3MgbmFtZTwv ZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5UaGUgKFgpSFRNTC9DU1MgY2xhc3MgdG8g YXBwbHkgdG8gdGhlIGltYWdlLjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+ QXZhaWxhYmxlIHZhbHVlczogYW55IHZhbGlkIChYKUhUTUwvQ1NTIGNsYXNzIG5hbWUuPC9k ZD4KCTxkZD5EZWZhdWx0IHZhbHVlOiB1bnNldC48L2RkPgoKCTxkdD48Y29kZT48Yj5mb3Jt PSI8L2I+PGVtPmZvcm0gbmFtZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5DdXN0 b21pemUgdGhlIGltYWdlIGRldGFpbHMgb3V0cHV0LCBmb3IgdHlwZSA8Y29kZT48Yj5pbWFn ZTwvYj48L2NvZGU+LjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxh YmxlIHZhbHVlczogYW55IGV4aXN0aW5nIGZvcm0mIzgyMTc7cyBuYW1lLjwvZGQ+Cgk8ZGQ+ RGVmYXVsdCB2YWx1ZTogdW5zZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+PGI+aWQ9IjwvYj48ZW0+ dmFsdWU8L2VtPjxiPiI8L2I+PC9jb2RlPjwvZHQ+Cgk8ZGQ+VGhlIChYKUhUTUwvQ1NTIGlk IHRvIGFwcGx5IHRvIHRoZSBpbWFnZS48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJ PGRkPkF2YWlsYWJsZSB2YWx1ZXM6IGFueSB2YWxpZCAoWClIVE1ML0NTUyBpZC48L2RkPgoJ PGRkPkRlZmF1bHQgdmFsdWU6IHVuc2V0LjwvZGQ+CgoJPGR0Pjxjb2RlPjxiPmltYWdlX2lk PSI8L2I+PGVtPnZhbHVlPC9lbT48Yj4iPC9iPjwvY29kZT4gb3IgPGNvZGU+PGI+aW1hZ2Vf bmFtZT0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5UaGUg aW1hZ2UgdG8gZGlzcGxheS48L2RkPgoJPGRkPlJlcXVpcmVkOiBZZXMuPC9kZD4KCTxkZD5B dmFpbGFibGUgdmFsdWVzOiB0aGUgaW1hZ2UgaWQjIG9yIGltYWdlIG5hbWUsIGFzIGxpc3Rl ZCBpbiB0aGUgaW1hZ2UgdGFiLjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2YWx1ZTogdW5zZXQuPC9k ZD4KCgk8ZHQ+PGNvZGU+PGI+c2hvd19hbHQ9IjwvYj48ZW0+dmFsdWU8L2VtPjxiPiI8L2I+ PC9jb2RlPjwvZHQ+Cgk8ZGQ+V2hldGhlciB0byBzaG93IHRoZSBhbHRlcm5hdGUgdGV4dCBh cyBsaXN0ZWQgaW4gdGhlIGltYWdlIHRhYi48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2Rk PgoJPGRkPkF2YWlsYWJsZSB2YWx1ZXM6IDxjb2RlPjxiPnllczwvYj48L2NvZGU+IG9yIDxj b2RlPjxiPm5vPC9iPjwvY29kZT4uPC9kZD4KCTxkZD5EZWZhdWx0IHZhbHVlOiA8Y29kZT48 Yj55ZXM8L2I+PC9jb2RlPi48L2RkPgoKCTxkdD48Y29kZT48Yj5zaG93X3RpdGxlPSI8L2I+ PGVtPnZhbHVlPC9lbT48Yj4iPC9iPjwvY29kZT48L2R0PgoJPGRkPldoZXRoZXIgdG8gc2hv dyB0aGUgY2FwdGlvbiwgYXMgbGlzdGVkIGluIHRoZSBpbWFnZSB0YWIsIGFzIHRoZSBpbWFn ZSYjODIxNztzIHRpdGxlLjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZh aWxhYmxlIHZhbHVlczogPGNvZGU+PGI+eWVzPC9iPjwvY29kZT4gb3IgPGNvZGU+PGI+bm88 L2I+PC9jb2RlPi48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IDxjb2RlPjxiPnllczwvYj48 L2NvZGU+LjwvZGQ+CgoJPGR0Pjxjb2RlPjxiPnR5cGU9IjwvYj48ZW0+aW1hZ2UgdHlwZTwv ZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5UaGUga2luZCBvZiBpbWFnZSB0byBkaXNw bGF5LjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxhYmxlIHZhbHVl czogPGNvZGU+PGI+aW1hZ2U8L2I+PC9jb2RlPiAoZGVmYXVsdCksCgk8Y29kZT48Yj50aHVt Ym5haWw8L2I+PC9jb2RlPiwgYW5kIDxjb2RlPjxiPnBvcHVwPC9iPjwvY29kZT4uIFRoZSBw YXJhbWV0ZXIKCTxjb2RlPjxiPmFydGljbGU8L2I+PC9jb2RlPiBoYXMgYmVlbiBkZXByZWNh dGVkLjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2YWx1ZTogdW5zZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+ PGI+dXJsPSI8L2I+PGVtPndlYnBhZ2UgdXJsPC9lbT48Yj4iPC9iPjwvY29kZT48L2R0PgoJ PGRkPldlYnNpdGUgdXJsLCBvciBhcnRpY2xlIGlkIywgdG8gbWFrZSB0aGUgaW1hZ2UgbGlu ayB0by48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2YWx1 ZXM6IHVybCBhZGRyZXNzIG9yIGFydGljbGUgaWQjLjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2YWx1 ZTogdW5zZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+PGI+d3JhcHRhZz0iPC9iPjxlbT52YWx1ZTwv ZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5UaGUgKFgpSFRNTCB0YWcgdG8gd3JhcCBh cm91bmQgdGhlIGltYWdlIChvciB0aGUgbGlzdCwgaWYgdXNpbmcgbXVsdGlwbGUgaW1hZ2Vz KS48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2YWx1ZXM6 IGFueSB2YWxpZCAoWClIVE1MIGVsZW1lbnQgbmFtZS4gRm9yIGV4YW1wbGU6IDxjb2RlPjxi PnA8L2I+PC9jb2RlPi48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IHVuc2V0LjwvZGQ+CgoJ PGR0Pjxjb2RlPjxiPnhodG1sPSI8L2I+PGVtPnZhbHVlPC9lbT48Yj4iPC9iPjwvY29kZT48 L2R0PgoJPGRkPldoZXRoZXIgdGhlIHRhZyBvdXRwdXRzIHhodG1sIG9yIGh0bWwuPC9kZD4K CTxkZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiA8Y29kZT48 Yj55ZXM8L2I+PC9jb2RlPiBvciA8Y29kZT48Yj5ubzwvYj48L2NvZGU+LjwvZGQ+Cgk8ZGQ+ RGVmYXVsdCB2YWx1ZTogPGNvZGU+PGI+eWVzPC9iPjwvY29kZT4uPC9kZD4KPC9kbD4KCjwh LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0+Cgo8aDM+PGNvZGU+Jmx0O3R4cDp1cG1fYXJ0aWNsZV9pbWFnZSAv Jmd0OzwvY29kZT48L2gzPgoKPGRsPgoJPGR0Pjxjb2RlPjxiPmJyZWFrPSI8L2I+PGVtPnZh bHVlPC9lbT48Yj4iPC9iPjwvY29kZT48L2R0PgoJPGRkPklmIHVzaW5nIG11bHRpcGxlIGlt YWdlcyBhbmQgdGhlIHdyYXB0YWcgcGFyYW1ldGVyLCB0aGUgKFgpSFRNTCB0YWcgdG8gc2Vw YXJhdGUKCQlpbWFnZXMgd2l0aC48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRk PkF2YWlsYWJsZSB2YWx1ZXM6IGFueSB2YWxpZCAoWClIVE1MIGVsZW1lbnQgbmFtZSwgZm9y IGV4YW1wbGUsIDxjb2RlPjxiPmJyPC9iPjwvY29kZT4uPC9kZD4KCTxkZD5EZWZhdWx0IHZh bHVlOiB1bnNldC48L2RkPgoKCTxkdD48Y29kZT48Yj5icmVha19jbGFzcz0iPC9iPjxlbT52 YWx1ZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5JZiB1c2luZyBtdWx0aXBsZSBp bWFnZXMgYW5kIHRoZSB3cmFwdGFnIHBhcmFtZXRlciwgdGhlIChYKUhUTUwvQ1NTIGNsYXNz IHRvIGFwcGx5IHRvIHRoZQoJYnJlYWt0YWcuPC9kZD4KCTxkZD5SZXF1aXJlZDogTm8uPC9k ZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiBhbnkgdmFsaWQgKFgpSFRNTC9DU1MgY2xhc3Mg bmFtZS48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IHVuc2V0LjwvZGQ+CgoJPGR0Pjxjb2Rl PjxiPmNsYXNzPSI8L2I+PGVtPmNsYXNzIG5hbWU8L2VtPjxiPiI8L2I+PC9jb2RlPjwvZHQ+ Cgk8ZGQ+VGhlIChYKUhUTUwvQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBpbWFnZSBvciB0 aGUgaW1hZ2UmIzgyMTc7cyB3cmFwdGFnLiBJZiBhIGxpc3QKCQlvZiBhcnRpY2xlIGltYWdl cywgdGhlbiB0aGUgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIGxpc3QmIzgyMTc7cyB3cmFwdGFn LjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxhYmxlIHZhbHVlczog YW55IHZhbGlkIChYKUhUTUwvQ1NTIGNsYXNzIG5hbWUuPC9kZD4KCTxkZD5EZWZhdWx0IHZh bHVlOiB1bnNldC48L2RkPgoKCTxkdD48Y29kZT48Yj5mb3JtPSI8L2I+PGVtPmZvcm0gbmFt ZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5DdXN0b21pemUgdGhlIGltYWdlIGRl dGFpbHMgb3V0cHV0LCBmb3IgdHlwZSA8Y29kZT48Yj5pbWFnZTwvYj48L2NvZGU+LjwvZGQ+ Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxhYmxlIHZhbHVlczogYW55IGV4 aXN0aW5nIGZvcm0mIzgyMTc7cyBuYW1lLjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2YWx1ZTogdW5z ZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+PGI+d3JhcGZvcm09IjwvYj48ZW0+Zm9ybSBuYW1lPC9l bT48Yj4iPC9iPjwvY29kZT48L2R0PgoJPGRkPkN1c3RvbWl6ZSB0aGUgYWRkaXRpb25hbCBv dXRwdXQgZm9yIGFydGljbGUgaW1hZ2UgbGlzdHMgKHVzZSB3aXRoIHVwbV9pbWdfbGlzdCku PC9kZD4KCTxkZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiBh bnkgZXhpc3RpbmcgZm9ybSYjODIxNztzIG5hbWUuPC9kZD4KCTxkZD5EZWZhdWx0IHZhbHVl OiB1bnNldC48L2RkPgoKCTxkdD48Y29kZT48Yj5pZD0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+ IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5UaGUgKFgpSFRNTC9DU1MgaWQgdG8gYXBwbHkgdG8g dGhlIGltYWdlLjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxhYmxl IHZhbHVlczogYW55IHZhbGlkIChYKUhUTUwvQ1NTIGlkLjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2 YWx1ZTogdW5zZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+PGI+bGltaXQ9IjwvYj48ZW0+dmFsdWU8 L2VtPjxiPiI8L2I+PC9jb2RlPjwvZHQ+Cgk8ZGQ+SWYgdXNpbmcgbXVsdGlwbGUgaW1hZ2Vz LCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzIHRvIHNob3cuPC9kZD4KCTxkZD5SZXF1 aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiBhbnkgd2hvbGUgbnVtYmVy LjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2YWx1ZTogPGNvZGU+PGI+MDwvYj48L2NvZGU+LjwvZGQ+ CgoJPGR0Pjxjb2RlPjxiPm9mZnNldD0iPC9iPjxlbT5pbnRlZ2VyPC9lbT48Yj4iPC9iPjwv Y29kZT48L2R0PgoJPGRkPklmIHVzaW5nIG11bHRpcGxlIGltYWdlcywgdGhlIG51bWJlciBv ZiBpbWFnZXMgdG8gc2tpcCAobm90IGRpc3BsYXkpIGluIHRoZSBsaXN0LjwvZGQ+Cgk8ZGQ+ UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxhYmxlIHZhbHVlczogYW55IHdob2xlIG51 bWJlci48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IDxjb2RlPjxiPjA8L2I+PC9jb2RlPi48 L2RkPgoKCTxkdD48Y29kZT48Yj5zaG93X2FsdD0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+Ijwv Yj48L2NvZGU+PC9kdD4KCTxkZD5XaGV0aGVyIHRvIHNob3cgdGhlIGFsdGVybmF0ZSB0ZXh0 IGFzIGxpc3RlZCBpbiB0aGUgaW1hZ2UgdGFiLjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwv ZGQ+Cgk8ZGQ+QXZhaWxhYmxlIHZhbHVlczogPGNvZGU+PGI+eWVzPC9iPjwvY29kZT4gb3Ig PGNvZGU+PGI+bm88L2I+PC9jb2RlPi48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IDxjb2Rl PjxiPnllczwvYj48L2NvZGU+LjwvZGQ+CgoJPGR0Pjxjb2RlPjxiPnNob3dfaGVpZ2h0PSI8 L2I+PGVtPnZhbHVlPC9lbT48Yj4iPC9iPjwvY29kZT48L2R0PgoJPGRkPldoZXRoZXIgdG8g aW5jbHVkZSB0aGUgaW1hZ2UgaGVpZ2h0IGluIHRoZSBpbWFnZSB0YWcgcmV0dXJuZWQuPC9k ZD4KCTxkZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiA8Y29k ZT48Yj55ZXM8L2I+PC9jb2RlPiBvciA8Y29kZT48Yj5ubzwvYj48L2NvZGU+LjwvZGQ+Cgk8 ZGQ+RGVmYXVsdCB2YWx1ZTogPGNvZGU+PGI+eWVzPC9iPjwvY29kZT4uPC9kZD4KCgk8ZHQ+ PGNvZGU+PGI+c2hvd190aXRsZT0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+IjwvYj48L2NvZGU+ PC9kdD4KCTxkZD5XaGV0aGVyIHRvIHNob3cgdGhlIGNhcHRpb24sIGFzIGxpc3RlZCBpbiB0 aGUgaW1hZ2UgdGFiLCBhcyB0aGUgaW1hZ2UmIzgyMTc7cyAoWClIVE1MIHRpdGxlIGF0dHJp YnV0ZS48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2YWx1 ZXM6IDxjb2RlPjxiPnllczwvYj48L2NvZGU+IG9yIDxjb2RlPjxiPm5vPC9iPjwvY29kZT4u PC9kZD4KCTxkZD5EZWZhdWx0IHZhbHVlOiA8Y29kZT48Yj55ZXM8L2I+PC9jb2RlPi48L2Rk PgoKCTxkdD48Y29kZT48Yj5zaG93X3dpZHRoPSI8L2I+PGVtPnZhbHVlPC9lbT48Yj4iPC9i PjwvY29kZT48L2R0PgoJPGRkPldoZXRoZXIgdG8gaW5jbHVkZSB0aGUgaW1hZ2Ugd2lkdGgg aW4gdGhlIGltYWdlIHRhZyByZXR1cm5lZC48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2Rk PgoJPGRkPkF2YWlsYWJsZSB2YWx1ZXM6IDxjb2RlPjxiPnllczwvYj48L2NvZGU+IG9yIDxj b2RlPjxiPm5vPC9iPjwvY29kZT4uPC9kZD4KCTxkZD5EZWZhdWx0IHZhbHVlOiA8Y29kZT48 Yj55ZXM8L2I+PC9jb2RlPi48L2RkPgoKCTxkdD48Y29kZT48Yj50eXBlPSI8L2I+PGVtPmlt YWdlIHR5cGU8L2VtPjxiPiI8L2I+PC9jb2RlPjwvZHQ+Cgk8ZGQ+VGhlIGtpbmQgb2YgaW1h Z2UgdG8gZGlzcGxheS48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWls YWJsZSB2YWx1ZXM6IDxjb2RlPjxiPmltYWdlPC9iPjwvY29kZT4sCgk8Y29kZT48Yj50aHVt Ym5haWw8L2I+PC9jb2RlPiwgYW5kIDxjb2RlPjxiPnBvcHVwPC9iPjwvY29kZT4uPC9kZD4K CTxkZD5EZWZhdWx0IHZhbHVlOiA8Y29kZT48Yj5pbWFnZTwvYj48L2NvZGU+LjwvZGQ+CgoJ PGR0Pjxjb2RlPjxiPnVybD0iPC9iPjxlbT53ZWJwYWdlIHVybDwvZW0+PGI+IjwvYj48L2Nv ZGU+PC9kdD4KCTxkZD5XZWJzaXRlIHVybCwgb3IgYXJ0aWNsZSBpZCMsIHRvIG1ha2UgdGhl IGltYWdlIGxpbmsgdG8uPC9kZD4KCTxkZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFp bGFibGUgdmFsdWVzOiB1cmwgYWRkcmVzcyBvciBhcnRpY2xlIGlkIy48L2RkPgoJPGRkPkRl ZmF1bHQgdmFsdWU6IHVuc2V0LjwvZGQ+CgoJPGR0Pjxjb2RlPjxiPndyYXB0YWc9IjwvYj48 ZW0+dmFsdWU8L2VtPjxiPiI8L2I+PC9jb2RlPjwvZHQ+Cgk8ZGQ+VGhlIChYKUhUTUwgdGFn IHRvIHdyYXAgYXJvdW5kIHRoZSBpbWFnZSAob3IgdGhlIGxpc3QsIGlmIHVzaW5nIG11bHRp cGxlIGltYWdlcykuPC9kZD4KCTxkZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFi bGUgdmFsdWVzOiBhbnkgdmFsaWQgKFgpSFRNTCBlbGVtZW50IG5hbWUsIGZvciBleGFtcGxl LCA8Y29kZT48Yj5wPC9iPjwvY29kZT4uPC9kZD4KCTxkZD5EZWZhdWx0IHZhbHVlOiB1bnNl dC48L2RkPgoKCTxkdD48Y29kZT48Yj54aHRtbD0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+Ijwv Yj48L2NvZGU+PC9kdD4KCTxkZD5XaGV0aGVyIHRoZSB0YWcgb3V0cHV0cyBYSFRNTCBvciBI VE1MLjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxhYmxlIHZhbHVl czogPGNvZGU+PGI+eWVzPC9iPjwvY29kZT4gb3IgPGNvZGU+PGI+bm88L2I+PC9jb2RlPi48 L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IDxjb2RlPjxiPnllczwvYj48L2NvZGU+LjwvZGQ+ CjwvZGw+Cgo8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgoKPGgzPjxjb2RlPiZsdDt0eHA6dXBtX2lmX2Fy dGljbGVfaW1hZ2UgLyZndDs8L2NvZGU+PC9oMz4KCjx1bD4KCTxsaT5EZXRlcm1pbmUgd2hl dGhlciBhbiBhcnRpY2xlIGltYWdlIGhhcyBiZWVuIGRlZmluZWQuPC9saT4KCTxsaT5Db25k aXRpb25hbCB3cmFwcGluZyB0YWcsIG5vIGF0dHJpYnV0ZXMuPC9saT4KPC91bD4KCgo8IS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPgoKPGgzPjxjb2RlPiZsdDt0eHA6dXBtX2lmX2FydGljbGVfaW1hZ2Vf bGlzdCAvJmd0OzwvY29kZT48L2gzPgoKPHVsPgoJPGxpPkRldGVybWluZSB3aGV0aGVyIG11 bHRpcGxlIGFydGljbGUgaW1hZ2VzIGhhdmUgYmVlbiBkZWZpbmVkLjwvbGk+Cgk8bGk+Q29u ZGl0aW9uYWwgd3JhcHBpbmcgdGFnLCBubyBhdHRyaWJ1dGVzLjwvbGk+CjwvdWw+CgoKPHA+ PGEgaHJlZj0iI3N0YXJ0IiB0aXRsZT0iSnVtcCBiYWNrIGNvbnRlbnRzIGxpc3QiPiYjODYx Nzs8L2E+PC9wPgoKCgo8aDIgaWQ9ImN1c3RvbS1zZWN0aW9uIj5DdXN0b21pemluZyBPdXRw dXQ8L2gyPgoKPHA+U3VwcGx5IHRoZSBpbWFnZSBpZCBvciBuYW1lLCBhbmQgdGhlIGZvcm0g dG8gYmUgdXNlZC4gQWx0ZXJuYXRlbHkgeW91IG1heSB1c2UgdGhlIHRhZ3MgYXMKY29udGFp bmluZyBvciB3cmFwcGluZyB0YWdzLiBGb3IgZXhhbXBsZTo8L3A+Cgo8cD48Y29kZT4mbHQ7 dHhwOnVwbV9pbWFnZSB0eXBlPSJpbWFnZSImZ3Q7Jmx0O3R4cDp1cG1faW1nX2NhcHRpb24g LyZndDsmbHQ7L3R4cDp1cG1faW1hZ2UmZ3Q7PC9jb2RlPjwvcD4KCjxwPlRoZSB0YWdzIGF2 YWlsYWJsZSB0byB5b3UgZnJvbSB3aXRoaW4gYSBmb3JtL3dyYXBwaW5nIHRhZyBhcmUgZmFp cmx5IHNlbGYtZXhwbGFuYXRvcnkuPC9wPgoKPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KCjxoMz48Y29k ZT4mbHQ7dHhwOnVwbV9pbWdfYWx0IC8mZ3Q7PC9jb2RlPjwvaDM+Cgo8cD5EZXNjcmlwdGlv bjogaW1hZ2UgYWx0ZXJuYXRlIHRleHQuPC9wPgoKPGRsPgoJPGR0Pjxjb2RlPjxiPmVzY2Fw ZT0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5XaGV0aGVy IHRvIGVzY2FwZSB0aGUgcmVzdWx0IHRvIG91dHB1dCB2YWxpZCBtYXJrdXAuPC9kZD4KCTxk ZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiA8Y29kZT48Yj5o dG1sPC9iPjwvY29kZT4gb3IgdW5zZXQuPC9kZD4KCTxkZD5EZWZhdWx0IHZhbHVlOiB1bnNl dC48L2RkPgo8L2RsPgoKPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KCjxoMz48Y29kZT4mbHQ7dHhwOnVw bV9pbWdfY2FwdGlvbiAvJmd0OzwvY29kZT48L2gzPgoKPHA+RGVzY3JpcHRpb246IGltYWdl IGNhcHRpb24uPC9wPgoKPGRsPgoJPGR0Pjxjb2RlPjxiPmNsYXNzPSI8L2I+PGVtPnZhbHVl PC9lbT48Yj4iPC9iPjwvY29kZT48L2R0PgoJPGRkPlRoZSAoWClIVE1ML0NTUyBjbGFzcyB0 byBhcHBseSB0byB0aGUgd3JhcHRhZy48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJ PGRkPkF2YWlsYWJsZSB2YWx1ZXM6IGFueSB2YWxpZCBDU1MgY2xhc3MgbmFtZSBvciB1bnNl dC48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IHVuc2V0LjwvZGQ+CgoJPGR0Pjxjb2RlPjxi PmVzY2FwZT0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5X aGV0aGVyIHRvIGVzY2FwZSB0aGUgcmVzdWx0IHRvIG91dHB1dCB2YWxpZCBtYXJrdXAuPC9k ZD4KCTxkZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiA8Y29k ZT48Yj5odG1sPC9iPjwvY29kZT4gb3IgdW5zZXQuPC9kZD4KCTxkZD5EZWZhdWx0IHZhbHVl OiB1bnNldC48L2RkPgoKCTxkdD48Y29kZT48Yj5sYWJlbD0iPC9iPjxlbT52YWx1ZTwvZW0+ PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5UaGlzIHN0cmluZyB3aWxsIGJlIHByZXBlbmRl ZCB0byB0aGUgY2FwdGlvbi48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2 YWlsYWJsZSB2YWx1ZXM6IGFueSB0ZXh0IG9yIHVuc2V0LjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2 YWx1ZTogdW5zZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+PGI+bGFiZWx0YWc9IjwvYj48ZW0+dmFs dWU8L2VtPjxiPiI8L2I+PC9jb2RlPjwvZHQ+Cgk8ZGQ+VGhlIChYKUhUTUwgdGFnIHRvIGVu Y2xvc2UgdGhlIGxhYmVsLjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZh aWxhYmxlIHZhbHVlczogYW55IHZhbGlkIChYKUhUTUwgdGFnIG9yIHVuc2V0LjwvZGQ+Cgk8 ZGQ+RGVmYXVsdCB2YWx1ZTogdW5zZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+PGI+d3JhcHRhZz0i PC9iPjxlbT52YWx1ZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5UaGUgKFgpSFRN TCB0YWcgdG8gZW5jbG9zZSB0aGUgY2FwdGlvbi48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48 L2RkPgoJPGRkPkF2YWlsYWJsZSB2YWx1ZXM6IGFueSB2YWxpZCAoWClIVE1MIHRhZyBvciB1 bnNldC48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IHVuc2V0LjwvZGQ+CjwvZGw+Cgo8IS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tPgoKPGgzPjxjb2RlPiZsdDt0eHA6dXBtX2ltZ19jYXRlZ29yeSAvJmd0 OzwvY29kZT48L2gzPgoKPHA+RGVzY3JpcHRpb246IHRoZSBjYXRlZ29yeSB0aGUgaW1hZ2Ug YmVsb25ncyB0by48L3A+Cgo8ZGw+Cgk8ZHQ+PGNvZGU+PGI+Y2xhc3M9IjwvYj48ZW0+dmFs dWU8L2VtPjxiPiI8L2I+PC9jb2RlPjwvZHQ+Cgk8ZGQ+VGhlIChYKUhUTUwvQ1NTIGNsYXNz IHRvIGFwcGx5IHRvIHRoZSB3cmFwdGFnLjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+ Cgk8ZGQ+QXZhaWxhYmxlIHZhbHVlczogYW55IHZhbGlkIENTUyBjbGFzcyBuYW1lIG9yIHVu c2V0LjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2YWx1ZTogdW5zZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+ PGI+bGFiZWw9IjwvYj48ZW0+dmFsdWU8L2VtPjxiPiI8L2I+PC9jb2RlPjwvZHQ+Cgk8ZGQ+ VGhpcyBzdHJpbmcgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGNhcHRpb24uPC9kZD4KCTxk ZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiBhbnkgdGV4dCBv ciB1bnNldC48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IHVuc2V0LjwvZGQ+CgoJPGR0Pjxj b2RlPjxiPmxhYmVsdGFnPSI8L2I+PGVtPnZhbHVlPC9lbT48Yj4iPC9iPjwvY29kZT48L2R0 PgoJPGRkPlRoZSAoWClIVE1MIHRhZyB0byBlbmNsb3NlIHRoZSBsYWJlbC48L2RkPgoJPGRk PlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2YWx1ZXM6IGFueSB2YWxpZCAo WClIVE1MIHRhZyBvciB1bnNldC48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IHVuc2V0Ljwv ZGQ+CgoJPGR0Pjxjb2RlPjxiPnRpdGxlPSI8L2I+PGVtPnZhbHVlPC9lbT48Yj4iPC9iPjwv Y29kZT48L2R0PgoJPGRkPlRoZSAoWClIVE1MIHRhZyB0byBlbmNsb3NlIHRoZSBsYWJlbC48 L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2YWx1ZXM6IDxj b2RlPjxiPjA8L2I+PC9jb2RlPiAoemVyby9vZmYpIG9yIDxjb2RlPjxiPjE8L2I+PC9jb2Rl PiAob25lL29uKS48L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IDxjb2RlPjxiPjA8L2I+PC9j b2RlPi48L2RkPgoKCTxkdD48Y29kZT48Yj53cmFwdGFnPSI8L2I+PGVtPnZhbHVlPC9lbT48 Yj4iPC9iPjwvY29kZT48L2R0PgoJPGRkPlRoZSAoWClIVE1MIHRhZyB0byBlbmNsb3NlIHRo ZSBjYXB0aW9uLjwvZGQ+Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxhYmxl IHZhbHVlczogYW55IHZhbGlkIChYKUhUTUwgdGFnIG9yIHVuc2V0LjwvZGQ+Cgk8ZGQ+RGVm YXVsdCB2YWx1ZTogdW5zZXQuPC9kZD4KPC9kbD4KCjwhLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+Cgo8aDM+ PGNvZGU+Jmx0O3R4cDp1cG1faW1nX2RhdGUgLyZndDs8L2NvZGU+PC9oMz4KCjxwPkRlc2Ny aXB0aW9uOiB0aGUgZGF0ZSB0aGUgaW1hZ2Ugd2FzIHVwbG9hZGVkLjwvcD4KCjxkbD4KCTxk dD48Y29kZT48Yj5mb3JtYXQ9IjwvYj48ZW0+dmFsdWU8L2VtPjxiPiI8L2I+PC9jb2RlPjwv ZHQ+Cgk8ZGQ+PC9kZD4KCTxkZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFibGUg dmFsdWVzOiBhbnkgdmFsaWQgPGEgaHJlZj0iaHR0cDovL3BocC5uZXQvc3RyZnRpbWUiPnN0 cmZ0aW1lKCk8L2E+IHN0cmluZyBvciA8Y29kZT48Yj5zaW5jZTwvYj48L2NvZGU+LjwvZGQ+ Cgk8ZGQ+RGVmYXVsdCB2YWx1ZTogdW5zZXQgKHVzZSAiRGF0ZSBmb3JtYXQiIHByZWZlcmVu Y2UpLjwvZGQ+CgoJPGR0Pjxjb2RlPjxiPmdtdD0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+Ijwv Yj48L2NvZGU+PC9kdD4KCTxkZD5XaGV0aGVyIHRvIGZvcm1hdCBkYXRldGltZSBhY2NvcmRp bmcgR01UIHRpbWUuPC9kZD4KCTxkZD5SZXF1aXJlZDogTm8uPC9kZD4KCTxkZD5BdmFpbGFi bGUgdmFsdWVzOiA8Y29kZT48Yj4wPC9iPjwvY29kZT4gKG5vLCB1c2UgIlRpbWUgWm9uZSIg cHJlZmVyZW5jZSkgb3IgPGNvZGU+PGI+MTwvYj48L2NvZGU+ICh5ZXMpLjwvZGQ+Cgk8ZGQ+ RGVmYXVsdCB2YWx1ZTogPGNvZGU+PGI+MDwvYj48L2NvZGU+IChubyk8L2RkPgoKCTxkdD48 Y29kZT48Yj5sYW5nPSI8L2I+PGVtPnZhbHVlPC9lbT48Yj4iPC9iPjwvY29kZT48L2R0PgoJ PGRkPkZvcm1hdCB0aW1lIHN0cmluZyBhY2NvcmRpbmcgdG8gc3BlY2lmaWVkIGxhbmd1YWdl IGxvY2FsZS48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2 YWx1ZXM6IGFueSB2YWxpZCA8L2RkPgoJPGRkPkRlZmF1bHQgdmFsdWU6IHVuc2V0ICh1c2Ug Ikxhbmd1YWdlIiBsb2NhbGUgcHJlZmVyZW5jZSkuPC9kZD4KPC9kbD4KCjwhLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0+Cgo8aDM+PGNvZGU+Jmx0O3R4cDp1cG1faW1nX2Z1bGxfaGVpZ2h0IC8mZ3Q7PC9j b2RlPjwvaDM+Cgo8cD5EZXNjcmlwdGlvbjogZnVsbC1zaXplIGltYWdlIGhlaWdodC48L3A+ Cgo8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tPgoKPGgzPjxjb2RlPiZsdDt0eHA6dXBtX2ltZ19mdWxsX3Vy bCAvJmd0OzwvY29kZT48L2gzPgoKPHA+RGVzY3JpcHRpb246IGZ1bGwtc2l6ZSBpbWFnZSB1 cmwuPC9wPgoKPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KCjxoMz48Y29kZT4mbHQ7dHhwOnVwbV9pbWdf ZnVsbF93aWR0aCAvJmd0OzwvY29kZT48L2gzPgoKPHA+RGVzY3JpcHRpb246IGZ1bGwtc2l6 ZSBpbWFnZSB3aWR0aC48L3A+Cgo8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgoKPGgzPjxjb2RlPiZsdDt0 eHA6dXBtX2ltZ19ocmVmIC8mZ3Q7PC9jb2RlPjwvaDM+Cgo8cD5EZXNjcmlwdGlvbjogd2Vi c2l0ZSB1cmwgdG8gbWFrZSB0aGUgaW1hZ2UgbGluayB0bywgYXMgcGFzc2VkIGJ5IHRoZSB1 cmwgcGFyYW1ldGVyLjwvcD4KCjxwPklmIHVzZWQgYXMgYSB3cmFwcGluZyB0YWcsIGl0IHdp bGwgdHVybiB3aGF0ZXZlciBpdCBzdXJyb3VuZHMgaW50byBhIGxpbmsuPC9wPgoKPGRsPgoJ PGR0Pjxjb2RlPjxiPmNsYXNzPSI8L2I+PGVtPnZhbHVlPC9lbT48Yj4iPC9iPjwvY29kZT48 L2R0PgoJPGRkPlRoZSAoWClIVE1ML0NTUyBjbGFzcyB0byBhcHBseSB0byB0aGUgd3JhcHRh Zy48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2YWx1ZXM6 IGFueSB2YWxpZCBDU1MgY2xhc3MgbmFtZSBvciB1bnNldC48L2RkPgoJPGRkPkRlZmF1bHQg dmFsdWU6IHVuc2V0LjwvZGQ+CgoJPGR0Pjxjb2RlPjxiPmVzY2FwZT0iPC9iPjxlbT52YWx1 ZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5XaGV0aGVyIHRvIGVzY2FwZSB0aGUg cmVzdWx0IHRvIG91dHB1dCB2YWxpZCBtYXJrdXAuPC9kZD4KCTxkZD5SZXF1aXJlZDogTm8u PC9kZD4KCTxkZD5BdmFpbGFibGUgdmFsdWVzOiA8Y29kZT48Yj5odG1sPC9iPjwvY29kZT4g b3IgdW5zZXQuPC9kZD4KCTxkZD5EZWZhdWx0IHZhbHVlOiB1bnNldC48L2RkPgoKCTxkdD48 Y29kZT48Yj5sYWJlbD0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+IjwvYj48L2NvZGU+PC9kdD4K CTxkZD5UaGlzIHN0cmluZyB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgY2FwdGlvbi48L2Rk PgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2YWx1ZXM6IGFueSB0 ZXh0IG9yIHVuc2V0LjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2YWx1ZTogdW5zZXQuPC9kZD4KCgk8 ZHQ+PGNvZGU+PGI+bGFiZWx0YWc9IjwvYj48ZW0+dmFsdWU8L2VtPjxiPiI8L2I+PC9jb2Rl PjwvZHQ+Cgk8ZGQ+VGhlIChYKUhUTUwgdGFnIHRvIGVuY2xvc2UgdGhlIGxhYmVsLjwvZGQ+ Cgk8ZGQ+UmVxdWlyZWQ6IE5vLjwvZGQ+Cgk8ZGQ+QXZhaWxhYmxlIHZhbHVlczogYW55IHZh bGlkIChYKUhUTUwgdGFnIG9yIHVuc2V0LjwvZGQ+Cgk8ZGQ+RGVmYXVsdCB2YWx1ZTogdW5z ZXQuPC9kZD4KCgk8ZHQ+PGNvZGU+PGI+d3JhcHRhZz0iPC9iPjxlbT52YWx1ZTwvZW0+PGI+ IjwvYj48L2NvZGU+PC9kdD4KCTxkZD5UaGUgKFgpSFRNTCB0YWcgdG8gZW5jbG9zZSB0aGUg Y2FwdGlvbi48L2RkPgoJPGRkPlJlcXVpcmVkOiBOby48L2RkPgoJPGRkPkF2YWlsYWJsZSB2 YWx1ZXM6IGFueSB2YWxpZCAoWClIVE1MIHRhZyBvciB1bnNldC48L2RkPgoJPGRkPkRlZmF1 bHQgdmFsdWU6IHVuc2V0LjwvZGQ+CjwvZGw+Cgo8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgoKPGgzPjxj b2RlPiZsdDt0eHA6dXBtX2ltZ19pZCAvJmd0OzwvY29kZT48L2gzPgoKPHA+RGVzY3JpcHRp b246IGltYWdlIGlkIG51bWJlci48L3A+Cgo8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgoKPGgzPjxjb2Rl PiZsdDt0eHA6dXBtX2ltZ19saXN0IC8mZ3Q7PC9jb2RlPjwvaDM+Cgo8cD5EZXNjcmlwdGlv bjogYXJ0aWNsZSBpbWFnZSBsaXN0LiA8c3Ryb25nPk9ubHkgYXZhaWxhYmxlIHRvCgk8Y29k ZT4mbHQ7dHhwOnVwbV9hcnRpY2xlX2ltYWdlIC8mZ3Q7PC9jb2RlPiYjODIxNztzIDxjb2Rl PndyYXBmb3JtPC9jb2RlPjwvc3Ryb25nPi48L3A+Cgo8IS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgoKPGgz Pjxjb2RlPiZsdDt0eHA6dXBtX2ltZ19uYW1lIC8mZ3Q7PC9jb2RlPjwvaDM+Cgo8cD5EZXNj cmlwdGlvbjogaW1hZ2UgbmFtZS48L3A+Cgo8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPgoKPGgzPjxjb2Rl PiZsdDt0eHA6dXBtX2ltZ190aHVtYl9oZWlnaHQgLyZndDs8L2NvZGU+PC9oMz4KCjxwPkRl c2NyaXB0aW9uOiB0aHVtYm5haWwgaW1hZ2UgaGVpZ2h0LjwvcD4KCjwhLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0+Cgo8aDM+PGNvZGU+Jmx0O3R4cDp1cG1faW1nX3RodW1iX3VybCAvJmd0OzwvY29kZT48 L2gzPgoKPHA+RGVzY3JpcHRpb246IHRodW1ibmFpbCBpbWFnZSB1cmwuPC9wPgoKPCEtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLT4KCjxoMz48Y29kZT4mbHQ7dHhwOnVwbV9pbWdfdGh1bWJfd2lkdGggLyZn dDs8L2NvZGU+PC9oMz4KCjxwPkRlc2NyaXB0aW9uOiB0aHVtYm5haWwgaW1hZ2Ugd2lkdGgu PC9wPgoKPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KCjxwPjxhIGhyZWY9IiNzdGFydCIgdGl0bGU9Ikp1 bXAgYmFjayBjb250ZW50cyBsaXN0Ij4mIzg2MTc7PC9hPjwvcD4KCgoKPGgyIGlkPSJjcmVk aXQtc2VjdGlvbiI+Q3JlZGl0IGFuZCBEZXZlbG9wZXIgTm90ZXM8L2gyPgoKPHA+VGhlIGNv ZGUgZnJvbSB0aGlzIHBsdWdpbiBpcyBub3QgZW50aXJlbHkgJiM4MjIwO2Zyb20gc2NyYXRj aCYjODIyMTs6IEkgbWFkZSB1c2Ugb2YgY29kZQphbHJlYWR5IGV4aXN0aW5nIGluIFRleHRw YXR0ZXJuLiBUaGlzIG1hZGUgaXQgYSBsb3QgZWFzaWVyIGZvciBtZSB0byBjcmVhdGUgd2hh dCBJIGhvcGUgaXMKYSBuZWFyLXNlYW1sZXNzIHBsdWdpbi4gSSBkb24mIzgyMTc7dCBrbm93 IGZvciBjZXJ0YWluIHdob20gd3JvdGUgdGhlIHBhcnRzIEkgdXNlZCwKdGhvdWdoIEkgc3Vz cGVjdCBpdCBpcyBsYXJnZWx5IDxhIGhyZWY9Imh0dHA6Ly90ZXh0aXNtLmNvbS8iPkRlYW48 L2E+J3Mgd29yay48L3A+Cgo8cD5QYXJ0IG9mIHRoZSBtdWx0aXBsZSBhcnRpY2xlIGltYWdl cyBzdXBwb3J0IHdhcyBvcmlnaW5hbGx5IGJvcnJvd2VkIGZyb20KPGEgaHJlZj0iaHR0cDov L3RocmVzaG9sZHN0YXRlLmNvbS9zb2Z0d2FyZS8zNjk5L3plbV9hcnRpY2xlX2ltYWdlIj56 ZW1fYXJ0aWNsZV9pbWFnZTwvYT4uPC9wPiI7czozOiJtZDUiO3M6MzI6ImJkOGQ2NDkwNWMy YzJjNjZlODE5ODg0NmI4MDRhNDMxIjt9