{
    "id": "event_dd82e0f403ebe6f1",
    "timestamp": 1777284850,
    "branch_id": "main",
    "parent_event_id": "event_66151d81c952b430",
    "type": "patch_apply",
    "label": "Autorisation appareil permanente par mot de passe",
    "source": "patch",
    "author": "CNOC",
    "session_id": "43305eb2706f6eee2531a5a173355a18",
    "payload": [
        {
            "path": "pointages/admin.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 7567,
                "sha1": "d7fcf5ce40de09e8276aa42aa6c1c9720d5467c2",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvYWRtaW4ucGhwIHwgUHJvdMOoZ2UgbOKAmWFjY8OocyBhZG1pbmlzdHJhdGV1ciB2aWEgUElOL3Nlc3Npb24vSVAgYXV0b3Jpc8OpZSBldCBwZXJtZXQgbOKAmWFqb3V0IGTigJl1biBzYWxhcmnDqSBlbiBiYXNlLiB8IEV4cG9zZTogYXVjdW4gfCBEw6lwZW5kIGRlOiBjb25maWcucGhwLCBpbmRleC5waHAsIGNvbm5leGlvbi5waHAgfCBJbXBhY3RlOiDDqXRhdCBkZSBzZXNzaW9uLCBhY2PDqHMgw6AgbOKAmWludGVyZmFjZSwgaW5zZXJ0aW9uIEJERCwgcmVkaXJlY3Rpb24gfCBUYWJsZXM6IHBvc19pcF9hdXRob3JpemF0aW9ucyhpcF9hZGRyZXNzLCBhdXRob3JpemVkX3VudGlsKSwgel9wdGdfYXFwX3V0aWxpc2F0ZXVycyhOb20sIFByZW5vbSwgRGF0ZURlTmFpc3NhbmNlLCBSb2xlLCBFbWFpbCwgQ29kZVBpbiwgRGF0ZURlQ3JlYXRpb24sIFN0YXR1dCkgKi8KCgoKc2Vzc2lvbl9zdGFydCgpOwoKaWYgKCFpc3NldCgkX1NFU1NJT05bJ3Bpbl92ZXJpZmllJ10pIHx8ICRfU0VTU0lPTlsncGluX3ZlcmlmaWUnXSAhPT0gdHJ1ZSkgewogICAgaGVhZGVyKCdMb2NhdGlvbjogaW5kZXgucGhwJyk7IC8vIFJlZGlyaWdlciB2ZXJzIGxhIHBhZ2UgZGUgc2Fpc2llIGR1IFBJTgogICAgZXhpdDsKfQoKLy8gQ29ubmV4aW9uIMOgIGxhIGJhc2UgZGUgZG9ubsOpZXMKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsgLy8gQXNzdXJlei12b3VzIHF1ZSBjZSBmaWNoaWVyIGV4aXN0ZSBldCBjb250aWVudCBsZXMgYm9ubmVzIGluZm9ybWF0aW9ucyBkZSBjb25uZXhpb24KCi8vIFbDqXJpZmljYXRpb24gZGUgbCdhdXRvcmlzYXRpb24gZCdhY2PDqHMKJGlwX2FkZHJlc3MgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKJGlzQXV0aG9yaXplZCA9IGZhbHNlOwoKLy8gVXRpbGlzZXogbCdvYmpldCBQRE8gZMOpasOgIGNyw6nDqSBkYW5zIGNvbmZpZy5waHAKZ2xvYmFsICRwZG87CgppZiAoaXNzZXQoJF9TRVNTSU9OWydhdXRob3JpemVkJ10pICYmICRfU0VTU0lPTlsnYXV0aG9yaXplZCddID09PSB0cnVlKSB7CiAgICAvLyBMJ3V0aWxpc2F0ZXVyIGVzdCBkw6lqw6AgYXV0b3Jpc8OpIHZpYSBsYSBzZXNzaW9uCiAgICAkaXNBdXRob3JpemVkID0gdHJ1ZTsKfSBlbHNlIHsKICAgIC8vIFbDqXJpZmljYXRpb24gZGUgbCdhdXRvcmlzYXRpb24gZGUgbCdJUCBkYW5zIGxhIGJhc2UgZGUgZG9ubsOpZXMKICAgIHRyeSB7CiAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwb3NfaXBfYXV0aG9yaXphdGlvbnMgV0hFUkUgaXBfYWRkcmVzcyA9IDppcF9hZGRyZXNzIEFORCBhdXRob3JpemVkX3VudGlsID4gTk9XKCkiKTsKICAgICAgICAkc3RtdC0+ZXhlY3V0ZShbJzppcF9hZGRyZXNzJyA9PiAkaXBfYWRkcmVzc10pOwogICAgICAgICRjb3VudCA9ICRzdG10LT5mZXRjaENvbHVtbigpOwogICAgICAgIAogICAgICAgIGlmICgkY291bnQgPiAwKSB7CiAgICAgICAgICAgIC8vIEwnYWRyZXNzZSBJUCBlc3QgYXV0b3Jpc8OpZQogICAgICAgICAgICAkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSA9IHRydWU7CiAgICAgICAgICAgICRpc0F1dGhvcml6ZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH0gY2F0Y2ggKFBET0V4Y2VwdGlvbiAkZSkgewogICAgICAgIC8vIEVuIGNhcyBkJ2VycmV1ciBkZSBiYXNlIGRlIGRvbm7DqWVzLCBhZmZpY2hleiBsJ2VycmV1cgogICAgICAgIGVjaG8gIkVycmV1ciBkZSBiYXNlIGRlIGRvbm7DqWVzIDogIiAuICRlLT5nZXRNZXNzYWdlKCk7CiAgICAgICAgZXhpdDsKICAgIH0KfQoKLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2VzdCBwYXMgYXV0b3Jpc8OpLCByZWRpcmlnZXotbGUgdmVycyBjb25uZXhpb24ucGhwCmlmICghJGlzQXV0aG9yaXplZCkgewogICAgaGVhZGVyKCdMb2NhdGlvbjogY29ubmV4aW9uLnBocD9hY2Nlc3M9cmVmdXNlZCcpOwogICAgZXhpdDsKfQoKPz4KPCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCjxoZWFkPgoKPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Cgo8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgoKCgoKCjx0aXRsZT5Bam91dCBub3V2ZWF1IHNhbGFyacOpPC90aXRsZT4KCjwhLS0KCgoKVGVtcGxhdGUgMjA4OSBNZXRlb3IKCgoKaHR0cDovL3d3dy50b29wbGF0ZS5jb20vdmlldy8yMDg5LW1ldGVvcgoKCgotLT4KCjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgoKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KCjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iYXBwbGUtdG91Y2gtaWNvbi5wbmciPgoKCgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9ib290c3RyYXAubWluLmNzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9ib290c3RyYXAtdGhlbWUubWluLmNzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9mb250QXdlc29tZS5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvZm9udEF3ZXNvbWUuY3NzIj4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvaGVyby1zbGlkZXIuY3NzIj4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvdG9vcGxhdGUtc3R5bGUuY3NzIj4KPD9waHAKJGNzc1BhdGggPSBfX0RJUl9fIC4gJy9jc3Mvc3R5bGUuY3NzJzsKJGNzc1ZlcnNpb24gPSBmaWxlX2V4aXN0cygkY3NzUGF0aCkgPyBmaWxlbXRpbWUoJGNzc1BhdGgpIDogdGltZSgpOwo/Pgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zdHlsZS5jc3M/dj08P3BocCBlY2hvIChpbnQpJGNzc1ZlcnNpb247ID8+Ij4KCgoKPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FuczozMDAsNDAwLDYwMCw3MDAsODAwIiByZWw9InN0eWxlc2hlZXQiPgoKCgo8c2NyaXB0IHNyYz0ianMvdmVuZG9yL21vZGVybml6ci0yLjguMy1yZXNwb25kLTEuNC4yLm1pbi5qcyI+PC9zY3JpcHQ+Cgo8L2hlYWQ+Cgo8Ym9keSBjbGFzcz0icGFnZS1hZG1pbiB0aGVtZS1kYXJrIj4KCgoKCgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0icGFnZS1zZWN0aW9uIj4KCjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+Cgo8ZGl2IGNsYXNzPSJyb3ciPgoKPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KCjxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGluZyI+Cgo8aDE+QWpvdXQgbm91dmVsIGVtcGxvecOpPC9oMT4KCgoKCgo8aDQ+PC9oND48ZGl2IGNsYXNzPSJsaW5lLWRlYyI+PC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgCgoKCjxjZW50ZXI+PGZvbnQgY29sb3I9IndoaXRlIj4KCgoKCgoKCgoKCgo8IS0tIEZvcm11bGFpcmUgcG91ciBham91dGVyIHVuIGVtcGxvecOpIC0tPgoKPGJyPgo8Zm9udCBjb2xvcj0iYmxhY2siPgo8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iIj4KPCEtLSBBam91dGVyIGxlcyBjaGFtcHMgbWFucXVhbnRzIGljaSAtLT4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5vbSIgcGxhY2Vob2xkZXI9Ik5vbSIgcmVxdWlyZWQ+PGJyPjxicj4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InByZW5vbSIgcGxhY2Vob2xkZXI9IlByw6lub20iIHJlcXVpcmVkPjxicj48YnI+Cgo8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImRhdGVEZU5haXNzYW5jZSIgbmFtZT0iZGF0ZURlTmFpc3NhbmNlIiBvbmlucHV0PSJmb3JtYXRlckRhdGUodGhpcykiIGlucHV0bW9kZT0ibnVtZXJpYyIgbWF4bGVuZ3RoPSIxMCIgcGxhY2Vob2xkZXI9IkpKL01NL0FBQUEiPjxicj48YnI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyb2xlIiBwbGFjZWhvbGRlcj0iUm9sZSIgPjxicj48YnI+CjxpbnB1dCB0eXBlPSJlbWFpbCIgbmFtZT0iZW1haWwiIHBsYWNlaG9sZGVyPSJFbWFpbCIgPjxicj48YnI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjb2RlUGluIiBwbGFjZWhvbGRlcj0iQ29kZSBQaW4iID48YnI+PGJyPgoKPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iQWpvdXRlciI+CjwvZm9udD4KPC9mb3JtPgoKCgoKCgoKPGJyPjxicj48YnI+Cgo8Zm9udCBjb2xvcj0id2hpdGUiPgoKPD9waHAKaWYgKGlzc2V0KCRfUE9TVFsnc3VibWl0J10pKSB7CiAgICAkZGF0ZVBhcnRzID0gZXhwbG9kZSgnLycsICRfUE9TVFsnZGF0ZURlTmFpc3NhbmNlJ10pOwogICAgJGRhdGVEZU5haXNzYW5jZUZvcm1hdHRlZCA9ICRkYXRlUGFydHNbMl0gLiAnLScgLiAkZGF0ZVBhcnRzWzFdIC4gJy0nIC4gJGRhdGVQYXJ0c1swXTsKCiAgICAvLyBSw6ljdXDDqXJlciBsZXMgZG9ubsOpZXMgZHUgZm9ybXVsYWlyZQogICAgJG5vbSA9ICRfUE9TVFsnbm9tJ107CiAgICAkcHJlbm9tID0gJF9QT1NUWydwcmVub20nXTsKICAgICRkYXRlRGVOYWlzc2FuY2UgPSAkX1BPU1RbJ2RhdGVEZU5haXNzYW5jZSddOwogICAgJHJvbGUgPSAkX1BPU1RbJ3JvbGUnXTsKICAgICRlbWFpbCA9ICRfUE9TVFsnZW1haWwnXTsKICAgICRjb2RlUGluID0gJF9QT1NUWydjb2RlUGluJ107CiAgICAKICAgIC8vIENvbnN0cnVpcmUgZXQgZXjDqWN1dGVyIGxhIHJlcXXDqnRlIElOU0VSVAogICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyB6X3B0Z19hcXBfdXRpbGlzYXRldXJzIChOb20sIFByZW5vbSwgRGF0ZURlTmFpc3NhbmNlLCBSb2xlLCBFbWFpbCwgQ29kZVBpbiwgRGF0ZURlQ3JlYXRpb24sIFN0YXR1dCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCBOT1coKSwgJ2FjdGlmJykiKTsKICAgICRzdG10LT5leGVjdXRlKFskbm9tLCAkcHJlbm9tLCAkZGF0ZURlTmFpc3NhbmNlRm9ybWF0dGVkLCAkcm9sZSwgJGVtYWlsLCAkY29kZVBpbl0pOwogICAgCiAgICAvLyBSZWRpcmlnZXIgYXZlYyB0b2FzdCAoYWZmaWNow6kgc3VyIGluZGV4LnBocCkKICAgICR0b2FzdE1lc3NhZ2UgPSByYXd1cmxlbmNvZGUoJ0VtcGxvecOpIGFqb3V0w6kgYXZlYyBzdWNjw6hzJyk7CiAgICBlY2hvICI8c2NyaXB0PndpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ2luZGV4LnBocD90b2FzdD17JHRvYXN0TWVzc2FnZX0mdG9hc3RUeXBlPXN1Y2Nlc3MnOzwvc2NyaXB0PiI7Cn0KPz4KCgoKCgoKPGJyPjxicj48YnI+PGJyPjxicj4KCjxmb250IGNvbG9yPSJibGFjayI+Cgo8YnV0dG9uIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ2luZGV4LnBocCc7Ij4gUmV0b3VybmVyIHBhZ2UgZW1wbG95w6lzIDwvYnV0dG9uPgoKPC9mb250PgoKCgoKCjwvZm9udD4KCjwvY2VudGVyPgoKPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CgoKCjxwPjxhIGhyZWY9ImluZGV4LnBocCI+UmV0b3VyIGFjY3VlaWw8L2E+PC9wPgoKPC9kaXY+CgoKCgoKCgoKCgoKCgoKCgoKCgo8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMS4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgoKPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCc8c2NyaXB0IHNyYz0ianMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzIj48XC9zY3JpcHQ+Jyk8L3NjcmlwdD4KCgoKPHNjcmlwdCBzcmM9ImpzL3ZlbmRvci9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KCgoKPHNjcmlwdCBzcmM9ImpzL3BsdWdpbnMuanMiPjwvc2NyaXB0PgoKPHNjcmlwdCBzcmM9ImpzL21haW4uanMiPjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgCiAgICAvLyBuYXZpZ2F0aW9uIGNsaWNrIGFjdGlvbnMgCiAgICAKICAgICQoJy5zY3JvbGwtbGluaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgIHZhciBzZWN0aW9uSUQgPSAkKHRoaXMpLmF0dHIoImRhdGEtaWQiKTsKICAgICAgICAKICAgICAgICBzY3JvbGxUb0lEKCcjJyArIHNlY3Rpb25JRCwgNzUwKTsKICAgICAgICAKICAgIH0pOwogICAgCiAgICAvLyBzY3JvbGwgdG8gdG9wIGFjdGlvbgogICAgCiAgICAkKCcuc2Nyb2xsLXRvcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAKICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOjB9LCAnc2xvdycpOyAgICAgICAgIAogICAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIG1vYmlsZSBuYXYgdG9nZ2xlCiAgICAKICAgICQoJyNuYXYtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAKICAgICAgICAkKCcjbWFpbi1uYXYnKS50b2dnbGVDbGFzcygib3BlbiIpOwogICAgICAgIAogICAgfSk7CiAgICAKfSk7CgovLyBzY3JvbGwgZnVuY3Rpb24KCmZ1bmN0aW9uIHNjcm9sbFRvSUQoaWQsIHNwZWVkKXsKICAgIAogICAgdmFyIG9mZlNldCA9IDUwOwogICAgCiAgICB2YXIgdGFyZ2V0T2Zmc2V0ID0gJChpZCkub2Zmc2V0KCkudG9wIC0gb2ZmU2V0OwogICAgCiAgICB2YXIgbWFpbk5hdiA9ICQoJyNtYWluLW5hdicpOwogICAgCiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6dGFyZ2V0T2Zmc2V0fSwgc3BlZWQpOwogICAgCiAgICBpZiAobWFpbk5hdi5oYXNDbGFzcygib3BlbiIpKSB7CiAgICAgICAgCiAgICAgICAgbWFpbk5hdi5jc3MoImhlaWdodCIsICIxcHgiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygiY29sbGFwc2UiKTsKICAgICAgICAKICAgICAgICBtYWluTmF2LnJlbW92ZUNsYXNzKCJvcGVuIik7CiAgICAgICAgCiAgICB9CiAgICAKfQoKaWYgKHR5cGVvZiBjb25zb2xlID09PSAidW5kZWZpbmVkIikgewogICAgCiAgICBjb25zb2xlID0gewogICAgICAgIAogICAgICAgIGxvZzogZnVuY3Rpb24oKSB7IH0KICAgICAgICAKICAgIH07CiAgICAKfQoKCmZ1bmN0aW9uIGZvcm1hdGVyRGF0ZShpbnB1dCkgewogICAgdmFyIHZhbGV1ciA9IGlucHV0LnZhbHVlOwogICAgdmFyIGNoaWZmcmVzID0gdmFsZXVyLnJlcGxhY2UoL1xEL2csICcnKTsgLy8gU3VwcHJpbWUgdG91cyBsZXMgY2FyYWN0w6hyZXMgbm9uLW51bcOpcmlxdWVzCiAgICAKICAgIC8vIEFqb3V0ZSBkZXMgJy8nIGFwcsOocyBsZSBqb3VyIGV0IGxlIG1vaXMKICAgIGNoaWZmcmVzID0gY2hpZmZyZXMuc3Vic3RyaW5nKDAsIDIpICsgKGNoaWZmcmVzLmxlbmd0aCA+IDIgPyAnLycgOiAnJykgKyBjaGlmZnJlcy5zdWJzdHJpbmcoMiwgNCkgKyAoY2hpZmZyZXMubGVuZ3RoID4gNCA/ICcvJyA6ICcnKSArIGNoaWZmcmVzLnN1YnN0cmluZyg0LCA4KTsKICAgIAogICAgaW5wdXQudmFsdWUgPSBjaGlmZnJlczsKfQoKCjwvc2NyaXB0PgoKPC9ib2R5PgoKPC9odG1sPg=="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 6264,
                "sha1": "b691f5cb970c626d45b282fe11bd9ac23057bc23",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvYWRtaW4ucGhwIHwgUHJvdMOoZ2UgbOKAmWFjY8OocyBhZG1pbmlzdHJhdGV1ciB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsIGV0IHBlcm1ldCBs4oCZYWpvdXQgZOKAmXVuIHNhbGFyacOpIGVuIGJhc2UuIHwgRXhwb3NlOiBhdWN1biB8IETDqXBlbmQgZGU6IGNvbmZpZy5waHAsIGluY2x1ZGVzL2RldmljZV9hdXRoLnBocCwgaW5kZXgucGhwLCBjb25uZXhpb24ucGhwIHwgSW1wYWN0ZTogw6l0YXQgZGUgc2Vzc2lvbiwgY29va2llIGTigJlhcHBhcmVpbCwgYWNjw6hzIMOgIGzigJlpbnRlcmZhY2UsIGluc2VydGlvbiBCREQsIHJlZGlyZWN0aW9uIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoTm9tLCBQcmVub20sIERhdGVEZU5haXNzYW5jZSwgUm9sZSwgRW1haWwsIENvZGVQaW4sIERhdGVEZUNyZWF0aW9uLCBTdGF0dXQpICovCgoKCnNlc3Npb25fc3RhcnQoKTsKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCgoKPHRpdGxlPkFqb3V0IG5vdXZlYXUgc2FsYXJpw6k8L3RpdGxlPgoKPCEtLQoKCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKCgpodHRwOi8vd3d3LnRvb3BsYXRlLmNvbS92aWV3LzIwODktbWV0ZW9yCgoKCi0tPgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jvb3RzdHJhcC5taW4uY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2ZvbnRBd2Vzb21lLmNzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9mb250QXdlc29tZS5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9oZXJvLXNsaWRlci5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy90b29wbGF0ZS1zdHlsZS5jc3MiPgo8P3BocAokY3NzUGF0aCA9IF9fRElSX18gLiAnL2Nzcy9zdHlsZS5jc3MnOwokY3NzVmVyc2lvbiA9IGZpbGVfZXhpc3RzKCRjc3NQYXRoKSA/IGZpbGVtdGltZSgkY3NzUGF0aCkgOiB0aW1lKCk7Cj8+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTw/cGhwIGVjaG8gKGludCkkY3NzVmVyc2lvbjsgPz4iPgoKCgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjMwMCw0MDAsNjAwLDcwMCw4MDAiIHJlbD0ic3R5bGVzaGVldCI+CgoKCjxzY3JpcHQgc3JjPSJqcy92ZW5kb3IvbW9kZXJuaXpyLTIuOC4zLXJlc3BvbmQtMS40LjIubWluLmpzIj48L3NjcmlwdD4KCjwvaGVhZD4KCjxib2R5IGNsYXNzPSJwYWdlLWFkbWluIHRoZW1lLWRhcmsiPgoKCgoKCgoKPGRpdiBpZD0iYWJvdXQiIGNsYXNzPSJwYWdlLXNlY3Rpb24iPgoKPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KCjxkaXYgY2xhc3M9InJvdyI+Cgo8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgoKPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KCjxoMT5Bam91dCBub3V2ZWwgZW1wbG95w6k8L2gxPgoKCgoKCjxoND48L2g0PjxkaXYgY2xhc3M9ImxpbmUtZGVjIj48L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAKCgoKPGNlbnRlcj48Zm9udCBjb2xvcj0id2hpdGUiPgoKCgoKCgoKCgoKCjwhLS0gRm9ybXVsYWlyZSBwb3VyIGFqb3V0ZXIgdW4gZW1wbG95w6kgLS0+Cgo8YnI+Cjxmb250IGNvbG9yPSJibGFjayI+Cjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgo8IS0tIEFqb3V0ZXIgbGVzIGNoYW1wcyBtYW5xdWFudHMgaWNpIC0tPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibm9tIiBwbGFjZWhvbGRlcj0iTm9tIiByZXF1aXJlZD48YnI+PGJyPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icHJlbm9tIiBwbGFjZWhvbGRlcj0iUHLDqW5vbSIgcmVxdWlyZWQ+PGJyPjxicj4KCjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZGF0ZURlTmFpc3NhbmNlIiBuYW1lPSJkYXRlRGVOYWlzc2FuY2UiIG9uaW5wdXQ9ImZvcm1hdGVyRGF0ZSh0aGlzKSIgaW5wdXRtb2RlPSJudW1lcmljIiBtYXhsZW5ndGg9IjEwIiBwbGFjZWhvbGRlcj0iSkovTU0vQUFBQSI+PGJyPjxicj4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJvbGUiIHBsYWNlaG9sZGVyPSJSb2xlIiA+PGJyPjxicj4KPGlucHV0IHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcGxhY2Vob2xkZXI9IkVtYWlsIiA+PGJyPjxicj4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNvZGVQaW4iIHBsYWNlaG9sZGVyPSJDb2RlIFBpbiIgPjxicj48YnI+Cgo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJBam91dGVyIj4KPC9mb250Pgo8L2Zvcm0+CgoKCgoKCgo8YnI+PGJyPjxicj4KCjxmb250IGNvbG9yPSJ3aGl0ZSI+Cgo8P3BocAppZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQnXSkpIHsKICAgICRkYXRlUGFydHMgPSBleHBsb2RlKCcvJywgJF9QT1NUWydkYXRlRGVOYWlzc2FuY2UnXSk7CiAgICAkZGF0ZURlTmFpc3NhbmNlRm9ybWF0dGVkID0gJGRhdGVQYXJ0c1syXSAuICctJyAuICRkYXRlUGFydHNbMV0gLiAnLScgLiAkZGF0ZVBhcnRzWzBdOwoKICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBkb25uw6llcyBkdSBmb3JtdWxhaXJlCiAgICAkbm9tID0gJF9QT1NUWydub20nXTsKICAgICRwcmVub20gPSAkX1BPU1RbJ3ByZW5vbSddOwogICAgJGRhdGVEZU5haXNzYW5jZSA9ICRfUE9TVFsnZGF0ZURlTmFpc3NhbmNlJ107CiAgICAkcm9sZSA9ICRfUE9TVFsncm9sZSddOwogICAgJGVtYWlsID0gJF9QT1NUWydlbWFpbCddOwogICAgJGNvZGVQaW4gPSAkX1BPU1RbJ2NvZGVQaW4nXTsKICAgIAogICAgLy8gQ29uc3RydWlyZSBldCBleMOpY3V0ZXIgbGEgcmVxdcOqdGUgSU5TRVJUCiAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgKE5vbSwgUHJlbm9tLCBEYXRlRGVOYWlzc2FuY2UsIFJvbGUsIEVtYWlsLCBDb2RlUGluLCBEYXRlRGVDcmVhdGlvbiwgU3RhdHV0KSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sIE5PVygpLCAnYWN0aWYnKSIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyRub20sICRwcmVub20sICRkYXRlRGVOYWlzc2FuY2VGb3JtYXR0ZWQsICRyb2xlLCAkZW1haWwsICRjb2RlUGluXSk7CiAgICAKICAgIC8vIFJlZGlyaWdlciBhdmVjIHRvYXN0IChhZmZpY2jDqSBzdXIgaW5kZXgucGhwKQogICAgJHRvYXN0TWVzc2FnZSA9IHJhd3VybGVuY29kZSgnRW1wbG95w6kgYWpvdXTDqSBhdmVjIHN1Y2PDqHMnKTsKICAgIGVjaG8gIjxzY3JpcHQ+d2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaW5kZXgucGhwP3RvYXN0PXskdG9hc3RNZXNzYWdlfSZ0b2FzdFR5cGU9c3VjY2Vzcyc7PC9zY3JpcHQ+IjsKfQo/PgoKCgoKCgo8YnI+PGJyPjxicj48YnI+PGJyPgoKPGZvbnQgY29sb3I9ImJsYWNrIj4KCjxidXR0b24gb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaW5kZXgucGhwJzsiPiBSZXRvdXJuZXIgcGFnZSBlbXBsb3nDqXMgPC9idXR0b24+Cgo8L2ZvbnQ+CgoKCgoKPC9mb250PgoKPC9jZW50ZXI+Cgo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KCgoKPHA+PGEgaHJlZj0iaW5kZXgucGhwIj5SZXRvdXIgYWNjdWVpbDwvYT48L3A+Cgo8L2Rpdj4KCgoKCgoKCgoKCgoKCgoKCgoKCjxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoJzxzY3JpcHQgc3JjPSJqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMiPjxcL3NjcmlwdD4nKTwvc2NyaXB0PgoKCgo8c2NyaXB0IHNyYz0ianMvdmVuZG9yL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0PgoKCgo8c2NyaXB0IHNyYz0ianMvcGx1Z2lucy5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0ianMvbWFpbi5qcyI+PC9zY3JpcHQ+CgoKCgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAKICAgIC8vIG5hdmlnYXRpb24gY2xpY2sgYWN0aW9ucyAKICAgIAogICAgJCgnLnNjcm9sbC1saW5rJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpewogICAgICAgIAogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgCiAgICAgICAgdmFyIHNlY3Rpb25JRCA9ICQodGhpcykuYXR0cigiZGF0YS1pZCIpOwogICAgICAgIAogICAgICAgIHNjcm9sbFRvSUQoJyMnICsgc2VjdGlvbklELCA3NTApOwogICAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIHNjcm9sbCB0byB0b3AgYWN0aW9uCiAgICAKICAgICQoJy5zY3JvbGwtdG9wJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6MH0sICdzbG93Jyk7ICAgICAgICAgCiAgICAgICAgCiAgICB9KTsKICAgIAogICAgLy8gbW9iaWxlIG5hdiB0b2dnbGUKICAgIAogICAgJCgnI25hdi10b2dnbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgICQoJyNtYWluLW5hdicpLnRvZ2dsZUNsYXNzKCJvcGVuIik7CiAgICAgICAgCiAgICB9KTsKICAgIAp9KTsKCi8vIHNjcm9sbCBmdW5jdGlvbgoKZnVuY3Rpb24gc2Nyb2xsVG9JRChpZCwgc3BlZWQpewogICAgCiAgICB2YXIgb2ZmU2V0ID0gNTA7CiAgICAKICAgIHZhciB0YXJnZXRPZmZzZXQgPSAkKGlkKS5vZmZzZXQoKS50b3AgLSBvZmZTZXQ7CiAgICAKICAgIHZhciBtYWluTmF2ID0gJCgnI21haW4tbmF2Jyk7CiAgICAKICAgICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoe3Njcm9sbFRvcDp0YXJnZXRPZmZzZXR9LCBzcGVlZCk7CiAgICAKICAgIGlmIChtYWluTmF2Lmhhc0NsYXNzKCJvcGVuIikpIHsKICAgICAgICAKICAgICAgICBtYWluTmF2LmNzcygiaGVpZ2h0IiwgIjFweCIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJjb2xsYXBzZSIpOwogICAgICAgIAogICAgICAgIG1haW5OYXYucmVtb3ZlQ2xhc3MoIm9wZW4iKTsKICAgICAgICAKICAgIH0KICAgIAp9CgppZiAodHlwZW9mIGNvbnNvbGUgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAKICAgIGNvbnNvbGUgPSB7CiAgICAgICAgCiAgICAgICAgbG9nOiBmdW5jdGlvbigpIHsgfQogICAgICAgIAogICAgfTsKICAgIAp9CgoKZnVuY3Rpb24gZm9ybWF0ZXJEYXRlKGlucHV0KSB7CiAgICB2YXIgdmFsZXVyID0gaW5wdXQudmFsdWU7CiAgICB2YXIgY2hpZmZyZXMgPSB2YWxldXIucmVwbGFjZSgvXEQvZywgJycpOyAvLyBTdXBwcmltZSB0b3VzIGxlcyBjYXJhY3TDqHJlcyBub24tbnVtw6lyaXF1ZXMKICAgIAogICAgLy8gQWpvdXRlIGRlcyAnLycgYXByw6hzIGxlIGpvdXIgZXQgbGUgbW9pcwogICAgY2hpZmZyZXMgPSBjaGlmZnJlcy5zdWJzdHJpbmcoMCwgMikgKyAoY2hpZmZyZXMubGVuZ3RoID4gMiA/ICcvJyA6ICcnKSArIGNoaWZmcmVzLnN1YnN0cmluZygyLCA0KSArIChjaGlmZnJlcy5sZW5ndGggPiA0ID8gJy8nIDogJycpICsgY2hpZmZyZXMuc3Vic3RyaW5nKDQsIDgpOwogICAgCiAgICBpbnB1dC52YWx1ZSA9IGNoaWZmcmVzOwp9CgoKPC9zY3JpcHQ+Cgo8L2JvZHk+Cgo8L2h0bWw+"
            }
        },
        {
            "path": "pointages/api/livreurs.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 3744,
                "sha1": "359228234cda3ca78ec7019b6c7114e5f3f63329",
                "content_b64": "PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwovKiBkb2MtcHJvamVjdCB8IHBvaW50YWdlcy9hcGkvbGl2cmV1cnMucGhwIHwgRXhwb3NlIHVuZSBBUEkgSlNPTiBzw6ljdXJpc8OpZSBwb3VyIGNvbnN1bHRlciBldCBnw6lyZXIgbGVzIGxpdnJldXJzIHBhciBwb2ludCBkZSB2ZW50ZS4gfCBFeHBvc2U6IGFwaV9saXZyZXVyc19yZXNwb25kIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZHJpdmVyX3N0b3JlLnBocCwgc2Vzc2lvbiBQSFAsIGJhc2UgZGUgZG9ubsOpZXMgcG9zX2lwX2F1dGhvcml6YXRpb25zIHwgSW1wYWN0ZTogcsOpcG9uc2UgSFRUUCBKU09OLCBhdXRvcmlzYXRpb24gZGUgc2Vzc2lvbi9JUCwgZ2VzdGlvbiBkZXMgbGl2cmV1cnMgfCBUYWJsZXM6IHBvc19pcF9hdXRob3JpemF0aW9ucyhpcF9hZGRyZXNzLCBhdXRob3JpemVkX3VudGlsKSAqLwoKb2Jfc3RhcnQoKTsKCnNlc3Npb25fc3RhcnQoKTsKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnRXVyb3BlL1BhcmlzJyk7CgpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCcpOwoKZnVuY3Rpb24gYXBpX2xpdnJldXJzX3Jlc3BvbmQoaW50ICRzdGF0dXNDb2RlLCBhcnJheSAkcGF5bG9hZCk6IHZvaWQKewogICAgaWYgKG9iX2dldF9sZW5ndGgoKSA+IDApIHsKICAgICAgICBvYl9jbGVhbigpOwogICAgfQogICAgaHR0cF9yZXNwb25zZV9jb2RlKCRzdGF0dXNDb2RlKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoJHBheWxvYWQsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX1VORVNDQVBFRF9TTEFTSEVTKTsKICAgIGV4aXQ7Cn0KCnRyeSB7CiAgICByZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvY29uZmlnLnBocCc7CiAgICByZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKSAuICcvaW5jbHVkZXMvZHJpdmVyX3N0b3JlLnBocCc7CgogICAgJGlwQWRkcmVzcyA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddID8/ICcnOwogICAgJGlzQXV0aG9yaXplZCA9IGZhbHNlOwoKICAgIGlmIChpc3NldCgkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSkgJiYgJF9TRVNTSU9OWydhdXRob3JpemVkJ10gPT09IHRydWUpIHsKICAgICAgICAkaXNBdXRob3JpemVkID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCdTRUxFQ1QgQ09VTlQoKikgRlJPTSBwb3NfaXBfYXV0aG9yaXphdGlvbnMgV0hFUkUgaXBfYWRkcmVzcyA9IDppcF9hZGRyZXNzIEFORCBhdXRob3JpemVkX3VudGlsID4gTk9XKCknKTsKICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6aXBfYWRkcmVzcycgPT4gJGlwQWRkcmVzc10pOwogICAgICAgICAgICAkY291bnQgPSAoaW50KSRzdG10LT5mZXRjaENvbHVtbigpOwogICAgICAgICAgICBpZiAoJGNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydhdXRob3JpemVkJ10gPSB0cnVlOwogICAgICAgICAgICAgICAgJGlzQXV0aG9yaXplZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChQRE9FeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgYXBpX2xpdnJldXJzX3Jlc3BvbmQoNTAwLCBbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnRXJyZXVyIGRlIGJhc2UgZGUgZG9ubsOpZXMuJ10pOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoISRpc0F1dGhvcml6ZWQpIHsKICAgICAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCg0MDMsIFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdBY2PDqHMgcmVmdXPDqS4nXSk7CiAgICB9CgogICAgJG1ldGhvZCA9IHN0cnRvdXBwZXIoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPz8gJ0dFVCcpOwogICAgJGFjdGlvbiA9IGlzc2V0KCRfUkVRVUVTVFsnYWN0aW9uJ10pID8gdHJpbSgoc3RyaW5nKSRfUkVRVUVTVFsnYWN0aW9uJ10pIDogJyc7CiAgICAkcG9pbnRWZW50ZSA9IGlzc2V0KCRfUkVRVUVTVFsncG9pbnRfdmVudGUnXSkgPyAoc3RyaW5nKSRfUkVRVUVTVFsncG9pbnRfdmVudGUnXSA6ICcnOwoKICAgIGlmICgkbWV0aG9kID09PSAnR0VUJykgewogICAgICAgICRub3JtYWxpemVkUG9pbnRWZW50ZSA9IGRyaXZlcl9zdG9yZV9hbGxvd2VkX3BvaW50X3ZlbnRlKCRwb2ludFZlbnRlKTsKICAgICAgICBpZiAoJG5vcm1hbGl6ZWRQb2ludFZlbnRlID09PSAnJykgewogICAgICAgICAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCg0MjIsIFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdQb2ludCBkZSB2ZW50ZSBpbnZhbGlkZS4nXSk7CiAgICAgICAgfQoKICAgICAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCgyMDAsIFsKICAgICAgICAgICAgJ29rJyA9PiB0cnVlLAogICAgICAgICAgICAnZGF0YScgPT4gWwogICAgICAgICAgICAgICAgJ3BvaW50X3ZlbnRlJyA9PiAkbm9ybWFsaXplZFBvaW50VmVudGUsCiAgICAgICAgICAgICAgICAnZHJpdmVycycgPT4gZHJpdmVyX3N0b3JlX2xpc3QoJG5vcm1hbGl6ZWRQb2ludFZlbnRlKSwKICAgICAgICAgICAgXSwKICAgICAgICBdKTsKICAgIH0KCiAgICBpZiAoJG1ldGhvZCAhPT0gJ1BPU1QnKSB7CiAgICAgICAgYXBpX2xpdnJldXJzX3Jlc3BvbmQoNDA1LCBbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTcOpdGhvZGUgbm9uIGF1dG9yaXPDqWUuJ10pOwogICAgfQoKICAgIHN3aXRjaCAoJGFjdGlvbikgewogICAgICAgIGNhc2UgJ2NyZWF0ZSc6CiAgICAgICAgICAgICRyZXN1bHQgPSBkcml2ZXJfc3RvcmVfY3JlYXRlKAogICAgICAgICAgICAgICAgJHBvaW50VmVudGUsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSgkX1BPU1RbJ25vbSddID8/ICcnKSwKICAgICAgICAgICAgICAgIChzdHJpbmcpKCRfUE9TVFsndGVsZXBob25lJ10gPz8gJycpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICd1cGRhdGUnOgogICAgICAgICAgICAkcmVzdWx0ID0gZHJpdmVyX3N0b3JlX3VwZGF0ZSgKICAgICAgICAgICAgICAgICRwb2ludFZlbnRlLAogICAgICAgICAgICAgICAgKHN0cmluZykoJF9QT1NUWydvcmlnaW5hbF9waG9uZSddID8/ICcnKSwKICAgICAgICAgICAgICAgIChzdHJpbmcpKCRfUE9TVFsnbm9tJ10gPz8gJycpLAogICAgICAgICAgICAgICAgKHN0cmluZykoJF9QT1NUWyd0ZWxlcGhvbmUnXSA/PyAnJykKICAgICAgICAgICAgKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RlbGV0ZSc6CiAgICAgICAgICAgICRyZXN1bHQgPSBkcml2ZXJfc3RvcmVfZGVsZXRlKAogICAgICAgICAgICAgICAgJHBvaW50VmVudGUsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSgkX1BPU1RbJ3RlbGVwaG9uZSddID8/ICcnKQogICAgICAgICAgICApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYXBpX2xpdnJldXJzX3Jlc3BvbmQoNDIyLCBbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnQWN0aW9uIGludmFsaWRlLiddKTsKICAgIH0KCiAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCgkcmVzdWx0WydvayddID8gMjAwIDogNDIyLCAkcmVzdWx0KTsKfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCg1MDAsIFsKICAgICAgICAnb2snID0+IGZhbHNlLAogICAgICAgICdlcnJvcicgPT4gJ0VycmV1ciBpbnRlcm5lIGxvcnMgZHUgdHJhaXRlbWVudCBkZXMgbGl2cmV1cnMuJywKICAgIF0pOwp9"
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 3093,
                "sha1": "e133cec9465594f0d9c16f786017f929efc0a454",
                "content_b64": "PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwovKiBkb2MtcHJvamVjdCB8IHBvaW50YWdlcy9hcGkvbGl2cmV1cnMucGhwIHwgRXhwb3NlIHVuZSBBUEkgSlNPTiBzw6ljdXJpc8OpZSBwb3VyIGNvbnN1bHRlciBldCBnw6lyZXIgbGVzIGxpdnJldXJzIHBhciBwb2ludCBkZSB2ZW50ZS4gfCBFeHBvc2U6IGFwaV9saXZyZXVyc19yZXNwb25kIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBpbmNsdWRlcy9kcml2ZXJfc3RvcmUucGhwLCBzZXNzaW9uIFBIUCB8IEltcGFjdGU6IHLDqXBvbnNlIEhUVFAgSlNPTiwgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsLCBnZXN0aW9uIGRlcyBsaXZyZXVycyB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpICovCgpvYl9zdGFydCgpOwoKc2Vzc2lvbl9zdGFydCgpOwpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCmhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CgpmdW5jdGlvbiBhcGlfbGl2cmV1cnNfcmVzcG9uZChpbnQgJHN0YXR1c0NvZGUsIGFycmF5ICRwYXlsb2FkKTogdm9pZAp7CiAgICBpZiAob2JfZ2V0X2xlbmd0aCgpID4gMCkgewogICAgICAgIG9iX2NsZWFuKCk7CiAgICB9CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoJHN0YXR1c0NvZGUpOwogICAgZWNobyBqc29uX2VuY29kZSgkcGF5bG9hZCwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSB8IEpTT05fVU5FU0NBUEVEX1NMQVNIRVMpOwogICAgZXhpdDsKfQoKdHJ5IHsKICAgIHJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRElSX18pIC4gJy9jb25maWcucGhwJzsKICAgIHJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRElSX18pIC4gJy9pbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAnOwogICAgcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19ESVJfXykgLiAnL2luY2x1ZGVzL2RyaXZlcl9zdG9yZS5waHAnOwoKICAgIGlmICghaXNfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbykpIHsKICAgICAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCg0MDMsIFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdBY2PDqHMgcmVmdXPDqS4nXSk7CiAgICB9CgogICAgJG1ldGhvZCA9IHN0cnRvdXBwZXIoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPz8gJ0dFVCcpOwogICAgJGFjdGlvbiA9IGlzc2V0KCRfUkVRVUVTVFsnYWN0aW9uJ10pID8gdHJpbSgoc3RyaW5nKSRfUkVRVUVTVFsnYWN0aW9uJ10pIDogJyc7CiAgICAkcG9pbnRWZW50ZSA9IGlzc2V0KCRfUkVRVUVTVFsncG9pbnRfdmVudGUnXSkgPyAoc3RyaW5nKSRfUkVRVUVTVFsncG9pbnRfdmVudGUnXSA6ICcnOwoKICAgIGlmICgkbWV0aG9kID09PSAnR0VUJykgewogICAgICAgICRub3JtYWxpemVkUG9pbnRWZW50ZSA9IGRyaXZlcl9zdG9yZV9hbGxvd2VkX3BvaW50X3ZlbnRlKCRwb2ludFZlbnRlKTsKICAgICAgICBpZiAoJG5vcm1hbGl6ZWRQb2ludFZlbnRlID09PSAnJykgewogICAgICAgICAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCg0MjIsIFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICdQb2ludCBkZSB2ZW50ZSBpbnZhbGlkZS4nXSk7CiAgICAgICAgfQoKICAgICAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCgyMDAsIFsKICAgICAgICAgICAgJ29rJyA9PiB0cnVlLAogICAgICAgICAgICAnZGF0YScgPT4gWwogICAgICAgICAgICAgICAgJ3BvaW50X3ZlbnRlJyA9PiAkbm9ybWFsaXplZFBvaW50VmVudGUsCiAgICAgICAgICAgICAgICAnZHJpdmVycycgPT4gZHJpdmVyX3N0b3JlX2xpc3QoJG5vcm1hbGl6ZWRQb2ludFZlbnRlKSwKICAgICAgICAgICAgXSwKICAgICAgICBdKTsKICAgIH0KCiAgICBpZiAoJG1ldGhvZCAhPT0gJ1BPU1QnKSB7CiAgICAgICAgYXBpX2xpdnJldXJzX3Jlc3BvbmQoNDA1LCBbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnTcOpdGhvZGUgbm9uIGF1dG9yaXPDqWUuJ10pOwogICAgfQoKICAgIHN3aXRjaCAoJGFjdGlvbikgewogICAgICAgIGNhc2UgJ2NyZWF0ZSc6CiAgICAgICAgICAgICRyZXN1bHQgPSBkcml2ZXJfc3RvcmVfY3JlYXRlKAogICAgICAgICAgICAgICAgJHBvaW50VmVudGUsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSgkX1BPU1RbJ25vbSddID8/ICcnKSwKICAgICAgICAgICAgICAgIChzdHJpbmcpKCRfUE9TVFsndGVsZXBob25lJ10gPz8gJycpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICd1cGRhdGUnOgogICAgICAgICAgICAkcmVzdWx0ID0gZHJpdmVyX3N0b3JlX3VwZGF0ZSgKICAgICAgICAgICAgICAgICRwb2ludFZlbnRlLAogICAgICAgICAgICAgICAgKHN0cmluZykoJF9QT1NUWydvcmlnaW5hbF9waG9uZSddID8/ICcnKSwKICAgICAgICAgICAgICAgIChzdHJpbmcpKCRfUE9TVFsnbm9tJ10gPz8gJycpLAogICAgICAgICAgICAgICAgKHN0cmluZykoJF9QT1NUWyd0ZWxlcGhvbmUnXSA/PyAnJykKICAgICAgICAgICAgKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RlbGV0ZSc6CiAgICAgICAgICAgICRyZXN1bHQgPSBkcml2ZXJfc3RvcmVfZGVsZXRlKAogICAgICAgICAgICAgICAgJHBvaW50VmVudGUsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSgkX1BPU1RbJ3RlbGVwaG9uZSddID8/ICcnKQogICAgICAgICAgICApOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYXBpX2xpdnJldXJzX3Jlc3BvbmQoNDIyLCBbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnQWN0aW9uIGludmFsaWRlLiddKTsKICAgIH0KCiAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCgkcmVzdWx0WydvayddID8gMjAwIDogNDIyLCAkcmVzdWx0KTsKfSBjYXRjaCAoVGhyb3dhYmxlICRlKSB7CiAgICBhcGlfbGl2cmV1cnNfcmVzcG9uZCg1MDAsIFsKICAgICAgICAnb2snID0+IGZhbHNlLAogICAgICAgICdlcnJvcicgPT4gJ0VycmV1ciBpbnRlcm5lIGxvcnMgZHUgdHJhaXRlbWVudCBkZXMgbGl2cmV1cnMuJywKICAgIF0pOwp9"
            }
        },
        {
            "path": "pointages/connexion.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 1931,
                "sha1": "881a581af5333d7cb9affe441a22918ad539af55",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvY29ubmV4aW9uLnBocCB8IEFmZmljaGUgbGEgcGFnZSBkZSBkZW1hbmRlIGTigJlhdXRvcmlzYXRpb24gcXVhbmQgbOKAmWFjY8OocyBlc3QgcmVmdXPDqSBldCByZWRpcmlnZSB2ZXJzIGzigJlhY2N1ZWlsLiB8IEV4cG9zZTogYXVjdW4gfCBEw6lwZW5kIGRlOiBpbmRleC5waHAsIGNzcy9zdHlsZS5jc3MgfCBJbXBhY3RlOiBuYXZpZ2F0aW9uLCByZWRpcmVjdGlvbiwgYWNjw6hzIMOgIGzigJlpbnRlcmZhY2UgfCBUYWJsZXM6IGF1Y3VuZSAqLwovLyBDb2RlIFBIUCBwb3VyIGTDqWZpbmlyIGRlcyB2YWxldXJzIG91IGxvZ2lxdWUgZGUgdHJhaXRlbWVudAoKLy8gVsOpcmlmaWV6IHNpIGwnYWNjw6hzIGEgw6l0w6kgcmVmdXPDqSBwYXIgaW5kZXgucGhwCmlmIChpc3NldCgkX0dFVFsnYWNjZXNzJ10pICYmICRfR0VUWydhY2Nlc3MnXSA9PSAncmVmdXNlZCcpIHsKICAgICRpcF9hZGRyZXNzID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CiAgICAvLyBMYSBwYWdlIHZhIHMnYWZmaWNoZXIsIGRvbmMgcGFzIGJlc29pbiBkZSBjb250aW51ZXIgbGUgUEhQIGljaQogICAgPz4KPCFET0NUWVBFIGh0bWw+CiAgICA8aHRtbCBsYW5nPSJmciI+CiAgICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICAgIDw/cGhwCiAgICAkY3NzUGF0aCA9IF9fRElSX18gLiAnL2Nzcy9zdHlsZS5jc3MnOwogICAgJGNzc1ZlcnNpb24gPSBmaWxlX2V4aXN0cygkY3NzUGF0aCkgPyBmaWxlbXRpbWUoJGNzc1BhdGgpIDogdGltZSgpOwogICAgPz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTw/cGhwIGVjaG8gKGludCkkY3NzVmVyc2lvbjsgPz4iPgogICAgCiAgICA8c2NyaXB0PgogICAgZnVuY3Rpb24gZGVtYW5kZUF1dG9yaXNhdGlvbigpIHsKICAgICAgICAvLyBMb2dpcXVlIHBvdXIgZGVtYW5kZXIgbCdhdXRvcmlzYXRpb24gaWNpCiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnYXV0aDo8P3BocCBlY2hvICRpcF9hZGRyZXNzOyA/Pic7CiAgICAgICAgCiAgICAgICAgLy8gRMOpZmluaXIgdW4gZMOpbGFpIGRlIDEgc2Vjb25kZSBhdmFudCBkZSBjbGlxdWVyIHN1ciBsZSBib3V0b24gIkFjY8OpZGVyIGF1IHNpdGUiCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JldG91cicpLmNsaWNrKCk7CiAgICAgICAgfSwgMTAwMCk7IC8vIDEwMDAgbWlsbGlzZWNvbmRlcyA9IDEgc2Vjb25kZQogICAgfQogICAgPC9zY3JpcHQ+CiAgICAKICAgIDwvaGVhZD4KICAgIDxib2R5IGNsYXNzPSJwYWdlLWNvbm5leGlvbiI+CiAgICA8YnV0dG9uIGlkPSJhdXRvcmlzYXRpb24iIG9uY2xpY2s9ImRlbWFuZGVBdXRvcmlzYXRpb24oKSI+RGVtYW5kZXIgYXV0b3Jpc2F0aW9uPC9idXR0b24+CiAgICAKICAgIDxicj48YnI+PGJyPgogICAgPGJ1dHRvbiBpZD0icmV0b3VyIiBjbGFzcz0iaXMtaGlkZGVuIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdpbmRleC5waHAnIj5BY2PDqWRlciBhdSBzaXRlPC9idXR0b24+CgogICAgPC9ib2R5PgogICAgPC9odG1sPgogICAgPD9waHAKICAgIC8vIEZpbiBkZSBsJ2luc2VydGlvbiBIVE1MLCBvbiBwZXV0IGNvbnRpbnVlciBhdmVjIGxlIFBIUCBzaSBuw6ljZXNzYWlyZQogICAgZXhpdDsgLy8gQXNzdXJlei12b3VzIGRlIHF1aXR0ZXIgbGUgc2NyaXB0IGFwcsOocyBsJ2FmZmljaGFnZSBzaSBhdWN1bmUgYXV0cmUgb3DDqXJhdGlvbiBQSFAgbidlc3QgbsOpY2Vzc2FpcmUKfQovLyBBdXRyZSBjb2RlIFBIUCBzaSBuw6ljZXNzYWlyZQo/Pgo="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 2372,
                "sha1": "a624e6b4ed6d026cfda1c73cdcd5d0a6a6df741f",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvY29ubmV4aW9uLnBocCB8IEFmZmljaGUgbGUgZm9ybXVsYWlyZSBkZSBtb3QgZGUgcGFzc2UgZXQgYXV0b3Jpc2UgZMOpZmluaXRpdmVtZW50IGzigJlhcHBhcmVpbCBhcHLDqHMgdmFsaWRhdGlvbi4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBjc3Mvc3R5bGUuY3NzLCBjc3MvZGV2aWNlLWxvZ2luLmNzcywgaW5kZXgucGhwIHwgSW1wYWN0ZTogc2Vzc2lvbiBQSFAsIGNvb2tpZSBk4oCZYXBwYXJlaWwsIG5hdmlnYXRpb24sIGFjY8OocyDDoCBs4oCZaW50ZXJmYWNlIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCkgKi8Kc2Vzc2lvbl9zdGFydCgpOwpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCnJlcXVpcmVfb25jZSAiY29uZmlnLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAiOwoKaWYgKGlzX2RldmljZV9hdXRob3JpemVkKCRwZG8pKSB7CiAgICBoZWFkZXIoJ0xvY2F0aW9uOiBpbmRleC5waHAnKTsKICAgIGV4aXQ7Cn0KCiRlcnJvciA9ICcnOwppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJykgewogICAgJHBhc3N3b3JkID0gaXNzZXQoJF9QT1NUWydkZXZpY2VfcGFzc3dvcmQnXSkgPyAoc3RyaW5nKSRfUE9TVFsnZGV2aWNlX3Bhc3N3b3JkJ10gOiAnJzsKICAgIGlmIChhdXRob3JpemVfZGV2aWNlX3dpdGhfcGFzc3dvcmQoJHBkbywgJHBhc3N3b3JkKSkgewogICAgICAgIGhlYWRlcignTG9jYXRpb246IGluZGV4LnBocCcpOwogICAgICAgIGV4aXQ7CiAgICB9CiAgICAkZXJyb3IgPSAnTW90IGRlIHBhc3NlIGluY29ycmVjdC4nOwp9CgpmdW5jdGlvbiBhc3NldF92ZXJzaW9uKHN0cmluZyAkcmVsYXRpdmVQYXRoKTogc3RyaW5nCnsKICAgICRmdWxsUGF0aCA9IF9fRElSX18gLiAnLycgLiBsdHJpbSgkcmVsYXRpdmVQYXRoLCAnLycpOwogICAgJHZlcnNpb24gPSBmaWxlX2V4aXN0cygkZnVsbFBhdGgpID8gZmlsZW10aW1lKCRmdWxsUGF0aCkgOiB0aW1lKCk7CiAgICByZXR1cm4gJHJlbGF0aXZlUGF0aCAuICc/dj0nIC4gKGludCkkdmVyc2lvbjsKfQo/Pgo8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZnIiPgo8aGVhZD4KICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogIDx0aXRsZT5Db25uZXhpb24gcG9pbnRhZ2VzPC90aXRsZT4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdjc3Mvc3R5bGUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2RldmljZS1sb2dpbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPC9oZWFkPgo8Ym9keSBjbGFzcz0icGFnZS1jb25uZXhpb24iPgogIDxtYWluIGNsYXNzPSJkZXZpY2UtbG9naW4tY2FyZCI+CiAgICA8aDE+QWNjw6hzIHBvaW50YWdlczwvaDE+CiAgICA8cD5TYWlzaXNzZXogbGUgbW90IGRlIHBhc3NlIHVuZSBzZXVsZSBmb2lzIHBvdXIgYXV0b3Jpc2VyIGNldCBhcHBhcmVpbC48L3A+CgogICAgPD9waHAgaWYgKCRlcnJvciAhPT0gJycpOiA/PgogICAgICA8ZGl2IGNsYXNzPSJkZXZpY2UtbG9naW4tZXJyb3IiIHJvbGU9ImFsZXJ0Ij48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVycm9yLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz48L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgoKICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSJjb25uZXhpb24ucGhwIiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgIDxsYWJlbCBmb3I9ImRldmljZV9wYXNzd29yZCI+TW90IGRlIHBhc3NlPC9sYWJlbD4KICAgICAgPGlucHV0CiAgICAgICAgdHlwZT0icGFzc3dvcmQiCiAgICAgICAgaWQ9ImRldmljZV9wYXNzd29yZCIKICAgICAgICBuYW1lPSJkZXZpY2VfcGFzc3dvcmQiCiAgICAgICAgcmVxdWlyZWQKICAgICAgICBhdXRvZm9jdXMKICAgICAgICBhdXRvY29tcGxldGU9ImN1cnJlbnQtcGFzc3dvcmQiCiAgICAgID4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPkF1dG9yaXNlciBjZXQgYXBwYXJlaWw8L2J1dHRvbj4KICAgIDwvZm9ybT4KICA8L21haW4+CjwvYm9keT4KPC9odG1sPgo="
            }
        },
        {
            "path": "pointages/css/device-login.css",
            "kind": "file",
            "before": {
                "exists": false
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 1697,
                "sha1": "bee000ccdda39bae3e5742086bb9dbc120987750",
                "content_b64": "LyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvY3NzL2RldmljZS1sb2dpbi5jc3MgfCBEw6lmaW5pdCBsZSBzdHlsZSBkw6lkacOpIMOgIGxhIHZ1ZSBkZSBjb25uZXhpb24gcGFyIG1vdCBkZSBwYXNzZSBhcHBhcmVpbC4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29ubmV4aW9uLnBocCB8IEltcGFjdGU6IFVJIGR1IGZvcm11bGFpcmUgZOKAmWF1dG9yaXNhdGlvbiBhcHBhcmVpbCB8IFRhYmxlczogYXVjdW5lICovCgpib2R5LnBhZ2UtY29ubmV4aW9uIHsKICBtaW4taGVpZ2h0OiAxMDB2aDsKICBwYWRkaW5nOiAyMHB4OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5kZXZpY2UtbG9naW4tY2FyZCB7CiAgd2lkdGg6IDkyJTsKICBtYXgtd2lkdGg6IDQ2MHB4OwogIHBhZGRpbmc6IDI0cHggMjBweDsKICBib3JkZXItcmFkaXVzOiAxNnB4OwogIGJhY2tncm91bmQtY29sb3I6ICMxNDE0MTQ7CiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICBib3gtc2hhZG93OiAwIDE0cHggMzRweCByZ2JhKDAsIDAsIDAsIDAuNjUpOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmRldmljZS1sb2dpbi1jYXJkIGgxIHsKICBtYXJnaW46IDAgMCAxMHB4IDA7CiAgY29sb3I6ICNmZmZmZmY7CiAgZm9udC1zaXplOiAyOHB4OwogIGZvbnQtd2VpZ2h0OiA5MDA7Cn0KCi5kZXZpY2UtbG9naW4tY2FyZCBwIHsKICBtYXJnaW46IDAgMCAxOHB4IDA7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nik7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiA3MDA7Cn0KCi5kZXZpY2UtbG9naW4tY2FyZCBsYWJlbCB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWJvdHRvbTogOHB4OwogIGNvbG9yOiAjZmZmZmZmOwogIHRleHQtYWxpZ246IGxlZnQ7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiA4MDA7Cn0KCi5kZXZpY2UtbG9naW4tY2FyZCBpbnB1dCB7CiAgd2lkdGg6IDEwMCU7CiAgbWluLWhlaWdodDogNTJweDsKICBwYWRkaW5nOiAxMnB4IDE0cHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3JkZXItcmFkaXVzOiAxMnB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOwogIGNvbG9yOiAjMTExMTExOwogIGZvbnQtc2l6ZTogMThweDsKICBmb250LXdlaWdodDogODAwOwp9CgouZGV2aWNlLWxvZ2luLWNhcmQgYnV0dG9uIHsKICB3aWR0aDogMTAwJTsKICBtYXJnaW46IDE2cHggMCAwIDA7CiAgcGFkZGluZzogMTRweCAxMHB4OwogIGJvcmRlcjogbm9uZTsKICBib3JkZXItcmFkaXVzOiAxMnB4OwogIGJhY2tncm91bmQtY29sb3I6ICMwMDdCRkY7CiAgY29sb3I6ICNmZmZmZmY7CiAgZm9udC1zaXplOiAxOXB4OwogIGZvbnQtd2VpZ2h0OiA5MDA7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgouZGV2aWNlLWxvZ2luLWNhcmQgYnV0dG9uOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2OWQ5Owp9CgouZGV2aWNlLWxvZ2luLWVycm9yIHsKICBtYXJnaW46IDAgMCAxNHB4IDA7CiAgcGFkZGluZzogMTJweDsKICBib3JkZXItcmFkaXVzOiAxMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICM5YjFjMWM7CiAgY29sb3I6ICNmZmZmZmY7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiA4MDA7Cn0="
            }
        },
        {
            "path": "pointages/enregistrer_livreur.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 5219,
                "sha1": "b5e1ba80b7674d0d0b4a5f9eae85ab204ad0f754",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvZW5yZWdpc3RyZXJfbGl2cmV1ci5waHAgfCBFbnJlZ2lzdHJlIHVuIGxpdnJldXIsIGfDqW7DqHJlIHVuIGxpZW4gbWFnaXF1ZSB2ZXJzIGxhIG5vdXZlbGxlIGludGVyZmFjZSBsaXZyZXVyIG11bHRpLXN0b3JlIGV0IGTDqWNsZW5jaGUgbOKAmWVudm9pIGTigJl1biBTTVMgZOKAmWFjY8Oocy4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgcG9zX2lwX2F1dGhvcml6YXRpb25zLCBwb3NfbGl2cmV1cnMsIHN0ZF9zbXMgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgYWNjw6hzIEpTT04gQVBJLCBpbnNlcnRpb25zIGVuIEJERCwgZW52b2kgU01TIGF2ZWMgVVJMIG5ldy9zdG9yZS9tbCB8IFRhYmxlczogcG9zX2lwX2F1dGhvcml6YXRpb25zKGlwX2FkZHJlc3MsIGF1dGhvcml6ZWRfdW50aWwpLCBwb3NfbGl2cmV1cnMocGhvbmVfZTE2NCwgbWFnaWNfbGluaywgcG9pbnRfdmVudGUsIGNyZWF0ZWRfYXQpLCBzdGRfc21zKHBob25lTnVtYmVyLCBtZXNzYWdlLCBzdGF0dXMsIHRpbWVzdGFtcCkgKi8Kc2Vzc2lvbl9zdGFydCgpOwpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCmhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CgovLyBDb25uZXhpb24gREIKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKZ2xvYmFsICRwZG87CgovLyBTw6ljdXJpdMOpOiBhdXRvcmlzYXRpb24gY29tbWUgaW5kZXgucGhwIChzZXNzaW9uIG91IElQIGF1dG9yaXPDqWUpCiRpcF9hZGRyZXNzID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CiRpc0F1dGhvcml6ZWQgPSBmYWxzZTsKCmlmIChpc3NldCgkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSkgJiYgJF9TRVNTSU9OWydhdXRob3JpemVkJ10gPT09IHRydWUpIHsKICAkaXNBdXRob3JpemVkID0gdHJ1ZTsKfSBlbHNlIHsKICB0cnkgewogICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwb3NfaXBfYXV0aG9yaXphdGlvbnMgV0hFUkUgaXBfYWRkcmVzcyA9IDppcF9hZGRyZXNzIEFORCBhdXRob3JpemVkX3VudGlsID4gTk9XKCkiKTsKICAgICRzdG10LT5leGVjdXRlKFsnOmlwX2FkZHJlc3MnID0+ICRpcF9hZGRyZXNzXSk7CiAgICAkY291bnQgPSAkc3RtdC0+ZmV0Y2hDb2x1bW4oKTsKICAgIGlmICgkY291bnQgPiAwKSB7CiAgICAgICRfU0VTU0lPTlsnYXV0aG9yaXplZCddID0gdHJ1ZTsKICAgICAgJGlzQXV0aG9yaXplZCA9IHRydWU7CiAgICB9CiAgfSBjYXRjaCAoUERPRXhjZXB0aW9uICRlKSB7CiAgICBodHRwX3Jlc3BvbnNlX2NvZGUoNTAwKTsKICAgIGVjaG8ganNvbl9lbmNvZGUoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gIkVycmV1ciBEQiAoYXV0aCkuIl0pOwogICAgZXhpdDsKICB9Cn0KCmlmICghJGlzQXV0aG9yaXplZCkgewogIGh0dHBfcmVzcG9uc2VfY29kZSg0MDMpOwogIGVjaG8ganNvbl9lbmNvZGUoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gIkFjY8OocyByZWZ1c8OpLiJdKTsKICBleGl0Owp9CgppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gIT09ICdQT1NUJykgewogIGh0dHBfcmVzcG9uc2VfY29kZSg0MDUpOwogIGVjaG8ganNvbl9lbmNvZGUoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gIk3DqXRob2RlIG5vbiBhdXRvcmlzw6llLiJdKTsKICBleGl0Owp9CgpmdW5jdGlvbiBub3JtYWxpemVfcGhvbmVfZTE2NF9mcigkcmF3KSB7CiAgJHYgPSBpc19zdHJpbmcoJHJhdykgPyB0cmltKCRyYXcpIDogJyc7CiAgaWYgKCR2ID09PSAnJykgcmV0dXJuICcnOwoKICAvLyBHYXJkZXIgdW5pcXVlbWVudCBsZXMgY2hpZmZyZXMKICAkZGlnaXRzID0gcHJlZ19yZXBsYWNlKCcvXEQrLycsICcnLCAkdik7CiAgaWYgKCRkaWdpdHMgPT09IG51bGwpICRkaWdpdHMgPSAnJzsKCiAgLy8gMDAzM1hYWFhYWFhYWCA9PiAzM1hYWFhYWFhYWAogIGlmIChzdHJwb3MoJGRpZ2l0cywgJzAwMzMnKSA9PT0gMCkgewogICAgJGRpZ2l0cyA9ICczMycgLiBzdWJzdHIoJGRpZ2l0cywgNCk7CiAgfQoKICAvLyAwWFhYWFhYWFhYICgxMCBjaGlmZnJlcykgPT4gMzNYWFhYWFhYWFgKICBpZiAoc3RybGVuKCRkaWdpdHMpID09PSAxMCAmJiAkZGlnaXRzWzBdID09PSAnMCcpIHsKICAgICRkaWdpdHMgPSAnMzMnIC4gc3Vic3RyKCRkaWdpdHMsIDEpOwogIH0KCiAgLy8gVmFsaWRhdGlvbiBtaW5pbWFsZSBGUjogMzMgKyA5IGNoaWZmcmVzCiAgaWYgKCFwcmVnX21hdGNoKCcvXjMzXGR7OX0kLycsICRkaWdpdHMpKSB7CiAgICByZXR1cm4gJyc7CiAgfQoKICByZXR1cm4gJGRpZ2l0czsKfQoKZnVuY3Rpb24gcG9pbnRfdmVudGVfdG9fc3RvcmVfY29kZSgkcG9pbnRWZW50ZSkgewogICRub3JtYWxpemVkID0gaXNfc3RyaW5nKCRwb2ludFZlbnRlKSA/IHN0cnRvbG93ZXIodHJpbSgkcG9pbnRWZW50ZSkpIDogJyc7CiAgaWYgKCRub3JtYWxpemVkID09PSAncGVsaXNzYW5uZScpIHsKICAgIHJldHVybiAncGVsJzsKICB9CiAgcmV0dXJuICdsYW4nOwp9CgokcGhvbmVSYXcgPSBpc3NldCgkX1BPU1RbJ3Bob25lJ10pID8gJF9QT1NUWydwaG9uZSddIDogJyc7CiRwaG9uZSA9IG5vcm1hbGl6ZV9waG9uZV9lMTY0X2ZyKCRwaG9uZVJhdyk7CmlmICgkcGhvbmUgPT09ICcnKSB7CiAgaHR0cF9yZXNwb25zZV9jb2RlKDQwMCk7CiAgZWNobyBqc29uX2VuY29kZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAiTnVtw6lybyBpbnZhbGlkZS4gRXhlbXBsZTogMDYxODUyOTM3NSAoPT4gMzM2MTg1MjkzNzUpLiJdKTsKICBleGl0Owp9CgogJHBvaW50VmVudGVSYXcgPSBpc3NldCgkX1BPU1RbJ3BvaW50X3ZlbnRlJ10pID8gJF9QT1NUWydwb2ludF92ZW50ZSddIDogJ2xhbmNvbic7CiAkcG9pbnRWZW50ZSA9IGlzX3N0cmluZygkcG9pbnRWZW50ZVJhdykgPyBzdHJ0b2xvd2VyKHRyaW0oJHBvaW50VmVudGVSYXcpKSA6ICdsYW5jb24nOwogaWYgKCRwb2ludFZlbnRlICE9PSAnbGFuY29uJyAmJiAkcG9pbnRWZW50ZSAhPT0gJ3BlbGlzc2FubmUnKSB7CiAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MDApOwogICBlY2hvIGpzb25fZW5jb2RlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICJQb2ludCBkZSB2ZW50ZSBpbnZhbGlkZS4iXSk7CiAgIGV4aXQ7CiB9CiAKLy8gTWFnaWMgbGluayAodG9rZW4pCnRyeSB7CiAgJG1hZ2ljID0gYmluMmhleChyYW5kb21fYnl0ZXMoMTYpKTsKfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgLy8gZmFsbGJhY2sgdWx0cmEtc2ltcGxlCiAgJG1hZ2ljID0gYmluMmhleChvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoMTYpKTsKfQoKJHR6ID0gbmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJyk7CiRub3cgPSAobmV3IERhdGVUaW1lKCdub3cnLCAkdHopKS0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpOwokdG9kYXlTdGFydCA9IChuZXcgRGF0ZVRpbWUoJ3RvZGF5JywgJHR6KSktPmZvcm1hdCgnWS1tLWQgMDA6MDA6MDAnKTsKCnRyeSB7CiAgJHBkby0+YmVnaW5UcmFuc2FjdGlvbigpOwoKICAvLyBTdXBwcmltZXIgdG91dGVzIGxlcyBlbnRyw6llcyBkZXMgam91cnMgcHLDqWPDqWRlbnRzIChvbiBnYXJkZSB1bmlxdWVtZW50ICJhdWpvdXJkJ2h1aSIpCiAgJGRlbCA9ICRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIHBvc19saXZyZXVycyBXSEVSRSBjcmVhdGVkX2F0IDwgOnRvZGF5U3RhcnQiKTsKICAkZGVsLT5leGVjdXRlKFsnOnRvZGF5U3RhcnQnID0+ICR0b2RheVN0YXJ0XSk7CgogIC8vIEluc8OpcmVyIGxhIG5vdXZlbGxlIGVudHLDqWUKICAkaW5zID0gJHBkby0+cHJlcGFyZSgiCiAgICBJTlNFUlQgSU5UTyBwb3NfbGl2cmV1cnMgKHBob25lX2UxNjQsIG1hZ2ljX2xpbmssIHBvaW50X3ZlbnRlLCBjcmVhdGVkX2F0KQogICAgVkFMVUVTICg6cGhvbmUsIDptYWdpYywgOnBvaW50X3ZlbnRlLCA6Y3JlYXRlZF9hdCkKICAiKTsKICAkaW5zLT5leGVjdXRlKFsKICAgICc6cGhvbmUnID0+ICRwaG9uZSwKICAgICc6bWFnaWMnID0+ICRtYWdpYywKICAgICc6cG9pbnRfdmVudGUnID0+ICRwb2ludFZlbnRlLAogICAgJzpjcmVhdGVkX2F0JyA9PiAkbm93CiAgXSk7CgogICRzdG9yZUNvZGUgPSBwb2ludF92ZW50ZV90b19zdG9yZV9jb2RlKCRwb2ludFZlbnRlKTsKICAkdXJsID0gImh0dHBzOi8vbGl2cmV1ci5hcXVvaXBpenphLmZyP3N0b3JlPSIgLiByYXd1cmxlbmNvZGUoJHN0b3JlQ29kZSkgLiAiJm1sPSIgLiByYXd1cmxlbmNvZGUoJG1hZ2ljKTsKICAkc21zTWVzc2FnZSA9ICJWb2lsw6AgbGUgbGllbiBwb3VyIGFjY8OpZGVyIMOgIGwnaW50ZXJmYWNlIGRlIGxpdnJhaXNvblxuIiAuICR1cmw7CgogIC8vIEluc8OpcmVyIGxlIFNNUyBkYW5zIHN0ZF9zbXMgKGNvbG9ubmVzIG1pbmltYWxlcyBkZW1hbmTDqWVzKQogICRzbXMgPSAkcGRvLT5wcmVwYXJlKCIKICAgIElOU0VSVCBJTlRPIHN0ZF9zbXMgKHBob25lTnVtYmVyLCBtZXNzYWdlLCBzdGF0dXMsIHRpbWVzdGFtcCkKICAgIFZBTFVFUyAoOnBob25lTnVtYmVyLCA6bWVzc2FnZSwgOnN0YXR1cywgOnRpbWVzdGFtcCkKICAiKTsKICAkc21zLT5leGVjdXRlKFsKICAgICc6cGhvbmVOdW1iZXInID0+ICRwaG9uZSwKICAgICc6bWVzc2FnZScgPT4gJHNtc01lc3NhZ2UsCiAgICAnOnN0YXR1cycgPT4gJ3dhaXRpbmcnLAogICAgJzp0aW1lc3RhbXAnID0+ICRub3cKICBdKTsKCiAgJHBkby0+Y29tbWl0KCk7CgogIGVjaG8ganNvbl9lbmNvZGUoWwogICAgJ29rJyA9PiB0cnVlLAogICAgJ3Bob25lJyA9PiAkcGhvbmUsCiAgICAncG9pbnRfdmVudGUnID0+ICRwb2ludFZlbnRlLAogICAgJ3N0b3JlJyA9PiAkc3RvcmVDb2RlLAogICAgJ21hZ2ljX2xpbmsnID0+ICRtYWdpYywKICAgICdzbXNfc3RhdHVzJyA9PiAnd2FpdGluZycsCiAgICAndXJsJyA9PiAkdXJsCiAgXSk7CiAgZXhpdDsKfSBjYXRjaCAoUERPRXhjZXB0aW9uICRlKSB7CiAgaWYgKCRwZG8gJiYgJHBkby0+aW5UcmFuc2FjdGlvbigpKSB7CiAgICB0cnkgeyAkcGRvLT5yb2xsQmFjaygpOyB9IGNhdGNoIChFeGNlcHRpb24gJGV4KSB7fQogIH0KICBodHRwX3Jlc3BvbnNlX2NvZGUoNTAwKTsKICBlY2hvIGpzb25fZW5jb2RlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICJFcnJldXIgREIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50LiJdKTsKICBleGl0Owp9Cgo/Pgo="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 4613,
                "sha1": "29d95791500e619b2022de04ae9165ca4727f248",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvZW5yZWdpc3RyZXJfbGl2cmV1ci5waHAgfCBFbnJlZ2lzdHJlIHVuIGxpdnJldXIsIGfDqW7DqHJlIHVuIGxpZW4gbWFnaXF1ZSB2ZXJzIGxhIG5vdXZlbGxlIGludGVyZmFjZSBsaXZyZXVyIG11bHRpLXN0b3JlIGV0IGTDqWNsZW5jaGUgbOKAmWVudm9pIGTigJl1biBTTVMgZOKAmWFjY8Oocy4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBwb3NfbGl2cmV1cnMsIHN0ZF9zbXMgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgY29va2llIGTigJlhcHBhcmVpbCwgYWNjw6hzIEpTT04gQVBJLCBpbnNlcnRpb25zIGVuIEJERCwgZW52b2kgU01TIGF2ZWMgVVJMIG5ldy9zdG9yZS9tbCB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpLCBwb3NfbGl2cmV1cnMocGhvbmVfZTE2NCwgbWFnaWNfbGluaywgcG9pbnRfdmVudGUsIGNyZWF0ZWRfYXQpLCBzdGRfc21zKHBob25lTnVtYmVyLCBtZXNzYWdlLCBzdGF0dXMsIHRpbWVzdGFtcCkgKi8Kc2Vzc2lvbl9zdGFydCgpOwpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCmhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Jyk7CgovLyBDb25uZXhpb24gREIKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7Cmdsb2JhbCAkcGRvOwoKaWYgKCFpc19kZXZpY2VfYXV0aG9yaXplZCgkcGRvKSkgewogIGh0dHBfcmVzcG9uc2VfY29kZSg0MDMpOwogIGVjaG8ganNvbl9lbmNvZGUoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gIkFjY8OocyByZWZ1c8OpLiJdKTsKICBleGl0Owp9CgppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gIT09ICdQT1NUJykgewogIGh0dHBfcmVzcG9uc2VfY29kZSg0MDUpOwogIGVjaG8ganNvbl9lbmNvZGUoWydvaycgPT4gZmFsc2UsICdlcnJvcicgPT4gIk3DqXRob2RlIG5vbiBhdXRvcmlzw6llLiJdKTsKICBleGl0Owp9CgpmdW5jdGlvbiBub3JtYWxpemVfcGhvbmVfZTE2NF9mcigkcmF3KSB7CiAgJHYgPSBpc19zdHJpbmcoJHJhdykgPyB0cmltKCRyYXcpIDogJyc7CiAgaWYgKCR2ID09PSAnJykgcmV0dXJuICcnOwoKICAvLyBHYXJkZXIgdW5pcXVlbWVudCBsZXMgY2hpZmZyZXMKICAkZGlnaXRzID0gcHJlZ19yZXBsYWNlKCcvXEQrLycsICcnLCAkdik7CiAgaWYgKCRkaWdpdHMgPT09IG51bGwpICRkaWdpdHMgPSAnJzsKCiAgLy8gMDAzM1hYWFhYWFhYWCA9PiAzM1hYWFhYWFhYWAogIGlmIChzdHJwb3MoJGRpZ2l0cywgJzAwMzMnKSA9PT0gMCkgewogICAgJGRpZ2l0cyA9ICczMycgLiBzdWJzdHIoJGRpZ2l0cywgNCk7CiAgfQoKICAvLyAwWFhYWFhYWFhYICgxMCBjaGlmZnJlcykgPT4gMzNYWFhYWFhYWFgKICBpZiAoc3RybGVuKCRkaWdpdHMpID09PSAxMCAmJiAkZGlnaXRzWzBdID09PSAnMCcpIHsKICAgICRkaWdpdHMgPSAnMzMnIC4gc3Vic3RyKCRkaWdpdHMsIDEpOwogIH0KCiAgLy8gVmFsaWRhdGlvbiBtaW5pbWFsZSBGUjogMzMgKyA5IGNoaWZmcmVzCiAgaWYgKCFwcmVnX21hdGNoKCcvXjMzXGR7OX0kLycsICRkaWdpdHMpKSB7CiAgICByZXR1cm4gJyc7CiAgfQoKICByZXR1cm4gJGRpZ2l0czsKfQoKZnVuY3Rpb24gcG9pbnRfdmVudGVfdG9fc3RvcmVfY29kZSgkcG9pbnRWZW50ZSkgewogICRub3JtYWxpemVkID0gaXNfc3RyaW5nKCRwb2ludFZlbnRlKSA/IHN0cnRvbG93ZXIodHJpbSgkcG9pbnRWZW50ZSkpIDogJyc7CiAgaWYgKCRub3JtYWxpemVkID09PSAncGVsaXNzYW5uZScpIHsKICAgIHJldHVybiAncGVsJzsKICB9CiAgcmV0dXJuICdsYW4nOwp9CgokcGhvbmVSYXcgPSBpc3NldCgkX1BPU1RbJ3Bob25lJ10pID8gJF9QT1NUWydwaG9uZSddIDogJyc7CiRwaG9uZSA9IG5vcm1hbGl6ZV9waG9uZV9lMTY0X2ZyKCRwaG9uZVJhdyk7CmlmICgkcGhvbmUgPT09ICcnKSB7CiAgaHR0cF9yZXNwb25zZV9jb2RlKDQwMCk7CiAgZWNobyBqc29uX2VuY29kZShbJ29rJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAiTnVtw6lybyBpbnZhbGlkZS4gRXhlbXBsZTogMDYxODUyOTM3NSAoPT4gMzM2MTg1MjkzNzUpLiJdKTsKICBleGl0Owp9CgogJHBvaW50VmVudGVSYXcgPSBpc3NldCgkX1BPU1RbJ3BvaW50X3ZlbnRlJ10pID8gJF9QT1NUWydwb2ludF92ZW50ZSddIDogJ2xhbmNvbic7CiAkcG9pbnRWZW50ZSA9IGlzX3N0cmluZygkcG9pbnRWZW50ZVJhdykgPyBzdHJ0b2xvd2VyKHRyaW0oJHBvaW50VmVudGVSYXcpKSA6ICdsYW5jb24nOwogaWYgKCRwb2ludFZlbnRlICE9PSAnbGFuY29uJyAmJiAkcG9pbnRWZW50ZSAhPT0gJ3BlbGlzc2FubmUnKSB7CiAgIGh0dHBfcmVzcG9uc2VfY29kZSg0MDApOwogICBlY2hvIGpzb25fZW5jb2RlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICJQb2ludCBkZSB2ZW50ZSBpbnZhbGlkZS4iXSk7CiAgIGV4aXQ7CiB9CiAKLy8gTWFnaWMgbGluayAodG9rZW4pCnRyeSB7CiAgJG1hZ2ljID0gYmluMmhleChyYW5kb21fYnl0ZXMoMTYpKTsKfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgLy8gZmFsbGJhY2sgdWx0cmEtc2ltcGxlCiAgJG1hZ2ljID0gYmluMmhleChvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoMTYpKTsKfQoKJHR6ID0gbmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJyk7CiRub3cgPSAobmV3IERhdGVUaW1lKCdub3cnLCAkdHopKS0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpOwokdG9kYXlTdGFydCA9IChuZXcgRGF0ZVRpbWUoJ3RvZGF5JywgJHR6KSktPmZvcm1hdCgnWS1tLWQgMDA6MDA6MDAnKTsKCnRyeSB7CiAgJHBkby0+YmVnaW5UcmFuc2FjdGlvbigpOwoKICAvLyBTdXBwcmltZXIgdG91dGVzIGxlcyBlbnRyw6llcyBkZXMgam91cnMgcHLDqWPDqWRlbnRzIChvbiBnYXJkZSB1bmlxdWVtZW50ICJhdWpvdXJkJ2h1aSIpCiAgJGRlbCA9ICRwZG8tPnByZXBhcmUoIkRFTEVURSBGUk9NIHBvc19saXZyZXVycyBXSEVSRSBjcmVhdGVkX2F0IDwgOnRvZGF5U3RhcnQiKTsKICAkZGVsLT5leGVjdXRlKFsnOnRvZGF5U3RhcnQnID0+ICR0b2RheVN0YXJ0XSk7CgogIC8vIEluc8OpcmVyIGxhIG5vdXZlbGxlIGVudHLDqWUKICAkaW5zID0gJHBkby0+cHJlcGFyZSgiCiAgICBJTlNFUlQgSU5UTyBwb3NfbGl2cmV1cnMgKHBob25lX2UxNjQsIG1hZ2ljX2xpbmssIHBvaW50X3ZlbnRlLCBjcmVhdGVkX2F0KQogICAgVkFMVUVTICg6cGhvbmUsIDptYWdpYywgOnBvaW50X3ZlbnRlLCA6Y3JlYXRlZF9hdCkKICAiKTsKICAkaW5zLT5leGVjdXRlKFsKICAgICc6cGhvbmUnID0+ICRwaG9uZSwKICAgICc6bWFnaWMnID0+ICRtYWdpYywKICAgICc6cG9pbnRfdmVudGUnID0+ICRwb2ludFZlbnRlLAogICAgJzpjcmVhdGVkX2F0JyA9PiAkbm93CiAgXSk7CgogICRzdG9yZUNvZGUgPSBwb2ludF92ZW50ZV90b19zdG9yZV9jb2RlKCRwb2ludFZlbnRlKTsKICAkdXJsID0gImh0dHBzOi8vbGl2cmV1ci5hcXVvaXBpenphLmZyP3N0b3JlPSIgLiByYXd1cmxlbmNvZGUoJHN0b3JlQ29kZSkgLiAiJm1sPSIgLiByYXd1cmxlbmNvZGUoJG1hZ2ljKTsKICAkc21zTWVzc2FnZSA9ICJWb2lsw6AgbGUgbGllbiBwb3VyIGFjY8OpZGVyIMOgIGwnaW50ZXJmYWNlIGRlIGxpdnJhaXNvblxuIiAuICR1cmw7CgogIC8vIEluc8OpcmVyIGxlIFNNUyBkYW5zIHN0ZF9zbXMgKGNvbG9ubmVzIG1pbmltYWxlcyBkZW1hbmTDqWVzKQogICRzbXMgPSAkcGRvLT5wcmVwYXJlKCIKICAgIElOU0VSVCBJTlRPIHN0ZF9zbXMgKHBob25lTnVtYmVyLCBtZXNzYWdlLCBzdGF0dXMsIHRpbWVzdGFtcCkKICAgIFZBTFVFUyAoOnBob25lTnVtYmVyLCA6bWVzc2FnZSwgOnN0YXR1cywgOnRpbWVzdGFtcCkKICAiKTsKICAkc21zLT5leGVjdXRlKFsKICAgICc6cGhvbmVOdW1iZXInID0+ICRwaG9uZSwKICAgICc6bWVzc2FnZScgPT4gJHNtc01lc3NhZ2UsCiAgICAnOnN0YXR1cycgPT4gJ3dhaXRpbmcnLAogICAgJzp0aW1lc3RhbXAnID0+ICRub3cKICBdKTsKCiAgJHBkby0+Y29tbWl0KCk7CgogIGVjaG8ganNvbl9lbmNvZGUoWwogICAgJ29rJyA9PiB0cnVlLAogICAgJ3Bob25lJyA9PiAkcGhvbmUsCiAgICAncG9pbnRfdmVudGUnID0+ICRwb2ludFZlbnRlLAogICAgJ3N0b3JlJyA9PiAkc3RvcmVDb2RlLAogICAgJ21hZ2ljX2xpbmsnID0+ICRtYWdpYywKICAgICdzbXNfc3RhdHVzJyA9PiAnd2FpdGluZycsCiAgICAndXJsJyA9PiAkdXJsCiAgXSk7CiAgZXhpdDsKfSBjYXRjaCAoUERPRXhjZXB0aW9uICRlKSB7CiAgaWYgKCRwZG8gJiYgJHBkby0+aW5UcmFuc2FjdGlvbigpKSB7CiAgICB0cnkgeyAkcGRvLT5yb2xsQmFjaygpOyB9IGNhdGNoIChFeGNlcHRpb24gJGV4KSB7fQogIH0KICBodHRwX3Jlc3BvbnNlX2NvZGUoNTAwKTsKICBlY2hvIGpzb25fZW5jb2RlKFsnb2snID0+IGZhbHNlLCAnZXJyb3InID0+ICJFcnJldXIgREIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50LiJdKTsKICBleGl0Owp9Cgo/Pgo="
            }
        },
        {
            "path": "pointages/includes/device_auth.php",
            "kind": "file",
            "before": {
                "exists": false
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 3143,
                "sha1": "c787267f45c2a7e2b76dabd6bae5ddd21230be9b",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwIHwgQ2VudHJhbGlzZSBs4oCZYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgZOKAmXVuIGFwcGFyZWlsIHBhciBtb3QgZGUgcGFzc2UgZXQgY29va2llIHPDqWN1cmlzw6kuIHwgRXhwb3NlOiBpc19kZXZpY2VfYXV0aG9yaXplZCwgYXV0aG9yaXplX2RldmljZV93aXRoX3Bhc3N3b3JkLCByZXF1aXJlX2RldmljZV9hdXRob3JpemVkIHwgRMOpcGVuZCBkZTogUERPLCBzZXNzaW9uIFBIUCwgY29va2llIG5hdmlnYXRldXIgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgY29va2llIGTigJlhcHBhcmVpbCwgY29udHLDtGxlIGTigJlhY2PDqHMsIHJlZGlyZWN0aW9uIGNvbm5leGlvbiB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBkZXZpY2VfbGFiZWwsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCkgKi8KCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKY29uc3QgREVWSUNFX0FVVEhfQ09PS0lFID0gJ3BvaW50YWdlc19kZXZpY2VfdG9rZW4nOwpjb25zdCBERVZJQ0VfQVVUSF9QQVNTV09SRF9TSEEyNTYgPSAnNDFmM2Q5ODU1NjZhNzJkMjA2OTEyODY1YjNhYzE4ZmJhZTE0YTA5ODY1ZjFjNzJjNTc2OTdhYmJlN2I5NGNiOCc7CmNvbnN0IERFVklDRV9BVVRIX0NPT0tJRV9UVEwgPSAzMTUzNjAwMDA7IC8vIDEwIGFucwoKZnVuY3Rpb24gZGV2aWNlX2F1dGhfY29va2llX29wdGlvbnMoKTogYXJyYXkKewogICAgcmV0dXJuIFsKICAgICAgICAnZXhwaXJlcycgPT4gdGltZSgpICsgREVWSUNFX0FVVEhfQ09PS0lFX1RUTCwKICAgICAgICAncGF0aCcgPT4gJy8nLAogICAgICAgICdzZWN1cmUnID0+ICFlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgJF9TRVJWRVJbJ0hUVFBTJ10gIT09ICdvZmYnLAogICAgICAgICdodHRwb25seScgPT4gdHJ1ZSwKICAgICAgICAnc2FtZXNpdGUnID0+ICdMYXgnLAogICAgXTsKfQoKZnVuY3Rpb24gZGV2aWNlX2F1dGhfdG9rZW5faGFzaChzdHJpbmcgJHRva2VuKTogc3RyaW5nCnsKICAgIHJldHVybiBoYXNoKCdzaGEyNTYnLCAkdG9rZW4pOwp9CgpmdW5jdGlvbiBpc19kZXZpY2VfYXV0aG9yaXplZChQRE8gJHBkbyk6IGJvb2wKewogICAgaWYgKGlzc2V0KCRfU0VTU0lPTlsnYXV0aG9yaXplZCddKSAmJiAkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSA9PT0gdHJ1ZSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgICR0b2tlbiA9IGlzc2V0KCRfQ09PS0lFW0RFVklDRV9BVVRIX0NPT0tJRV0pID8gKHN0cmluZykkX0NPT0tJRVtERVZJQ0VfQVVUSF9DT09LSUVdIDogJyc7CiAgICBpZiAoJHRva2VuID09PSAnJykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkdG9rZW5IYXNoID0gZGV2aWNlX2F1dGhfdG9rZW5faGFzaCgkdG9rZW4pOwogICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCdTRUxFQ1QgaWQgRlJPTSBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zIFdIRVJFIHRva2VuX2hhc2ggPSA6dG9rZW5faGFzaCBMSU1JVCAxJyk7CiAgICAkc3RtdC0+ZXhlY3V0ZShbJzp0b2tlbl9oYXNoJyA9PiAkdG9rZW5IYXNoXSk7CiAgICAkYXV0aG9yaXphdGlvbklkID0gJHN0bXQtPmZldGNoQ29sdW1uKCk7CgogICAgaWYgKCEkYXV0aG9yaXphdGlvbklkKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgICRfU0VTU0lPTlsnYXV0aG9yaXplZCddID0gdHJ1ZTsKCiAgICAkdXBkYXRlID0gJHBkby0+cHJlcGFyZSgnVVBEQVRFIHBvc19kZXZpY2VfYXV0aG9yaXphdGlvbnMgU0VUIGxhc3RfdXNlZF9hdCA9IE5PVygpIFdIRVJFIGlkID0gOmlkJyk7CiAgICAkdXBkYXRlLT5leGVjdXRlKFsnOmlkJyA9PiAoaW50KSRhdXRob3JpemF0aW9uSWRdKTsKCiAgICBzZXRjb29raWUoREVWSUNFX0FVVEhfQ09PS0lFLCAkdG9rZW4sIGRldmljZV9hdXRoX2Nvb2tpZV9vcHRpb25zKCkpOwogICAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIGF1dGhvcml6ZV9kZXZpY2Vfd2l0aF9wYXNzd29yZChQRE8gJHBkbywgc3RyaW5nICRwYXNzd29yZCk6IGJvb2wKewogICAgJHBhc3N3b3JkSGFzaCA9IGhhc2goJ3NoYTI1NicsICRwYXNzd29yZCk7CiAgICBpZiAoIWhhc2hfZXF1YWxzKERFVklDRV9BVVRIX1BBU1NXT1JEX1NIQTI1NiwgJHBhc3N3b3JkSGFzaCkpIHsKICAgICAgICAkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSA9IGZhbHNlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAkdG9rZW4gPSBiaW4yaGV4KHJhbmRvbV9ieXRlcygzMikpOwogICAgJHRva2VuSGFzaCA9IGRldmljZV9hdXRoX3Rva2VuX2hhc2goJHRva2VuKTsKICAgICRkZXZpY2VMYWJlbCA9IHRyaW0oKHN0cmluZykoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddID8/ICcnKSk7CiAgICBpZiAoc3RybGVuKCRkZXZpY2VMYWJlbCkgPiAxMjApIHsKICAgICAgICAkZGV2aWNlTGFiZWwgPSBzdWJzdHIoJGRldmljZUxhYmVsLCAwLCAxMjApOwogICAgfQoKICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgnCiAgICAgICAgSU5TRVJUIElOVE8gcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyAodG9rZW5faGFzaCwgZGV2aWNlX2xhYmVsLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpCiAgICAgICAgVkFMVUVTICg6dG9rZW5faGFzaCwgOmRldmljZV9sYWJlbCwgTk9XKCksIE5PVygpKQogICAgJyk7CiAgICAkc3RtdC0+ZXhlY3V0ZShbCiAgICAgICAgJzp0b2tlbl9oYXNoJyA9PiAkdG9rZW5IYXNoLAogICAgICAgICc6ZGV2aWNlX2xhYmVsJyA9PiAkZGV2aWNlTGFiZWwgIT09ICcnID8gJGRldmljZUxhYmVsIDogbnVsbCwKICAgIF0pOwoKICAgICRfU0VTU0lPTlsnYXV0aG9yaXplZCddID0gdHJ1ZTsKICAgIHNldGNvb2tpZShERVZJQ0VfQVVUSF9DT09LSUUsICR0b2tlbiwgZGV2aWNlX2F1dGhfY29va2llX29wdGlvbnMoKSk7CiAgICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gcmVxdWlyZV9kZXZpY2VfYXV0aG9yaXplZChQRE8gJHBkbyk6IHZvaWQKewogICAgaWYgKGlzX2RldmljZV9hdXRob3JpemVkKCRwZG8pKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGhlYWRlcignTG9jYXRpb246IGNvbm5leGlvbi5waHAnKTsKICAgIGV4aXQ7Cn0="
            }
        },
        {
            "path": "pointages/index.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 23559,
                "sha1": "29ad737f565dfe20474fa680b4c68b275b74360e",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvaW5kZXgucGhwIHwgQWZmaWNoZSBsZSB0YWJsZWF1IGRlIHBvaW50YWdlIGRlcyBzYWxhcmnDqXMgZXQgZ8OocmUgbOKAmWFjY8OocyBwYXIgc2Vzc2lvbi9JUCwgYWluc2kgcXVlIGxlcyBtb2RhbGVzIGTigJlhY3Rpb24gZXQgZOKAmWFkbWluaXN0cmF0aW9uLiB8IEV4cG9zZTogYXNzZXRfdmVyc2lvbiwgYWZmaWNoZXJNb2RhbCwgb3BlblBpbk1vZGFsLCBjbG9zZVBpbk1vZGFsLCB2ZXJpZmllclBpbiwgb3BlbkVtcGxveWVlTW9kYWwsIGNsb3NlRW1wbG95ZWVNb2RhbCwgc3VibWl0RW1wbG95ZWVQdW5jaCwgZ29Ub0VtcGxveWVlRGV0YWlscyB8IETDqXBlbmQgZGU6IHBvaW50YWdlcy9jb25maWcucGhwLCBjb25uZXhpb24ucGhwLCB2ZXJpZmllcl9waW4ucGhwLCBhZG1pbi5waHAsIGVucmVnaXN0cmVtZW50X2Fycml2ZWUucGhwLCBlbnJlZ2lzdHJlbWVudF9kZXBhcnQucGhwLCBwb2ludGFnZS5waHAsIGpzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcywganMvdmVuZG9yL2Jvb3RzdHJhcC5taW4uanMsIGpzL3BsdWdpbnMuanMsIGpzL21haW4uanMsIGpzL2RyaXZlci1tb2RhbC5qcyB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCByZWRpcmVjdGlvbiBk4oCZYWNjw6hzLCBsZWN0dXJlIGRlcyBwb2ludGFnZXMvZW1wbG95w6lzLCBtb2RhbGVzIFVJLCBhcHBlbHMgQUpBWCB8IFRhYmxlczogcG9zX2lwX2F1dGhvcml6YXRpb25zKGlwX2FkZHJlc3MsYXV0aG9yaXplZF91bnRpbCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoVXNlcklELE5vbSxQcmVub20sU3RhdHV0KSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELFVzZXJJRCxEYXRlSGV1cmVFbnRyZWUsRGF0ZUhldXJlU29ydGllKSAqLwovLyBEw6ltYXJyYWdlIG91IHJlcHJpc2UgZGUgbGEgc2Vzc2lvbgpzZXNzaW9uX3N0YXJ0KCk7CmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwoKLy8gU3VwcHJpbWVyIHVuaXF1ZW1lbnQgJF9TRVNTSU9OWydwaW5fdmVyaWZpZSddCmlmIChpc3NldCgkX1NFU1NJT05bJ3Bpbl92ZXJpZmllJ10pKSB7CiAgdW5zZXQoJF9TRVNTSU9OWydwaW5fdmVyaWZpZSddKTsKfQoKLy8gQ29ubmV4aW9uIMOgIGxhIGJhc2UgZGUgZG9ubsOpZXMKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsgLy8gQXNzdXJlei12b3VzIHF1ZSBjZSBmaWNoaWVyIGV4aXN0ZSBldCBjb250aWVudCBsZXMgYm9ubmVzIGluZm9ybWF0aW9ucyBkZSBjb25uZXhpb24KIAogLy8gVsOpcmlmaWNhdGlvbiBkZSBsJ2F1dG9yaXNhdGlvbiBkJ2FjY8OocwogJGlwX2FkZHJlc3MgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKICRpc0F1dGhvcml6ZWQgPSBmYWxzZTsKIAogLy8gVXRpbGlzZXogbCdvYmpldCBQRE8gZMOpasOgIGNyw6nDqSBkYW5zIGNvbmZpZy5waHAKIGdsb2JhbCAkcGRvOwoKaWYgKGlzc2V0KCRfU0VTU0lPTlsnYXV0aG9yaXplZCddKSAmJiAkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSA9PT0gdHJ1ZSkgewogIC8vIEwndXRpbGlzYXRldXIgZXN0IGTDqWrDoCBhdXRvcmlzw6kgdmlhIGxhIHNlc3Npb24KICAkaXNBdXRob3JpemVkID0gdHJ1ZTsKfSBlbHNlIHsKICAvLyBWw6lyaWZpY2F0aW9uIGRlIGwnYXV0b3Jpc2F0aW9uIGRlIGwnSVAgZGFucyBsYSBiYXNlIGRlIGRvbm7DqWVzCiAgdHJ5IHsKICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUIENPVU5UKCopIEZST00gcG9zX2lwX2F1dGhvcml6YXRpb25zIFdIRVJFIGlwX2FkZHJlc3MgPSA6aXBfYWRkcmVzcyBBTkQgYXV0aG9yaXplZF91bnRpbCA+IE5PVygpIik7CiAgICAkc3RtdC0+ZXhlY3V0ZShbJzppcF9hZGRyZXNzJyA9PiAkaXBfYWRkcmVzc10pOwogICAgJGNvdW50ID0gJHN0bXQtPmZldGNoQ29sdW1uKCk7CiAgICAKICAgIGlmICgkY291bnQgPiAwKSB7CiAgICAgIC8vIEwnYWRyZXNzZSBJUCBlc3QgYXV0b3Jpc8OpZQogICAgICAkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSA9IHRydWU7CiAgICAgICRpc0F1dGhvcml6ZWQgPSB0cnVlOwogICAgfQogIH0gY2F0Y2ggKFBET0V4Y2VwdGlvbiAkZSkgewogICAgLy8gRW4gY2FzIGQnZXJyZXVyIGRlIGJhc2UgZGUgZG9ubsOpZXMsIGFmZmljaGV6IGwnZXJyZXVyCiAgICBlY2hvICJFcnJldXIgZGUgYmFzZSBkZSBkb25uw6llcyA6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpOwogICAgZXhpdDsKICB9Cn0KCi8vIFNpIGwndXRpbGlzYXRldXIgbidlc3QgcGFzIGF1dG9yaXPDqSwgcmVkaXJpZ2V6LWxlIHZlcnMgY29ubmV4aW9uLnBocAppZiAoISRpc0F1dGhvcml6ZWQpIHsKICBoZWFkZXIoJ0xvY2F0aW9uOiBjb25uZXhpb24ucGhwP2FjY2Vzcz1yZWZ1c2VkJyk7CiAgZXhpdDsKfQoKPz4KCgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCjx0aXRsZT5Qb2ludGFnZXMgU2FsYXJpw6lzPC90aXRsZT4KCgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKPD9waHAKZnVuY3Rpb24gYXNzZXRfdmVyc2lvbihzdHJpbmcgJHJlbGF0aXZlUGF0aCk6IHN0cmluZwp7CiAgJGZ1bGxQYXRoID0gX19ESVJfXyAuICcvJyAuIGx0cmltKCRyZWxhdGl2ZVBhdGgsICcvJyk7CiAgJHZlcnNpb24gPSBmaWxlX2V4aXN0cygkZnVsbFBhdGgpID8gZmlsZW10aW1lKCRmdWxsUGF0aCkgOiB0aW1lKCk7CiAgcmV0dXJuICRyZWxhdGl2ZVBhdGggLiAnP3Y9JyAuIChpbnQpJHZlcnNpb247Cn0KPz4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9ib290c3RyYXAubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdjc3MvZm9udEF3ZXNvbWUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdjc3MvZm9udEF3ZXNvbWUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9oZXJvLXNsaWRlci5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdjc3Mvc3R5bGUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9ob21lLWJ1dHRvbnMuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9kcml2ZXItbW9kYWwuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+Cgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjMwMCw0MDAsNjAwLDcwMCw4MDAiIHJlbD0ic3R5bGVzaGVldCI+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL3ZlbmRvci9tb2Rlcm5penItMi44LjMtcmVzcG9uZC0xLjQuMi5taW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KCgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL3ZlbmRvci9tb2Rlcm5penItMi44LjMtcmVzcG9uZC0xLjQuMi5taW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KCjwvaGVhZD4KCjxib2R5IGNsYXNzPSJwYWdlLWluZGV4IHRoZW1lLWRhcmsiPgoKCgo8ZGl2IGlkPSJhYm91dCIgY2xhc3M9IiI+Cgo8ZGl2IGNsYXNzPSJzZWN0aW9uLWhlYWRpbmciPgo8aDE+UG9pbnRhZ2VzIHNhbGFyacOpczwvaDE+CjxkaXYgY2xhc3M9ImxpbmUtZGVjIj48L2Rpdj4KPGNlbnRlcj4KPGJyPgo8Zm9udCBjb2xvcj0iYmxhY2siIHNpemU9IjQiID4KPHN0cm9uZz4KPD9waHAKLy8gUsOpY3Vww6hyZSBsZSBkZXJuaWVyIHBvaW50YWdlIGRlIGNoYXF1ZSBlbXBsb3nDqSBwb3VyIGTDqXRlcm1pbmVyIHMnaWwgZXN0ICJwb2ludMOpIgokY3VycmVudE1vbnRoID0gKGludClkYXRlKCduJyk7CiRjdXJyZW50WWVhciA9IChpbnQpZGF0ZSgnWScpOwokbm93UGFyaXMgPSBkYXRlKCdZLW0tZCBIOmk6cycpOwoKJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCIKICBTRUxFQ1QKICAgIHUuVXNlcklELAogICAgdS5Ob20sCiAgICB1LlByZW5vbSwKICAgIHAuRGF0ZUhldXJlRW50cmVlLAogICAgcC5EYXRlSGV1cmVTb3J0aWUsCiAgICBtaC5zZWNvbmRzX3dvcmtlZCwKICAgIG1oLm1heF9wdW5jaF9zZWNvbmRzCiAgRlJPTSB6X3B0Z19hcXBfdXRpbGlzYXRldXJzIHUKICBMRUZUIEpPSU4gel9wdGdfYXFwX3BvaW50YWdlcyBwCiAgICBPTiBwLlBvaW50YWdlSUQgPSAoCiAgICAgIFNFTEVDVCBwMi5Qb2ludGFnZUlECiAgICAgIEZST00gel9wdGdfYXFwX3BvaW50YWdlcyBwMgogICAgICBXSEVSRSBwMi5Vc2VySUQgPSB1LlVzZXJJRAogICAgICBPUkRFUiBCWSBwMi5EYXRlSGV1cmVFbnRyZWUgREVTQywgcDIuUG9pbnRhZ2VJRCBERVNDCiAgICAgIExJTUlUIDEKICAgICkKICBMRUZUIEpPSU4gKAogICAgU0VMRUNUCiAgICAgIFVzZXJJRCwKICAgICAgU1VNKAogICAgICAgIFRJTUVTVEFNUERJRkYoCiAgICAgICAgICBTRUNPTkQsCiAgICAgICAgICBEYXRlSGV1cmVFbnRyZWUsCiAgICAgICAgICBDT0FMRVNDRShEYXRlSGV1cmVTb3J0aWUsIDpub3dQYXJpc1N1bSkKICAgICAgICApCiAgICAgICkgQVMgc2Vjb25kc193b3JrZWQsCiAgICAgIE1BWCgKICAgICAgICBUSU1FU1RBTVBESUZGKAogICAgICAgICAgU0VDT05ELAogICAgICAgICAgRGF0ZUhldXJlRW50cmVlLAogICAgICAgICAgQ09BTEVTQ0UoRGF0ZUhldXJlU29ydGllLCA6bm93UGFyaXNNYXgpCiAgICAgICAgKQogICAgICApIEFTIG1heF9wdW5jaF9zZWNvbmRzCiAgICBGUk9NIHpfcHRnX2FxcF9wb2ludGFnZXMKICAgIFdIRVJFIE1PTlRIKERhdGVIZXVyZUVudHJlZSkgPSA6Y3VycmVudE1vbnRoCiAgICAgIEFORCBZRUFSKERhdGVIZXVyZUVudHJlZSkgPSA6Y3VycmVudFllYXIKICAgIEdST1VQIEJZIFVzZXJJRAogICkgbWggT04gbWguVXNlcklEID0gdS5Vc2VySUQKICBXSEVSRSB1LlN0YXR1dCA9ICdhY3RpZicKIik7CiRzdG10LT5leGVjdXRlKFsKICAnOm5vd1BhcmlzU3VtJyA9PiAkbm93UGFyaXMsCiAgJzpub3dQYXJpc01heCcgPT4gJG5vd1BhcmlzLAogICc6Y3VycmVudE1vbnRoJyA9PiAkY3VycmVudE1vbnRoLAogICc6Y3VycmVudFllYXInID0+ICRjdXJyZW50WWVhciwKXSk7CiRlbXBsb3llc0FjdGlmcyA9ICRzdG10LT5mZXRjaEFsbChQRE86OkZFVENIX0FTU09DKTsKCmVjaG8gJzx0YWJsZSBjbGFzcz0iZW1wbG95ZWUtZ3JpZCI+JzsKJGNvbXB0ZXVyID0gMDsKCmZvcmVhY2ggKCRlbXBsb3llc0FjdGlmcyBhcyAkZW1wbG95ZSkgewogIC8vIExvZ2lxdWUgc2ltaWxhaXJlIHBvdXIgYWZmaWNoZXIgbGVzIGVtcGxvecOpcwogIGlmICgkY29tcHRldXIgJSAyID09IDApIHsKICAgIGVjaG8gJzx0cj4nOwogIH0KICAkbm9tUmF3ID0gaXNzZXQoJGVtcGxveWVbJ05vbSddKSA/IChzdHJpbmcpJGVtcGxveWVbJ05vbSddIDogJyc7CiAgJHByZW5vbVJhdyA9IGlzc2V0KCRlbXBsb3llWydQcmVub20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydQcmVub20nXSA6ICcnOwogICRub20gPSBtYl9zdHJ0b3VwcGVyKCRub21SYXcsICdVVEYtOCcpOwogICRwcmVub20gPSBtYl9zdHJ0b3VwcGVyKCRwcmVub21SYXcsICdVVEYtOCcpOwogICRwcmVub21KcyA9IGh0bWxzcGVjaWFsY2hhcnMoCiAgICBqc29uX2VuY29kZSgkcHJlbm9tUmF3LCBKU09OX1VORVNDQVBFRF9VTklDT0RFIHwgSlNPTl9IRVhfVEFHIHwgSlNPTl9IRVhfQU1QIHwgSlNPTl9IRVhfQVBPUyB8IEpTT05fSEVYX1FVT1QpLAogICAgRU5UX1FVT1RFUywKICAgICdVVEYtOCcKICApOwoKICAvLyBVbiBlbXBsb3nDqSBlc3QgInBvaW50w6kiIHMnaWwgYSB1biBkZXJuaWVyIHBvaW50YWdlIGRvbnQgRGF0ZUhldXJlU29ydGllIGVzdCBOVUxMCiAgLy8gKGV0IHF1J2lsIGV4aXN0ZSBiaWVuIHVuZSBEYXRlSGV1cmVFbnRyZWUpLgogICRpc1BvaW50ZWQgPSAoIWVtcHR5KCRlbXBsb3llWydEYXRlSGV1cmVFbnRyZWUnXSkgJiYgJGVtcGxveWVbJ0RhdGVIZXVyZVNvcnRpZSddID09PSBudWxsKTsKCiAgLy8gRMOpdGVjdGlvbiAicG9pbnRhZ2UgPiA4SCIgOgogIC8vIC0gdmlhIGxhIGR1csOpZSBtYXggZGVzIHBvaW50YWdlcyBkdSBtb2lzIChtYXhfcHVuY2hfc2Vjb25kcyksCiAgLy8gLSBldCB2aWEgbGUgZGVybmllciBwb2ludGFnZSAoZW4gY291cnMgb3UgdGVybWluw6kpLCBtw6ptZSBzJ2lsIGVzdCBob3JzIG1vaXMgKGNhcyByYXJlLCBtYWlzIHJvYnVzdGUpLgogICRtYXhQdW5jaFNlY29uZHMgPSBpc3NldCgkZW1wbG95ZVsnbWF4X3B1bmNoX3NlY29uZHMnXSkgPyAoaW50KSRlbXBsb3llWydtYXhfcHVuY2hfc2Vjb25kcyddIDogMDsKICAkbGFzdFB1bmNoU2Vjb25kcyA9IDA7CiAgaWYgKCFlbXB0eSgkZW1wbG95ZVsnRGF0ZUhldXJlRW50cmVlJ10pKSB7CiAgICAkc3RhcnRUcyA9IHN0cnRvdGltZSgkZW1wbG95ZVsnRGF0ZUhldXJlRW50cmVlJ10pOwogICAgJGVuZFRzID0gKCRlbXBsb3llWydEYXRlSGV1cmVTb3J0aWUnXSA9PT0gbnVsbCB8fCAkZW1wbG95ZVsnRGF0ZUhldXJlU29ydGllJ10gPT09ICcnKQogICAgICA/IHN0cnRvdGltZSgkbm93UGFyaXMpCiAgICAgIDogc3RydG90aW1lKCRlbXBsb3llWydEYXRlSGV1cmVTb3J0aWUnXSk7CiAgICBpZiAoJHN0YXJ0VHMgIT09IGZhbHNlICYmICRlbmRUcyAhPT0gZmFsc2UgJiYgJGVuZFRzID49ICRzdGFydFRzKSB7CiAgICAgICRsYXN0UHVuY2hTZWNvbmRzID0gKGludCkoJGVuZFRzIC0gJHN0YXJ0VHMpOwogICAgfQogIH0KICAkaGFzUHVuY2hPdmVyOGggPSAoJG1heFB1bmNoU2Vjb25kcyA+PSAyODgwMCkgfHwgKCRsYXN0UHVuY2hTZWNvbmRzID49IDI4ODAwKTsKCiAgJGJ0bkNsYXNzID0gJGlzUG9pbnRlZCA/ICdlbXBsb3llZS1idG4gc3RhdHVzLXBvaW50ZWQnIDogJ2VtcGxveWVlLWJ0biBzdGF0dXMtZGVwb2ludGVkJzsKICBpZiAoJGhhc1B1bmNoT3ZlcjhoKSB7CiAgICAkYnRuQ2xhc3MgLj0gJyBzdGF0dXMtcHJvYmxlbSc7CiAgfQogIC8vIEljw7RuZSB1bmlxdWVtZW50IHF1YW5kIHBvaW50w6kKICAkaWNvbkh0bWwgPSAnJzsKICBpZiAoJGlzUG9pbnRlZCkgewogICAgJGljb25IdG1sID0gJzxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUgc3RhdHVzLWljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIiB0aXRsZT0iUG9pbnTDqSI+PC9pPic7CiAgfQoKICAkc2Vjb25kc1dvcmtlZCA9IGlzc2V0KCRlbXBsb3llWydzZWNvbmRzX3dvcmtlZCddKSA/IChmbG9hdCkkZW1wbG95ZVsnc2Vjb25kc193b3JrZWQnXSA6IDAuMDsKICAkbW9udGhIb3VycyA9ICRzZWNvbmRzV29ya2VkID4gMCA/ICgkc2Vjb25kc1dvcmtlZCAvIDM2MDApIDogMC4wOwogICRtb250aEhvdXJzVGV4dCA9IG51bWJlcl9mb3JtYXQoJG1vbnRoSG91cnMsIDIsICcuJywgJycpIC4gJ0gnOwogICRtb250aEhvdXJzSHRtbCA9ICc8c3BhbiBjbGFzcz0ibW9udGgtaG91cnMiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRtb250aEhvdXJzVGV4dCwgRU5UX1FVT1RFUywgJ1VURi04JykgLiAnPC9zcGFuPic7CgogIGVjaG8gJzx0ZCBjbGFzcz0iZW1wbG95ZWUtZ3JpZC1jZWxsIj4nCiAgICAgLiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSInIC4gJGJ0bkNsYXNzIC4gJyIgb25jbGljaz0ib3BlbkVtcGxveWVlTW9kYWwoJyAuIChpbnQpJGVtcGxveWVbJ1VzZXJJRCddIC4gJywgJyAuICgkaXNQb2ludGVkID8gJzEnIDogJzAnKSAuICcsICcgLiAkcHJlbm9tSnMgLiAnKSI+JwogICAgIC4gJGljb25IdG1sCiAgICAgLiAnPHNwYW4gY2xhc3M9ImVtcGxveWVlLW5hbWUiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRub20sIEVOVF9RVU9URVMsICdVVEYtOCcpIC4gJzwvc3Bhbj4nCiAgICAgLiAnPHNwYW4gY2xhc3M9ImVtcGxveWVlLWZpcnN0bmFtZSI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJHByZW5vbSwgRU5UX1FVT1RFUywgJ1VURi04JykgLiAnPC9zcGFuPicKICAgICAuICRtb250aEhvdXJzSHRtbAogICAgIC4gJzwvYnV0dG9uPicKICAgICAuICc8L3RkPic7CgogIGlmICgkY29tcHRldXIgJSAyID09IDEpIHsKICAgIGVjaG8gJzwvdHI+JzsKICB9CiAgJGNvbXB0ZXVyKys7Cn0KIAogZWNobyAnPC90YWJsZT4nOwogPz4KIAogPGRpdiBjbGFzcz0iZHJpdmVyLXBob25lLWFjdGlvbnMiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luOjE4cHggMCA2cHg7Ij4KICAgPGJ1dHRvbgogICAgIHR5cGU9ImJ1dHRvbiIKICAgICBpZD0iZHJpdmVyUGhvbmVCdXR0b24iCiAgICAgY2xhc3M9ImRyaXZlci1waG9uZS10cmlnZ2VyIgogICAgIG9uY2xpY2s9Im9wZW5Ecml2ZXJQaG9uZU1vZGFsKCkiCiAgID4KICAgICBFbnZveWVyIFNNUyBsaXZyZXVyCiAgIDwvYnV0dG9uPgogPC9kaXY+CgogPC9zdHJvbmc+CiA8L2ZvbnQ+CiA8L2NlbnRlcj4KIDwvZGl2PgogPC9kaXY+CgoKPGJyPjxicj4KCjxwPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImFmZmljaGVyTW9kYWwoKSI+R2VzdGlvbiBlbXBsb3nDqXM8L2E+PC9wPjxicj4KCgoKCgo8L2Rpdj4KCgoKCjwhLS0gTW9kYWwgUElOIChkZXNpZ24gcmVmYWl0KSAtLT4KPGRpdiBpZD0ibW9kYWxCYWNrZ3JvdW5kIiBvbmNsaWNrPSJjbG9zZVBpbk1vZGFsKCkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KPGRpdiBpZD0icGluTW9kYWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJwaW5Nb2RhbFRpdGxlIj4KICA8Zm9ybSBpZD0icGluRm9ybSIgb25zdWJtaXQ9InZlcmlmaWVyUGluKCk7IHJldHVybiBmYWxzZTsiPgogICAgPGgyIGlkPSJwaW5Nb2RhbFRpdGxlIiBjbGFzcz0icGluLW1vZGFsLXRpdGxlIj5Db2RlIFBJTjwvaDI+CiAgICA8cCBjbGFzcz0icGluLW1vZGFsLXN1YnRpdGxlIj5TYWlzaXNzZXogdm90cmUgY29kZSDDoCA0IGNoaWZmcmVzPC9wPgoKICAgIDxkaXYgY2xhc3M9InBpbi1pbnB1dC13cmFwcGVyIiBvbmNsaWNrPSJmb2N1c1BpbklucHV0KCkiPgogICAgICA8bGFiZWwgZm9yPSJwaW5JbnB1dCIgY2xhc3M9InNyLW9ubHkiPkNvZGUgUElOICg0IGNoaWZmcmVzKTwvbGFiZWw+CiAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3hlcyIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3giIGRhdGEtaWR4PSIwIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3giIGRhdGEtaWR4PSIzIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxpbnB1dAogICAgICAgIHR5cGU9InRlbCIKICAgICAgICBpZD0icGluSW5wdXQiCiAgICAgICAgY2xhc3M9InBpbi1oaWRkZW4taW5wdXQiCiAgICAgICAgaW5wdXRtb2RlPSJudW1lcmljIgogICAgICAgIHBhdHRlcm49IlswLTldKiIKICAgICAgICBtYXhsZW5ndGg9IjQiCiAgICAgICAgYXV0b2NvbXBsZXRlPSJvZmYiCiAgICAgICAgYXV0b2NhcGl0YWxpemU9Im9mZiIKICAgICAgICBhdXRvY29ycmVjdD0ib2ZmIgogICAgICAgIHNwZWxsY2hlY2s9ImZhbHNlIgogICAgICAgIHRpdGxlPSJTZXVsZW1lbnQgZGVzIGNoaWZmcmVzLiIKICAgICAgICB2YWx1ZT0iIgogICAgICA+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJwaW4tbW9kYWwtYWN0aW9ucyI+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icGluLW1vZGFsLWJ0biBjYW5jZWwiIG9uY2xpY2s9ImNsb3NlUGluTW9kYWwoKSI+QW5udWxlcjwvYnV0dG9uPgogICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InBpbi1tb2RhbC1idG4gY29uZmlybSI+VmFsaWRlcjwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9mb3JtPgo8L2Rpdj4KCjwhLS0gTW9kYWwgQWN0aW9ucyBFbXBsb3nDqSAoQXJyaXbDqWUvRMOpcGFydCArIFZvaXIgZMOpdGFpbCkgLS0+CjxkaXYgaWQ9ImVtcGxveWVlTW9kYWxCYWNrZ3JvdW5kIiBvbmNsaWNrPSJjbG9zZUVtcGxveWVlTW9kYWwoKSI+PC9kaXY+CjxkaXYgaWQ9ImVtcGxveWVlQWN0aW9uTW9kYWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJlbXBsb3llZUFjdGlvblRpdGxlIj4KICA8aDIgaWQ9ImVtcGxveWVlQWN0aW9uVGl0bGUiPkFjdGlvbnM8L2gyPgogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iZW1wbG95ZWVQdW5jaEJ1dHRvbiIgY2xhc3M9ImVtcGxveWVlLW1vZGFsLWJ0biBwdW5jaCIgb25jbGljaz0ic3VibWl0RW1wbG95ZWVQdW5jaCgpIj48L2J1dHRvbj4KICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImVtcGxveWVlLW1vZGFsLWJ0biBkZXRhaWxzIiBvbmNsaWNrPSJnb1RvRW1wbG95ZWVEZXRhaWxzKCkiPlZvaXIgZMOpdGFpbCBkZXMgaGV1cmVzPC9idXR0b24+CjwvZGl2PgoKPCEtLSBNb2RhbCBMaXZyZXVyIChzw6lsZWN0aW9uICsgZW52b2kgU01TKSAtLT4KPGRpdiBpZD0iZHJpdmVyTW9kYWxCYWNrZ3JvdW5kIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWJhY2tkcm9wIiBvbmNsaWNrPSJjbG9zZURyaXZlclBob25lTW9kYWwoKSIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pgo8ZGl2IGlkPSJkcml2ZXJQaG9uZU1vZGFsIiBjbGFzcz0iZHJpdmVyLW1vZGFsIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFiZWxsZWRieT0iZHJpdmVyUGhvbmVNb2RhbFRpdGxlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgPGZvcm0gaWQ9ImRyaXZlclBob25lRm9ybSIgb25zdWJtaXQ9InN1Ym1pdERyaXZlclBob25lKCk7IHJldHVybiBmYWxzZTsiPgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWhlYWRlciI+CiAgICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1oZWFkZXItdGV4dCI+CiAgICAgICAgPGgyIGlkPSJkcml2ZXJQaG9uZU1vZGFsVGl0bGUiIGNsYXNzPSJkcml2ZXItbW9kYWwtdGl0bGUiPkVudm95ZXIgU01TIGxpdnJldXI8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkcml2ZXItbW9kYWwtc3VidGl0bGUiPlPDqWxlY3Rpb25uZXogdW4gbGl2cmV1ciBwb3VyIGxlIHBvaW50IGRlIHZlbnRlIGRlIGzigJlhcHBhcmVpbDwvcD4KICAgICAgPC9kaXY+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWNsb3NlIiBvbmNsaWNrPSJjbG9zZURyaXZlclBob25lTW9kYWwoKSIgYXJpYS1sYWJlbD0iRmVybWVyIj7DlzwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLWZpZWxkIj4KICAgICAgPGxhYmVsIGZvcj0iZHJpdmVyU2VsZWN0IiBjbGFzcz0iZHJpdmVyLWxhYmVsIj5MaXZyZXVyPC9sYWJlbD4KICAgICAgPHNlbGVjdCBpZD0iZHJpdmVyU2VsZWN0IiBjbGFzcz0iZHJpdmVyLXNlbGVjdCIgcmVxdWlyZWQ+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5DaGFyZ2VtZW50IGRlcyBsaXZyZXVyc+KApjwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgICAgPHNtYWxsIGlkPSJkcml2ZXJTZWxlY3RlZFBob25lSGVscCIgY2xhc3M9ImRyaXZlci1oZWxwIj5Tw6lsZWN0aW9ubmV6IHVuIGxpdnJldXIgcG91ciBhZmZpY2hlciBzb24gbnVtw6lyby48L3NtYWxsPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLWZpZWxkIj4KICAgICAgPGxhYmVsIGZvcj0iZHJpdmVyUG9pbnRWZW50ZSIgY2xhc3M9ImRyaXZlci1sYWJlbCI+UG9pbnQgZGUgdmVudGU8L2xhYmVsPgogICAgICA8c2VsZWN0IGlkPSJkcml2ZXJQb2ludFZlbnRlIiBjbGFzcz0iZHJpdmVyLXNlbGVjdCIgZGlzYWJsZWQ+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibGFuY29uIj5MYW7Dp29uPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0icGVsaXNzYW5uZSI+UMOpbGlzc2FubmU8L29wdGlvbj4KICAgICAgPC9zZWxlY3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtYWN0aW9ucyBkcml2ZXItbW9kYWwtYWN0aW9ucy1zcGxpdCI+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWJ0biBzZWNvbmRhcnkiIG9uY2xpY2s9Im9wZW5Ecml2ZXJNYW5hZ2VNb2RhbCgpIj5Hw6lyZXIgbGVzIGxpdnJldXJzPC9idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtYWN0aW9ucyI+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWJ0biBjYW5jZWwiIG9uY2xpY2s9ImNsb3NlRHJpdmVyUGhvbmVNb2RhbCgpIj5Bbm51bGVyPC9idXR0b24+CiAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iZHJpdmVyLW1vZGFsLWJ0biBjb25maXJtIj5FbnZveWVyIFNNUzwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9mb3JtPgo8L2Rpdj4KCjwhLS0gTW9kYWwgZ2VzdGlvbiBsaXZyZXVycyAtLT4KPGRpdiBpZD0iZHJpdmVyTWFuYWdlTW9kYWxCYWNrZ3JvdW5kIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWJhY2tkcm9wIiBvbmNsaWNrPSJjbG9zZURyaXZlck1hbmFnZU1vZGFsKCkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KPGRpdiBpZD0iZHJpdmVyTWFuYWdlTW9kYWwiIGNsYXNzPSJkcml2ZXItbW9kYWwgZHJpdmVyLW1hbmFnZS1tb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9ImRyaXZlck1hbmFnZU1vZGFsVGl0bGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtaGVhZGVyIj4KICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1oZWFkZXItdGV4dCI+CiAgICAgIDxoMiBpZD0iZHJpdmVyTWFuYWdlTW9kYWxUaXRsZSIgY2xhc3M9ImRyaXZlci1tb2RhbC10aXRsZSI+R8OpcmVyIGxlcyBsaXZyZXVyczwvaDI+CiAgICAgIDxwIGNsYXNzPSJkcml2ZXItbW9kYWwtc3VidGl0bGUiPkFqb3V0LCBtb2RpZmljYXRpb24gZXQgc3VwcHJlc3Npb24gcG91ciBsZSBwb2ludCBkZSB2ZW50ZSBjb3VyYW50PC9wPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRyaXZlci1tb2RhbC1jbG9zZSIgb25jbGljaz0iY2xvc2VEcml2ZXJNYW5hZ2VNb2RhbCgpIiBhcmlhLWxhYmVsPSJGZXJtZXIiPsOXPC9idXR0b24+CiAgPC9kaXY+CgogIDxmb3JtIGlkPSJkcml2ZXJNYW5hZ2VGb3JtIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJkcml2ZXJNYW5hZ2VNb2RlIiB2YWx1ZT0iY3JlYXRlIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJkcml2ZXJFZGl0T3JpZ2luYWxQaG9uZSIgdmFsdWU9IiI+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLWZpZWxkIj4KICAgICAgPGxhYmVsIGZvcj0iZHJpdmVyTWFuYWdlU2VsZWN0IiBjbGFzcz0iZHJpdmVyLWxhYmVsIj5MaXZyZXVyIGV4aXN0YW50PC9sYWJlbD4KICAgICAgPHNlbGVjdCBpZD0iZHJpdmVyTWFuYWdlU2VsZWN0IiBjbGFzcz0iZHJpdmVyLXNlbGVjdCI+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5Ob3V2ZWF1IGxpdnJldXI8L29wdGlvbj4KICAgICAgPC9zZWxlY3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJNYW5hZ2VOYW1lIiBjbGFzcz0iZHJpdmVyLWxhYmVsIj5Ob20gYWZmaWNow6k8L2xhYmVsPgogICAgICA8aW5wdXQKICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgIGlkPSJkcml2ZXJNYW5hZ2VOYW1lIgogICAgICAgIGNsYXNzPSJkcml2ZXItaW5wdXQiCiAgICAgICAgbWF4bGVuZ3RoPSIxMjAiCiAgICAgICAgcGxhY2Vob2xkZXI9IkV4OiBLYXJpbSIKICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLWZpZWxkIj4KICAgICAgPGxhYmVsIGZvcj0iZHJpdmVyTWFuYWdlUGhvbmUiIGNsYXNzPSJkcml2ZXItbGFiZWwiPlTDqWzDqXBob25lPC9sYWJlbD4KICAgICAgPGlucHV0CiAgICAgICAgdHlwZT0idGVsIgogICAgICAgIGlkPSJkcml2ZXJNYW5hZ2VQaG9uZSIKICAgICAgICBjbGFzcz0iZHJpdmVyLWlucHV0IgogICAgICAgIGlucHV0bW9kZT0ibnVtZXJpYyIKICAgICAgICBwYXR0ZXJuPSJbMC05XSoiCiAgICAgICAgbWF4bGVuZ3RoPSIxNiIKICAgICAgICBwbGFjZWhvbGRlcj0iRXg6IDA2MTg1MjkzNzUiCiAgICAgICAgYXV0b2NvbXBsZXRlPSJvZmYiCiAgICAgICAgYXV0b2NhcGl0YWxpemU9Im9mZiIKICAgICAgICBhdXRvY29ycmVjdD0ib2ZmIgogICAgICAgIHNwZWxsY2hlY2s9ImZhbHNlIgogICAgICA+CiAgICAgIDxzbWFsbCBjbGFzcz0iZHJpdmVyLWhlbHAiPkZvcm1hdCBhY2NlcHTDqSA6IDA2MTg1MjkzNzUsIDMzNjE4NTI5Mzc1IG91IDAwMzM2MTg1MjkzNzUuPC9zbWFsbD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGRhbmdlciIgb25jbGljaz0iZGVsZXRlU2VsZWN0ZWREcml2ZXIoKSI+U3VwcHJpbWVyPC9idXR0b24+CiAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iZHJpdmVyLW1vZGFsLWJ0biBjb25maXJtIj5FbnJlZ2lzdHJlcjwvYnV0dG9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtYWN0aW9ucyI+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWJ0biBjYW5jZWwiIG9uY2xpY2s9ImNsb3NlRHJpdmVyTWFuYWdlTW9kYWwoKSI+RmVybWVyPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Zvcm0+CjwvZGl2PgoKPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KCgoKCgoKCgoKPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KCjxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgnPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gYWRkc2xhc2hlcyhhc3NldF92ZXJzaW9uKCdqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMnKSk7ID8+Ij48XC9zY3JpcHQ+Jyk8L3NjcmlwdD4KCgoKPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdqcy92ZW5kb3IvYm9vdHN0cmFwLm1pbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdqcy92ZW5kb3IvYm9vdHN0cmFwLm1pbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdqcy9wbHVnaW5zLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL21haW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KCjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignanMvZHJpdmVyLW1vZGFsLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogIAogIC8vIG5hdmlnYXRpb24gY2xpY2sgYWN0aW9ucyAKICAKICAkKCcuc2Nyb2xsLWxpbmsnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCl7CiAgICAKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAKICAgIHZhciBzZWN0aW9uSUQgPSAkKHRoaXMpLmF0dHIoImRhdGEtaWQiKTsKICAgIAogICAgc2Nyb2xsVG9JRCgnIycgKyBzZWN0aW9uSUQsIDc1MCk7CiAgICAKICB9KTsKICAKICAvLyBzY3JvbGwgdG8gdG9wIGFjdGlvbgogIAogICQoJy5zY3JvbGwtdG9wJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHsKICAgIAogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIAogICAgJCgnaHRtbCwgYm9keScpLmFuaW1hdGUoe3Njcm9sbFRvcDowfSwgJ3Nsb3cnKTsgICAgICAgICAKICAgIAogIH0pOwogIAogIC8vIG1vYmlsZSBuYXYgdG9nZ2xlCiAgCiAgJCgnI25hdi10b2dnbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgIAogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIAogICAgJCgnI21haW4tbmF2JykudG9nZ2xlQ2xhc3MoIm9wZW4iKTsKICAgIAogIH0pOwogIAp9KTsKCi8vIHNjcm9sbCBmdW5jdGlvbgoKZnVuY3Rpb24gc2Nyb2xsVG9JRChpZCwgc3BlZWQpewogIAogIHZhciBvZmZTZXQgPSA1MDsKICAKICB2YXIgdGFyZ2V0T2Zmc2V0ID0gJChpZCkub2Zmc2V0KCkudG9wIC0gb2ZmU2V0OwogIAogIHZhciBtYWluTmF2ID0gJCgnI21haW4tbmF2Jyk7CiAgCiAgJCgnaHRtbCxib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOnRhcmdldE9mZnNldH0sIHNwZWVkKTsKICAKICBpZiAobWFpbk5hdi5oYXNDbGFzcygib3BlbiIpKSB7CiAgICAKICAgIG1haW5OYXYuY3NzKCJoZWlnaHQiLCAiMXB4IikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoImNvbGxhcHNlIik7CiAgICAKICAgIG1haW5OYXYucmVtb3ZlQ2xhc3MoIm9wZW4iKTsKICAgIAogIH0KICAKfQoKaWYgKHR5cGVvZiBjb25zb2xlID09PSAidW5kZWZpbmVkIikgewogIAogIGNvbnNvbGUgPSB7CiAgICAKICAgIGxvZzogZnVuY3Rpb24oKSB7IH0KICAgIAogIH07CiAgCn0KCgpmdW5jdGlvbiBhZmZpY2hlck1vZGFsKCkgewogICAgCgogICAgLy8gQWZmaWNoZXIgbGEgbW9kYWxlIGV0IGxlIGZvbmQKICAgIG9wZW5QaW5Nb2RhbCgpOwp9CgoKLy9mdW5jdGlvbiBhZmZpY2hlck1vZGFsKHBvaW50YWdlSWQpIHsKICAvLyBFbnJlZ2lzdHJleiBsJ0lEIGR1IHBvaW50YWdlIHBvdXIgbCd1dGlsaXNlciBwbHVzIHRhcmQKICAvL3dpbmRvdy5wb2ludGFnZUlkUG91ck1vZGlmaWNhdGlvbiA9IHBvaW50YWdlSWQ7CiAgLy8gQWZmaWNoZXogbGEgZmVuw6p0cmUgbW9kYWxlCiAgLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKLy99CgpmdW5jdGlvbiBzYW5pdGl6ZVBpblZhbHVlKHZhbCkgewogIHJldHVybiBTdHJpbmcodmFsIHx8ICcnKS5yZXBsYWNlKC9cRC9nLCAnJykuc2xpY2UoMCwgNCk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVBpbkJveGVzKHBpbikgewogIHZhciBib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNwaW5Nb2RhbCAucGluLWJveCcpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgYm94ZXMubGVuZ3RoOyBpKyspIHsKICAgIGJveGVzW2ldLnRleHRDb250ZW50ID0gKGkgPCBwaW4ubGVuZ3RoKSA/ICfimIUnIDogJyc7CiAgfQp9CgpmdW5jdGlvbiBmb2N1c1BpbklucHV0KCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQpIHJldHVybjsKICB0cnkgeyBpbnB1dC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQp9CgpmdW5jdGlvbiByZXNldFBpbk1vZGFsKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJzsKICB1cGRhdGVQaW5Cb3hlcygnJyk7Cn0KCmZ1bmN0aW9uIG9wZW5QaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKCFtb2RhbCB8fCAhYmcpIHJldHVybjsKCiAgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgYmcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgcmVzZXRQaW5Nb2RhbCgpOwoKICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgIGZvY3VzUGluSW5wdXQoKTsKICB9LCAxMCk7Cn0KCmZ1bmN0aW9uIGNsb3NlUGluTW9kYWwoKSB7CiAgdmFyIG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bpbk1vZGFsJyk7CiAgdmFyIGJnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmFja2dyb3VuZCcpOwogIGlmIChtb2RhbCkgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBpZiAoYmcpIGJnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgcmVzZXRQaW5Nb2RhbCgpOwp9CgovLyBCaW5kIGlucHV0IG9uY2UgKGRpZ2l0cyBvbmx5ICsgc3luYyBVSSBib3hlcykKKGZ1bmN0aW9uIGJpbmRQaW5PbmNlKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQgfHwgaW5wdXQuZ2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJykgPT09ICcxJykgcmV0dXJuOwogIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcsICcxJyk7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgIHZhciBjbGVhbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQudmFsdWUpOwogICAgaWYgKGlucHV0LnZhbHVlICE9PSBjbGVhbikgaW5wdXQudmFsdWUgPSBjbGVhbjsKICAgIHVwZGF0ZVBpbkJveGVzKGNsZWFuKTsKICB9KTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgdmFyIGtleSA9IGUua2V5IHx8ICcnOwogICAgaWYgKGtleSA9PT0gJ0VzY2FwZScpIHsKICAgICAgY2xvc2VQaW5Nb2RhbCgpOwogICAgfQogIH0pOwp9KSgpOwoKZnVuY3Rpb24gdmVyaWZpZXJQaW4oKSB7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICAgIHZhciBwaW4gPSBzYW5pdGl6ZVBpblZhbHVlKGlucHV0ID8gaW5wdXQudmFsdWUgOiAnJyk7CiAgICBpZiAoaW5wdXQgJiYgaW5wdXQudmFsdWUgIT09IHBpbikgaW5wdXQudmFsdWUgPSBwaW47CiAgICB1cGRhdGVQaW5Cb3hlcyhwaW4pOwoKICAgIGlmIChwaW4ubGVuZ3RoICE9PSA0KSB7CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFbnRyZXogdW4gY29kZSBQSU4gw6AgNCBjaGlmZnJlcy4iLCAiZXJyb3IiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWxlcnQoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIpOwogICAgICAgIH0KICAgICAgICB0cnkgeyBmb2N1c1BpbklucHV0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHBpbikgewogICAgICAgIC8vIEVudm9pIGR1IGNvZGUgUElOIMOgIHVuIHNjcmlwdCBQSFAgcG91ciB2w6lyaWZpY2F0aW9uCiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VUZXh0ID09ICJPSyIpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJhZG1pbi5waHAiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkNvZGUgUElOIGluY29ycmVjdC4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkNvZGUgUElOIGluY29ycmVjdC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmVzZXRQaW5Nb2RhbCgpOwogICAgICAgICAgICAgICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAidmVyaWZpZXJfcGluLnBocCIsIHRydWUpOwogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgeGhyLnNlbmQoInBpbj0iICsgcGluKTsKICAgIH0KfQoKLy8gLS0tIE1vZGFsIGFjdGlvbnMgZW1wbG95w6kgLS0tCnZhciBzZWxlY3RlZEVtcGxveWVJZCA9IG51bGw7CnZhciBzZWxlY3RlZElzUG9pbnRlZCA9IDA7CnZhciBzZWxlY3RlZEVtcGxveWVQcmVub20gPSAnJzsKCmZ1bmN0aW9uIG9wZW5FbXBsb3llZU1vZGFsKGVtcGxveWVJZCwgaXNQb2ludGVkLCBlbXBsb3llUHJlbm9tKSB7CiAgc2VsZWN0ZWRFbXBsb3llSWQgPSBlbXBsb3llSWQ7CiAgc2VsZWN0ZWRJc1BvaW50ZWQgPSBpc1BvaW50ZWQgPyAxIDogMDsKICBzZWxlY3RlZEVtcGxveWVQcmVub20gPSAodHlwZW9mIGVtcGxveWVQcmVub20gPT09ICdzdHJpbmcnKSA/IGVtcGxveWVQcmVub20gOiAnJzsKCiAgdmFyIHB1bmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlUHVuY2hCdXR0b24nKTsKICBwdW5jaEJ0bi50ZXh0Q29udGVudCA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgPyAnRMOpcGFydCcgOiAnQXJyaXbDqWUnOwogIGlmIChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgewogICAgcHVuY2hCdG4uY2xhc3NMaXN0LmFkZCgnaXMtZGVwYXJ0Jyk7CiAgfSBlbHNlIHsKICAgIHB1bmNoQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWRlcGFydCcpOwogIH0KCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlTW9kYWxCYWNrZ3JvdW5kJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlQWN0aW9uTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKfQoKZnVuY3Rpb24gY2xvc2VFbXBsb3llZU1vZGFsKCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZUFjdGlvbk1vZGFsJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVNb2RhbEJhY2tncm91bmQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHZhciBwdW5jaEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZVB1bmNoQnV0dG9uJyk7CiAgaWYgKHB1bmNoQnRuKSBwdW5jaEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1kZXBhcnQnKTsKICBzZWxlY3RlZEVtcGxveWVJZCA9IG51bGw7CiAgc2VsZWN0ZWRJc1BvaW50ZWQgPSAwOwogIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICcnOwp9CgpmdW5jdGlvbiBzdWJtaXRFbXBsb3llZVB1bmNoKCkgewogIGlmICghc2VsZWN0ZWRFbXBsb3llSWQpIHJldHVybjsKCiAgdmFyIHVybCA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgPyAnZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCcgOiAnZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAnOwogICQuYWpheCh7CiAgICB0eXBlOiAiUE9TVCIsCiAgICB1cmw6IHVybCwKICAgIGRhdGE6IHsgZW1wbG95ZTogc2VsZWN0ZWRFbXBsb3llSWQgfSwKICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgIHZhciBmaXJzdG5hbWVQYXJ0ID0gc2VsZWN0ZWRFbXBsb3llUHJlbm9tID8gKCIgIiArIHNlbGVjdGVkRW1wbG95ZVByZW5vbSkgOiAiIjsKICAgICAgdmFyIG1zZyA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkKICAgICAgICA/ICgiRMOpcGFydCIgKyBmaXJzdG5hbWVQYXJ0ICsgIiBlbnJlZ2lzdHLDqSIpCiAgICAgICAgOiAoIkFycml2w6llIiArIGZpcnN0bmFtZVBhcnQgKyAiIGVucmVnaXN0csOpZSIpOwogICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJpbmRleC5waHA/dG9hc3Q9IiArIGVuY29kZVVSSUNvbXBvbmVudChtc2cpICsgIiZ0b2FzdFR5cGU9c3VjY2VzcyI7CiAgICB9LAogICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIsICJlcnJvciIpOwogICAgICB9IGVsc2UgewogICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCiBmdW5jdGlvbiBnb1RvRW1wbG95ZWVEZXRhaWxzKCkgewogICBpZiAoIXNlbGVjdGVkRW1wbG95ZUlkKSByZXR1cm47CiAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gInBvaW50YWdlLnBocD9lbXBsb3llPSIgKyBzZWxlY3RlZEVtcGxveWVJZCArICImdmlldz0xIjsKIH0KCjwvc2NyaXB0PgoKPC9ib2R5PgoKPC9odG1sPgogPC9ib2R5PgogCiA8L2h0bWw+"
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 22209,
                "sha1": "546c34eb127e511fac7e6278d28e83f529e69734",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvaW5kZXgucGhwIHwgQWZmaWNoZSBsZSB0YWJsZWF1IGRlIHBvaW50YWdlIGRlcyBzYWxhcmnDqXMgZXQgcHJvdMOoZ2UgbOKAmWFjY8OocyB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsLiB8IEV4cG9zZTogYXNzZXRfdmVyc2lvbiwgb3BlbkVtcGxveWVlTW9kYWwsIGNsb3NlRW1wbG95ZWVNb2RhbCwgc3VibWl0RW1wbG95ZWVQdW5jaCwgZ29Ub0VtcGxveWVlRGV0YWlscyB8IETDqXBlbmQgZGU6IHBvaW50YWdlcy9jb25maWcucGhwLCBpbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAsIGNvbm5leGlvbi5waHAsIGFkbWluLnBocCwgZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAsIGVucmVnaXN0cmVtZW50X2RlcGFydC5waHAsIHBvaW50YWdlLnBocCwganMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzLCBqcy92ZW5kb3IvYm9vdHN0cmFwLm1pbi5qcywganMvcGx1Z2lucy5qcywganMvbWFpbi5qcywganMvZHJpdmVyLW1vZGFsLmpzIHwgSW1wYWN0ZTogc2Vzc2lvbiBQSFAsIGNvb2tpZSBk4oCZYXBwYXJlaWwsIHJlZGlyZWN0aW9uIGTigJlhY2PDqHMsIGxlY3R1cmUgZGVzIHBvaW50YWdlcy9lbXBsb3nDqXMsIG1vZGFsZXMgVUksIGFwcGVscyBBSkFYIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoVXNlcklELE5vbSxQcmVub20sU3RhdHV0KSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELFVzZXJJRCxEYXRlSGV1cmVFbnRyZWUsRGF0ZUhldXJlU29ydGllKSAqLwovLyBEw6ltYXJyYWdlIG91IHJlcHJpc2UgZGUgbGEgc2Vzc2lvbgpzZXNzaW9uX3N0YXJ0KCk7CmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwoKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7Cgo/PgoKCjwhRE9DVFlQRSBodG1sPgoKPGh0bWw+Cgo8aGVhZD4KCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgoKPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KCgoKPHRpdGxlPlBvaW50YWdlcyBTYWxhcmnDqXM8L3RpdGxlPgoKCgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImFwcGxlLXRvdWNoLWljb24ucG5nIj4KCgo8P3BocApmdW5jdGlvbiBhc3NldF92ZXJzaW9uKHN0cmluZyAkcmVsYXRpdmVQYXRoKTogc3RyaW5nCnsKICAkZnVsbFBhdGggPSBfX0RJUl9fIC4gJy8nIC4gbHRyaW0oJHJlbGF0aXZlUGF0aCwgJy8nKTsKICAkdmVyc2lvbiA9IGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkgPyBmaWxlbXRpbWUoJGZ1bGxQYXRoKSA6IHRpbWUoKTsKICByZXR1cm4gJHJlbGF0aXZlUGF0aCAuICc/dj0nIC4gKGludCkkdmVyc2lvbjsKfQo/PgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2Jvb3RzdHJhcC5taW4uY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9mb250QXdlc29tZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9mb250QXdlc29tZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdjc3MvdG9vcGxhdGUtc3R5bGUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2Nzcy9zdHlsZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2hvbWUtYnV0dG9ucy5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignY3NzL2RyaXZlci1tb2RhbC5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KCjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6MzAwLDQwMCw2MDAsNzAwLDgwMCIgcmVsPSJzdHlsZXNoZWV0Ij4KCjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignanMvdmVuZG9yL21vZGVybml6ci0yLjguMy1yZXNwb25kLTEuNC4yLm1pbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKCjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignanMvdmVuZG9yL21vZGVybml6ci0yLjguMy1yZXNwb25kLTEuNC4yLm1pbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKPC9oZWFkPgoKPGJvZHkgY2xhc3M9InBhZ2UtaW5kZXggdGhlbWUtZGFyayI+CgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0iIj4KCjxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGluZyI+CjxoMT5Qb2ludGFnZXMgc2FsYXJpw6lzPC9oMT4KPGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2Pgo8Y2VudGVyPgo8YnI+Cjxmb250IGNvbG9yPSJibGFjayIgc2l6ZT0iNCIgPgo8c3Ryb25nPgo8P3BocAovLyBSw6ljdXDDqHJlIGxlIGRlcm5pZXIgcG9pbnRhZ2UgZGUgY2hhcXVlIGVtcGxvecOpIHBvdXIgZMOpdGVybWluZXIgcydpbCBlc3QgInBvaW50w6kiCiRjdXJyZW50TW9udGggPSAoaW50KWRhdGUoJ24nKTsKJGN1cnJlbnRZZWFyID0gKGludClkYXRlKCdZJyk7CiRub3dQYXJpcyA9IGRhdGUoJ1ktbS1kIEg6aTpzJyk7Cgokc3RtdCA9ICRwZG8tPnByZXBhcmUoIgogIFNFTEVDVAogICAgdS5Vc2VySUQsCiAgICB1Lk5vbSwKICAgIHUuUHJlbm9tLAogICAgcC5EYXRlSGV1cmVFbnRyZWUsCiAgICBwLkRhdGVIZXVyZVNvcnRpZSwKICAgIG1oLnNlY29uZHNfd29ya2VkLAogICAgbWgubWF4X3B1bmNoX3NlY29uZHMKICBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgdQogIExFRlQgSk9JTiB6X3B0Z19hcXBfcG9pbnRhZ2VzIHAKICAgIE9OIHAuUG9pbnRhZ2VJRCA9ICgKICAgICAgU0VMRUNUIHAyLlBvaW50YWdlSUQKICAgICAgRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIHAyCiAgICAgIFdIRVJFIHAyLlVzZXJJRCA9IHUuVXNlcklECiAgICAgIE9SREVSIEJZIHAyLkRhdGVIZXVyZUVudHJlZSBERVNDLCBwMi5Qb2ludGFnZUlEIERFU0MKICAgICAgTElNSVQgMQogICAgKQogIExFRlQgSk9JTiAoCiAgICBTRUxFQ1QKICAgICAgVXNlcklELAogICAgICBTVU0oCiAgICAgICAgVElNRVNUQU1QRElGRigKICAgICAgICAgIFNFQ09ORCwKICAgICAgICAgIERhdGVIZXVyZUVudHJlZSwKICAgICAgICAgIENPQUxFU0NFKERhdGVIZXVyZVNvcnRpZSwgOm5vd1BhcmlzU3VtKQogICAgICAgICkKICAgICAgKSBBUyBzZWNvbmRzX3dvcmtlZCwKICAgICAgTUFYKAogICAgICAgIFRJTUVTVEFNUERJRkYoCiAgICAgICAgICBTRUNPTkQsCiAgICAgICAgICBEYXRlSGV1cmVFbnRyZWUsCiAgICAgICAgICBDT0FMRVNDRShEYXRlSGV1cmVTb3J0aWUsIDpub3dQYXJpc01heCkKICAgICAgICApCiAgICAgICkgQVMgbWF4X3B1bmNoX3NlY29uZHMKICAgIEZST00gel9wdGdfYXFwX3BvaW50YWdlcwogICAgV0hFUkUgTU9OVEgoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50TW9udGgKICAgICAgQU5EIFlFQVIoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50WWVhcgogICAgR1JPVVAgQlkgVXNlcklECiAgKSBtaCBPTiBtaC5Vc2VySUQgPSB1LlVzZXJJRAogIFdIRVJFIHUuU3RhdHV0ID0gJ2FjdGlmJwoiKTsKJHN0bXQtPmV4ZWN1dGUoWwogICc6bm93UGFyaXNTdW0nID0+ICRub3dQYXJpcywKICAnOm5vd1BhcmlzTWF4JyA9PiAkbm93UGFyaXMsCiAgJzpjdXJyZW50TW9udGgnID0+ICRjdXJyZW50TW9udGgsCiAgJzpjdXJyZW50WWVhcicgPT4gJGN1cnJlbnRZZWFyLApdKTsKJGVtcGxveWVzQWN0aWZzID0gJHN0bXQtPmZldGNoQWxsKFBETzo6RkVUQ0hfQVNTT0MpOwoKZWNobyAnPHRhYmxlIGNsYXNzPSJlbXBsb3llZS1ncmlkIj4nOwokY29tcHRldXIgPSAwOwoKZm9yZWFjaCAoJGVtcGxveWVzQWN0aWZzIGFzICRlbXBsb3llKSB7CiAgLy8gTG9naXF1ZSBzaW1pbGFpcmUgcG91ciBhZmZpY2hlciBsZXMgZW1wbG95w6lzCiAgaWYgKCRjb21wdGV1ciAlIDIgPT0gMCkgewogICAgZWNobyAnPHRyPic7CiAgfQogICRub21SYXcgPSBpc3NldCgkZW1wbG95ZVsnTm9tJ10pID8gKHN0cmluZykkZW1wbG95ZVsnTm9tJ10gOiAnJzsKICAkcHJlbm9tUmF3ID0gaXNzZXQoJGVtcGxveWVbJ1ByZW5vbSddKSA/IChzdHJpbmcpJGVtcGxveWVbJ1ByZW5vbSddIDogJyc7CiAgJG5vbSA9IG1iX3N0cnRvdXBwZXIoJG5vbVJhdywgJ1VURi04Jyk7CiAgJHByZW5vbSA9IG1iX3N0cnRvdXBwZXIoJHByZW5vbVJhdywgJ1VURi04Jyk7CiAgJHByZW5vbUpzID0gaHRtbHNwZWNpYWxjaGFycygKICAgIGpzb25fZW5jb2RlKCRwcmVub21SYXcsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX0hFWF9UQUcgfCBKU09OX0hFWF9BTVAgfCBKU09OX0hFWF9BUE9TIHwgSlNPTl9IRVhfUVVPVCksCiAgICBFTlRfUVVPVEVTLAogICAgJ1VURi04JwogICk7CgogIC8vIFVuIGVtcGxvecOpIGVzdCAicG9pbnTDqSIgcydpbCBhIHVuIGRlcm5pZXIgcG9pbnRhZ2UgZG9udCBEYXRlSGV1cmVTb3J0aWUgZXN0IE5VTEwKICAvLyAoZXQgcXUnaWwgZXhpc3RlIGJpZW4gdW5lIERhdGVIZXVyZUVudHJlZSkuCiAgJGlzUG9pbnRlZCA9ICghZW1wdHkoJGVtcGxveWVbJ0RhdGVIZXVyZUVudHJlZSddKSAmJiAkZW1wbG95ZVsnRGF0ZUhldXJlU29ydGllJ10gPT09IG51bGwpOwoKICAvLyBEw6l0ZWN0aW9uICJwb2ludGFnZSA+IDhIIiA6CiAgLy8gLSB2aWEgbGEgZHVyw6llIG1heCBkZXMgcG9pbnRhZ2VzIGR1IG1vaXMgKG1heF9wdW5jaF9zZWNvbmRzKSwKICAvLyAtIGV0IHZpYSBsZSBkZXJuaWVyIHBvaW50YWdlIChlbiBjb3VycyBvdSB0ZXJtaW7DqSksIG3Dqm1lIHMnaWwgZXN0IGhvcnMgbW9pcyAoY2FzIHJhcmUsIG1haXMgcm9idXN0ZSkuCiAgJG1heFB1bmNoU2Vjb25kcyA9IGlzc2V0KCRlbXBsb3llWydtYXhfcHVuY2hfc2Vjb25kcyddKSA/IChpbnQpJGVtcGxveWVbJ21heF9wdW5jaF9zZWNvbmRzJ10gOiAwOwogICRsYXN0UHVuY2hTZWNvbmRzID0gMDsKICBpZiAoIWVtcHR5KCRlbXBsb3llWydEYXRlSGV1cmVFbnRyZWUnXSkpIHsKICAgICRzdGFydFRzID0gc3RydG90aW1lKCRlbXBsb3llWydEYXRlSGV1cmVFbnRyZWUnXSk7CiAgICAkZW5kVHMgPSAoJGVtcGxveWVbJ0RhdGVIZXVyZVNvcnRpZSddID09PSBudWxsIHx8ICRlbXBsb3llWydEYXRlSGV1cmVTb3J0aWUnXSA9PT0gJycpCiAgICAgID8gc3RydG90aW1lKCRub3dQYXJpcykKICAgICAgOiBzdHJ0b3RpbWUoJGVtcGxveWVbJ0RhdGVIZXVyZVNvcnRpZSddKTsKICAgIGlmICgkc3RhcnRUcyAhPT0gZmFsc2UgJiYgJGVuZFRzICE9PSBmYWxzZSAmJiAkZW5kVHMgPj0gJHN0YXJ0VHMpIHsKICAgICAgJGxhc3RQdW5jaFNlY29uZHMgPSAoaW50KSgkZW5kVHMgLSAkc3RhcnRUcyk7CiAgICB9CiAgfQogICRoYXNQdW5jaE92ZXI4aCA9ICgkbWF4UHVuY2hTZWNvbmRzID49IDI4ODAwKSB8fCAoJGxhc3RQdW5jaFNlY29uZHMgPj0gMjg4MDApOwoKICAkYnRuQ2xhc3MgPSAkaXNQb2ludGVkID8gJ2VtcGxveWVlLWJ0biBzdGF0dXMtcG9pbnRlZCcgOiAnZW1wbG95ZWUtYnRuIHN0YXR1cy1kZXBvaW50ZWQnOwogIGlmICgkaGFzUHVuY2hPdmVyOGgpIHsKICAgICRidG5DbGFzcyAuPSAnIHN0YXR1cy1wcm9ibGVtJzsKICB9CiAgLy8gSWPDtG5lIHVuaXF1ZW1lbnQgcXVhbmQgcG9pbnTDqQogICRpY29uSHRtbCA9ICcnOwogIGlmICgkaXNQb2ludGVkKSB7CiAgICAkaWNvbkh0bWwgPSAnPGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSBzdGF0dXMtaWNvbiIgYXJpYS1oaWRkZW49InRydWUiIHRpdGxlPSJQb2ludMOpIj48L2k+JzsKICB9CgogICRzZWNvbmRzV29ya2VkID0gaXNzZXQoJGVtcGxveWVbJ3NlY29uZHNfd29ya2VkJ10pID8gKGZsb2F0KSRlbXBsb3llWydzZWNvbmRzX3dvcmtlZCddIDogMC4wOwogICRtb250aEhvdXJzID0gJHNlY29uZHNXb3JrZWQgPiAwID8gKCRzZWNvbmRzV29ya2VkIC8gMzYwMCkgOiAwLjA7CiAgJG1vbnRoSG91cnNUZXh0ID0gbnVtYmVyX2Zvcm1hdCgkbW9udGhIb3VycywgMiwgJy4nLCAnJykgLiAnSCc7CiAgJG1vbnRoSG91cnNIdG1sID0gJzxzcGFuIGNsYXNzPSJtb250aC1ob3VycyI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJG1vbnRoSG91cnNUZXh0LCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICc8L3NwYW4+JzsKCiAgZWNobyAnPHRkIGNsYXNzPSJlbXBsb3llZS1ncmlkLWNlbGwiPicKICAgICAuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9IicgLiAkYnRuQ2xhc3MgLiAnIiBvbmNsaWNrPSJvcGVuRW1wbG95ZWVNb2RhbCgnIC4gKGludCkkZW1wbG95ZVsnVXNlcklEJ10gLiAnLCAnIC4gKCRpc1BvaW50ZWQgPyAnMScgOiAnMCcpIC4gJywgJyAuICRwcmVub21KcyAuICcpIj4nCiAgICAgLiAkaWNvbkh0bWwKICAgICAuICc8c3BhbiBjbGFzcz0iZW1wbG95ZWUtbmFtZSI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJG5vbSwgRU5UX1FVT1RFUywgJ1VURi04JykgLiAnPC9zcGFuPicKICAgICAuICc8c3BhbiBjbGFzcz0iZW1wbG95ZWUtZmlyc3RuYW1lIj4nIC4gaHRtbHNwZWNpYWxjaGFycygkcHJlbm9tLCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICc8L3NwYW4+JwogICAgIC4gJG1vbnRoSG91cnNIdG1sCiAgICAgLiAnPC9idXR0b24+JwogICAgIC4gJzwvdGQ+JzsKCiAgaWYgKCRjb21wdGV1ciAlIDIgPT0gMSkgewogICAgZWNobyAnPC90cj4nOwogIH0KICAkY29tcHRldXIrKzsKfQogCiBlY2hvICc8L3RhYmxlPic7CiA/PgogCiA8ZGl2IGNsYXNzPSJkcml2ZXItcGhvbmUtYWN0aW9ucyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW46MThweCAwIDZweDsiPgogICA8YnV0dG9uCiAgICAgdHlwZT0iYnV0dG9uIgogICAgIGlkPSJkcml2ZXJQaG9uZUJ1dHRvbiIKICAgICBjbGFzcz0iZHJpdmVyLXBob25lLXRyaWdnZXIiCiAgICAgb25jbGljaz0ib3BlbkRyaXZlclBob25lTW9kYWwoKSIKICAgPgogICAgIEVudm95ZXIgU01TIGxpdnJldXIKICAgPC9idXR0b24+CiA8L2Rpdj4KCiA8L3N0cm9uZz4KIDwvZm9udD4KIDwvY2VudGVyPgogPC9kaXY+CiA8L2Rpdj4KCgo8YnI+PGJyPgoKPHA+PGEgaHJlZj0iYWRtaW4ucGhwIj5HZXN0aW9uIGVtcGxvecOpczwvYT48L3A+PGJyPgoKCgoKCjwvZGl2PgoKCgoKPCEtLSBNb2RhbCBQSU4gKGRlc2lnbiByZWZhaXQpIC0tPgo8ZGl2IGlkPSJtb2RhbEJhY2tncm91bmQiIG9uY2xpY2s9ImNsb3NlUGluTW9kYWwoKSIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pgo8ZGl2IGlkPSJwaW5Nb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9InBpbk1vZGFsVGl0bGUiPgogIDxmb3JtIGlkPSJwaW5Gb3JtIiBvbnN1Ym1pdD0idmVyaWZpZXJQaW4oKTsgcmV0dXJuIGZhbHNlOyI+CiAgICA8aDIgaWQ9InBpbk1vZGFsVGl0bGUiIGNsYXNzPSJwaW4tbW9kYWwtdGl0bGUiPkNvZGUgUElOPC9oMj4KICAgIDxwIGNsYXNzPSJwaW4tbW9kYWwtc3VidGl0bGUiPlNhaXNpc3NleiB2b3RyZSBjb2RlIMOgIDQgY2hpZmZyZXM8L3A+CgogICAgPGRpdiBjbGFzcz0icGluLWlucHV0LXdyYXBwZXIiIG9uY2xpY2s9ImZvY3VzUGluSW5wdXQoKSI+CiAgICAgIDxsYWJlbCBmb3I9InBpbklucHV0IiBjbGFzcz0ic3Itb25seSI+Q29kZSBQSU4gKDQgY2hpZmZyZXMpPC9sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0icGluLWJveGVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjAiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3giIGRhdGEtaWR4PSIxIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMiI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjMiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGlucHV0CiAgICAgICAgdHlwZT0idGVsIgogICAgICAgIGlkPSJwaW5JbnB1dCIKICAgICAgICBjbGFzcz0icGluLWhpZGRlbi1pbnB1dCIKICAgICAgICBpbnB1dG1vZGU9Im51bWVyaWMiCiAgICAgICAgcGF0dGVybj0iWzAtOV0qIgogICAgICAgIG1heGxlbmd0aD0iNCIKICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgICBhdXRvY2FwaXRhbGl6ZT0ib2ZmIgogICAgICAgIGF1dG9jb3JyZWN0PSJvZmYiCiAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiCiAgICAgICAgdGl0bGU9IlNldWxlbWVudCBkZXMgY2hpZmZyZXMuIgogICAgICAgIHZhbHVlPSIiCiAgICAgID4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InBpbi1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwaW4tbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VQaW5Nb2RhbCgpIj5Bbm51bGVyPC9idXR0b24+CiAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0icGluLW1vZGFsLWJ0biBjb25maXJtIj5WYWxpZGVyPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Zvcm0+CjwvZGl2PgoKPCEtLSBNb2RhbCBBY3Rpb25zIEVtcGxvecOpIChBcnJpdsOpZS9Ew6lwYXJ0ICsgVm9pciBkw6l0YWlsKSAtLT4KPGRpdiBpZD0iZW1wbG95ZWVNb2RhbEJhY2tncm91bmQiIG9uY2xpY2s9ImNsb3NlRW1wbG95ZWVNb2RhbCgpIj48L2Rpdj4KPGRpdiBpZD0iZW1wbG95ZWVBY3Rpb25Nb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9ImVtcGxveWVlQWN0aW9uVGl0bGUiPgogIDxoMiBpZD0iZW1wbG95ZWVBY3Rpb25UaXRsZSI+QWN0aW9uczwvaDI+CiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJlbXBsb3llZVB1bmNoQnV0dG9uIiBjbGFzcz0iZW1wbG95ZWUtbW9kYWwtYnRuIHB1bmNoIiBvbmNsaWNrPSJzdWJtaXRFbXBsb3llZVB1bmNoKCkiPjwvYnV0dG9uPgogIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZW1wbG95ZWUtbW9kYWwtYnRuIGRldGFpbHMiIG9uY2xpY2s9ImdvVG9FbXBsb3llZURldGFpbHMoKSI+Vm9pciBkw6l0YWlsIGRlcyBoZXVyZXM8L2J1dHRvbj4KPC9kaXY+Cgo8IS0tIE1vZGFsIExpdnJldXIgKHPDqWxlY3Rpb24gKyBlbnZvaSBTTVMpIC0tPgo8ZGl2IGlkPSJkcml2ZXJNb2RhbEJhY2tncm91bmQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYmFja2Ryb3AiIG9uY2xpY2s9ImNsb3NlRHJpdmVyUGhvbmVNb2RhbCgpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CjxkaXYgaWQ9ImRyaXZlclBob25lTW9kYWwiIGNsYXNzPSJkcml2ZXItbW9kYWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJkcml2ZXJQaG9uZU1vZGFsVGl0bGUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICA8Zm9ybSBpZD0iZHJpdmVyUGhvbmVGb3JtIiBvbnN1Ym1pdD0ic3VibWl0RHJpdmVyUGhvbmUoKTsgcmV0dXJuIGZhbHNlOyI+CiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtaGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWhlYWRlci10ZXh0Ij4KICAgICAgICA8aDIgaWQ9ImRyaXZlclBob25lTW9kYWxUaXRsZSIgY2xhc3M9ImRyaXZlci1tb2RhbC10aXRsZSI+RW52b3llciBTTVMgbGl2cmV1cjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRyaXZlci1tb2RhbC1zdWJ0aXRsZSI+U8OpbGVjdGlvbm5leiB1biBsaXZyZXVyIHBvdXIgbGUgcG9pbnQgZGUgdmVudGUgZGUgbOKAmWFwcGFyZWlsPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtY2xvc2UiIG9uY2xpY2s9ImNsb3NlRHJpdmVyUGhvbmVNb2RhbCgpIiBhcmlhLWxhYmVsPSJGZXJtZXIiPsOXPC9idXR0b24+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJTZWxlY3QiIGNsYXNzPSJkcml2ZXItbGFiZWwiPkxpdnJldXI8L2xhYmVsPgogICAgICA8c2VsZWN0IGlkPSJkcml2ZXJTZWxlY3QiIGNsYXNzPSJkcml2ZXItc2VsZWN0IiByZXF1aXJlZD4KICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPkNoYXJnZW1lbnQgZGVzIGxpdnJldXJz4oCmPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PgogICAgICA8c21hbGwgaWQ9ImRyaXZlclNlbGVjdGVkUGhvbmVIZWxwIiBjbGFzcz0iZHJpdmVyLWhlbHAiPlPDqWxlY3Rpb25uZXogdW4gbGl2cmV1ciBwb3VyIGFmZmljaGVyIHNvbiBudW3DqXJvLjwvc21hbGw+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJQb2ludFZlbnRlIiBjbGFzcz0iZHJpdmVyLWxhYmVsIj5Qb2ludCBkZSB2ZW50ZTwvbGFiZWw+CiAgICAgIDxzZWxlY3QgaWQ9ImRyaXZlclBvaW50VmVudGUiIGNsYXNzPSJkcml2ZXItc2VsZWN0IiBkaXNhYmxlZD4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJsYW5jb24iPkxhbsOnb248L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJwZWxpc3Nhbm5lIj5Qw6lsaXNzYW5uZTwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIGRyaXZlci1tb2RhbC1hY3Rpb25zLXNwbGl0Ij4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIHNlY29uZGFyeSIgb25jbGljaz0ib3BlbkRyaXZlck1hbmFnZU1vZGFsKCkiPkfDqXJlciBsZXMgbGl2cmV1cnM8L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VEcml2ZXJQaG9uZU1vZGFsKCkiPkFubnVsZXI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNvbmZpcm0iPkVudm95ZXIgU01TPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Zvcm0+CjwvZGl2PgoKPCEtLSBNb2RhbCBnZXN0aW9uIGxpdnJldXJzIC0tPgo8ZGl2IGlkPSJkcml2ZXJNYW5hZ2VNb2RhbEJhY2tncm91bmQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYmFja2Ryb3AiIG9uY2xpY2s9ImNsb3NlRHJpdmVyTWFuYWdlTW9kYWwoKSIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pgo8ZGl2IGlkPSJkcml2ZXJNYW5hZ2VNb2RhbCIgY2xhc3M9ImRyaXZlci1tb2RhbCBkcml2ZXItbWFuYWdlLW1vZGFsIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFiZWxsZWRieT0iZHJpdmVyTWFuYWdlTW9kYWxUaXRsZSIgYXJpYS1oaWRkZW49InRydWUiPgogIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1oZWFkZXIiPgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWhlYWRlci10ZXh0Ij4KICAgICAgPGgyIGlkPSJkcml2ZXJNYW5hZ2VNb2RhbFRpdGxlIiBjbGFzcz0iZHJpdmVyLW1vZGFsLXRpdGxlIj5Hw6lyZXIgbGVzIGxpdnJldXJzPC9oMj4KICAgICAgPHAgY2xhc3M9ImRyaXZlci1tb2RhbC1zdWJ0aXRsZSI+QWpvdXQsIG1vZGlmaWNhdGlvbiBldCBzdXBwcmVzc2lvbiBwb3VyIGxlIHBvaW50IGRlIHZlbnRlIGNvdXJhbnQ8L3A+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWNsb3NlIiBvbmNsaWNrPSJjbG9zZURyaXZlck1hbmFnZU1vZGFsKCkiIGFyaWEtbGFiZWw9IkZlcm1lciI+w5c8L2J1dHRvbj4KICA8L2Rpdj4KCiAgPGZvcm0gaWQ9ImRyaXZlck1hbmFnZUZvcm0iPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImRyaXZlck1hbmFnZU1vZGUiIHZhbHVlPSJjcmVhdGUiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImRyaXZlckVkaXRPcmlnaW5hbFBob25lIiB2YWx1ZT0iIj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJNYW5hZ2VTZWxlY3QiIGNsYXNzPSJkcml2ZXItbGFiZWwiPkxpdnJldXIgZXhpc3RhbnQ8L2xhYmVsPgogICAgICA8c2VsZWN0IGlkPSJkcml2ZXJNYW5hZ2VTZWxlY3QiIGNsYXNzPSJkcml2ZXItc2VsZWN0Ij4KICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPk5vdXZlYXUgbGl2cmV1cjwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1maWVsZCI+CiAgICAgIDxsYWJlbCBmb3I9ImRyaXZlck1hbmFnZU5hbWUiIGNsYXNzPSJkcml2ZXItbGFiZWwiPk5vbSBhZmZpY2jDqTwvbGFiZWw+CiAgICAgIDxpbnB1dAogICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgaWQ9ImRyaXZlck1hbmFnZU5hbWUiCiAgICAgICAgY2xhc3M9ImRyaXZlci1pbnB1dCIKICAgICAgICBtYXhsZW5ndGg9IjEyMCIKICAgICAgICBwbGFjZWhvbGRlcj0iRXg6IEthcmltIgogICAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIgogICAgICA+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItZmllbGQiPgogICAgICA8bGFiZWwgZm9yPSJkcml2ZXJNYW5hZ2VQaG9uZSIgY2xhc3M9ImRyaXZlci1sYWJlbCI+VMOpbMOpcGhvbmU8L2xhYmVsPgogICAgICA8aW5wdXQKICAgICAgICB0eXBlPSJ0ZWwiCiAgICAgICAgaWQ9ImRyaXZlck1hbmFnZVBob25lIgogICAgICAgIGNsYXNzPSJkcml2ZXItaW5wdXQiCiAgICAgICAgaW5wdXRtb2RlPSJudW1lcmljIgogICAgICAgIHBhdHRlcm49IlswLTldKiIKICAgICAgICBtYXhsZW5ndGg9IjE2IgogICAgICAgIHBsYWNlaG9sZGVyPSJFeDogMDYxODUyOTM3NSIKICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgICBhdXRvY2FwaXRhbGl6ZT0ib2ZmIgogICAgICAgIGF1dG9jb3JyZWN0PSJvZmYiCiAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiCiAgICAgID4KICAgICAgPHNtYWxsIGNsYXNzPSJkcml2ZXItaGVscCI+Rm9ybWF0IGFjY2VwdMOpIDogMDYxODUyOTM3NSwgMzM2MTg1MjkzNzUgb3UgMDAzMzYxODUyOTM3NS48L3NtYWxsPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWFjdGlvbnMiPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRyaXZlci1tb2RhbC1idG4gZGFuZ2VyIiBvbmNsaWNrPSJkZWxldGVTZWxlY3RlZERyaXZlcigpIj5TdXBwcmltZXI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNvbmZpcm0iPkVucmVnaXN0cmVyPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1hY3Rpb25zIj4KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VEcml2ZXJNYW5hZ2VNb2RhbCgpIj5GZXJtZXI8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZm9ybT4KPC9kaXY+Cgo8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMS4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgoKCgoKCgoKCgo8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMS4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgoKPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCc8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBhZGRzbGFzaGVzKGFzc2V0X3ZlcnNpb24oJ2pzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcycpKTsgPz4iPjxcL3NjcmlwdD4nKTwvc2NyaXB0PgoKCgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL3ZlbmRvci9ib290c3RyYXAubWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL3ZlbmRvci9ib290c3RyYXAubWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb24oJ2pzL3BsdWdpbnMuanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KCjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbignanMvbWFpbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uKCdqcy9kcml2ZXItbW9kYWwuanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KCgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgCiAgLy8gbmF2aWdhdGlvbiBjbGljayBhY3Rpb25zIAogIAogICQoJy5zY3JvbGwtbGluaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXsKICAgIAogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIAogICAgdmFyIHNlY3Rpb25JRCA9ICQodGhpcykuYXR0cigiZGF0YS1pZCIpOwogICAgCiAgICBzY3JvbGxUb0lEKCcjJyArIHNlY3Rpb25JRCwgNzUwKTsKICAgIAogIH0pOwogIAogIC8vIHNjcm9sbCB0byB0b3AgYWN0aW9uCiAgCiAgJCgnLnNjcm9sbC10b3AnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCkgewogICAgCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgCiAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOjB9LCAnc2xvdycpOyAgICAgICAgIAogICAgCiAgfSk7CiAgCiAgLy8gbW9iaWxlIG5hdiB0b2dnbGUKICAKICAkKCcjbmF2LXRvZ2dsZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgewogICAgCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgCiAgICAkKCcjbWFpbi1uYXYnKS50b2dnbGVDbGFzcygib3BlbiIpOwogICAgCiAgfSk7CiAgCn0pOwoKLy8gc2Nyb2xsIGZ1bmN0aW9uCgpmdW5jdGlvbiBzY3JvbGxUb0lEKGlkLCBzcGVlZCl7CiAgCiAgdmFyIG9mZlNldCA9IDUwOwogIAogIHZhciB0YXJnZXRPZmZzZXQgPSAkKGlkKS5vZmZzZXQoKS50b3AgLSBvZmZTZXQ7CiAgCiAgdmFyIG1haW5OYXYgPSAkKCcjbWFpbi1uYXYnKTsKICAKICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6dGFyZ2V0T2Zmc2V0fSwgc3BlZWQpOwogIAogIGlmIChtYWluTmF2Lmhhc0NsYXNzKCJvcGVuIikpIHsKICAgIAogICAgbWFpbk5hdi5jc3MoImhlaWdodCIsICIxcHgiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygiY29sbGFwc2UiKTsKICAgIAogICAgbWFpbk5hdi5yZW1vdmVDbGFzcygib3BlbiIpOwogICAgCiAgfQogIAp9CgppZiAodHlwZW9mIGNvbnNvbGUgPT09ICJ1bmRlZmluZWQiKSB7CiAgCiAgY29uc29sZSA9IHsKICAgIAogICAgbG9nOiBmdW5jdGlvbigpIHsgfQogICAgCiAgfTsKICAKfQoKCmZ1bmN0aW9uIGFmZmljaGVyTW9kYWwoKSB7CiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJhZG1pbi5waHAiOwp9CgoKLy9mdW5jdGlvbiBhZmZpY2hlck1vZGFsKHBvaW50YWdlSWQpIHsKICAvLyBFbnJlZ2lzdHJleiBsJ0lEIGR1IHBvaW50YWdlIHBvdXIgbCd1dGlsaXNlciBwbHVzIHRhcmQKICAvL3dpbmRvdy5wb2ludGFnZUlkUG91ck1vZGlmaWNhdGlvbiA9IHBvaW50YWdlSWQ7CiAgLy8gQWZmaWNoZXogbGEgZmVuw6p0cmUgbW9kYWxlCiAgLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKLy99CgpmdW5jdGlvbiBzYW5pdGl6ZVBpblZhbHVlKHZhbCkgewogIHJldHVybiBTdHJpbmcodmFsIHx8ICcnKS5yZXBsYWNlKC9cRC9nLCAnJykuc2xpY2UoMCwgNCk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVBpbkJveGVzKHBpbikgewogIHZhciBib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNwaW5Nb2RhbCAucGluLWJveCcpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgYm94ZXMubGVuZ3RoOyBpKyspIHsKICAgIGJveGVzW2ldLnRleHRDb250ZW50ID0gKGkgPCBwaW4ubGVuZ3RoKSA/ICfimIUnIDogJyc7CiAgfQp9CgpmdW5jdGlvbiBmb2N1c1BpbklucHV0KCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQpIHJldHVybjsKICB0cnkgeyBpbnB1dC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQp9CgpmdW5jdGlvbiByZXNldFBpbk1vZGFsKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJzsKICB1cGRhdGVQaW5Cb3hlcygnJyk7Cn0KCmZ1bmN0aW9uIG9wZW5QaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKCFtb2RhbCB8fCAhYmcpIHJldHVybjsKCiAgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgYmcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgcmVzZXRQaW5Nb2RhbCgpOwoKICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgIGZvY3VzUGluSW5wdXQoKTsKICB9LCAxMCk7Cn0KCmZ1bmN0aW9uIGNsb3NlUGluTW9kYWwoKSB7CiAgdmFyIG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bpbk1vZGFsJyk7CiAgdmFyIGJnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmFja2dyb3VuZCcpOwogIGlmIChtb2RhbCkgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBpZiAoYmcpIGJnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgcmVzZXRQaW5Nb2RhbCgpOwp9CgovLyBCaW5kIGlucHV0IG9uY2UgKGRpZ2l0cyBvbmx5ICsgc3luYyBVSSBib3hlcykKKGZ1bmN0aW9uIGJpbmRQaW5PbmNlKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQgfHwgaW5wdXQuZ2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJykgPT09ICcxJykgcmV0dXJuOwogIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcsICcxJyk7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgIHZhciBjbGVhbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQudmFsdWUpOwogICAgaWYgKGlucHV0LnZhbHVlICE9PSBjbGVhbikgaW5wdXQudmFsdWUgPSBjbGVhbjsKICAgIHVwZGF0ZVBpbkJveGVzKGNsZWFuKTsKICB9KTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgdmFyIGtleSA9IGUua2V5IHx8ICcnOwogICAgaWYgKGtleSA9PT0gJ0VzY2FwZScpIHsKICAgICAgY2xvc2VQaW5Nb2RhbCgpOwogICAgfQogIH0pOwp9KSgpOwoKZnVuY3Rpb24gdmVyaWZpZXJQaW4oKSB7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICAgIHZhciBwaW4gPSBzYW5pdGl6ZVBpblZhbHVlKGlucHV0ID8gaW5wdXQudmFsdWUgOiAnJyk7CiAgICBpZiAoaW5wdXQgJiYgaW5wdXQudmFsdWUgIT09IHBpbikgaW5wdXQudmFsdWUgPSBwaW47CiAgICB1cGRhdGVQaW5Cb3hlcyhwaW4pOwoKICAgIGlmIChwaW4ubGVuZ3RoICE9PSA0KSB7CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFbnRyZXogdW4gY29kZSBQSU4gw6AgNCBjaGlmZnJlcy4iLCAiZXJyb3IiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWxlcnQoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIpOwogICAgICAgIH0KICAgICAgICB0cnkgeyBmb2N1c1BpbklucHV0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHBpbikgewogICAgICAgIC8vIEVudm9pIGR1IGNvZGUgUElOIMOgIHVuIHNjcmlwdCBQSFAgcG91ciB2w6lyaWZpY2F0aW9uCiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VUZXh0ID09ICJPSyIpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJhZG1pbi5waHAiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkNvZGUgUElOIGluY29ycmVjdC4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkNvZGUgUElOIGluY29ycmVjdC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmVzZXRQaW5Nb2RhbCgpOwogICAgICAgICAgICAgICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAidmVyaWZpZXJfcGluLnBocCIsIHRydWUpOwogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgeGhyLnNlbmQoInBpbj0iICsgcGluKTsKICAgIH0KfQoKLy8gLS0tIE1vZGFsIGFjdGlvbnMgZW1wbG95w6kgLS0tCnZhciBzZWxlY3RlZEVtcGxveWVJZCA9IG51bGw7CnZhciBzZWxlY3RlZElzUG9pbnRlZCA9IDA7CnZhciBzZWxlY3RlZEVtcGxveWVQcmVub20gPSAnJzsKCmZ1bmN0aW9uIG9wZW5FbXBsb3llZU1vZGFsKGVtcGxveWVJZCwgaXNQb2ludGVkLCBlbXBsb3llUHJlbm9tKSB7CiAgc2VsZWN0ZWRFbXBsb3llSWQgPSBlbXBsb3llSWQ7CiAgc2VsZWN0ZWRJc1BvaW50ZWQgPSBpc1BvaW50ZWQgPyAxIDogMDsKICBzZWxlY3RlZEVtcGxveWVQcmVub20gPSAodHlwZW9mIGVtcGxveWVQcmVub20gPT09ICdzdHJpbmcnKSA/IGVtcGxveWVQcmVub20gOiAnJzsKCiAgdmFyIHB1bmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlUHVuY2hCdXR0b24nKTsKICBwdW5jaEJ0bi50ZXh0Q29udGVudCA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgPyAnRMOpcGFydCcgOiAnQXJyaXbDqWUnOwogIGlmIChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgewogICAgcHVuY2hCdG4uY2xhc3NMaXN0LmFkZCgnaXMtZGVwYXJ0Jyk7CiAgfSBlbHNlIHsKICAgIHB1bmNoQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWRlcGFydCcpOwogIH0KCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlTW9kYWxCYWNrZ3JvdW5kJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlQWN0aW9uTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKfQoKZnVuY3Rpb24gY2xvc2VFbXBsb3llZU1vZGFsKCkgewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZUFjdGlvbk1vZGFsJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVNb2RhbEJhY2tncm91bmQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHZhciBwdW5jaEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZVB1bmNoQnV0dG9uJyk7CiAgaWYgKHB1bmNoQnRuKSBwdW5jaEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdpcy1kZXBhcnQnKTsKICBzZWxlY3RlZEVtcGxveWVJZCA9IG51bGw7CiAgc2VsZWN0ZWRJc1BvaW50ZWQgPSAwOwogIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICcnOwp9CgpmdW5jdGlvbiBzdWJtaXRFbXBsb3llZVB1bmNoKCkgewogIGlmICghc2VsZWN0ZWRFbXBsb3llSWQpIHJldHVybjsKCiAgdmFyIHVybCA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkgPyAnZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCcgOiAnZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAnOwogICQuYWpheCh7CiAgICB0eXBlOiAiUE9TVCIsCiAgICB1cmw6IHVybCwKICAgIGRhdGE6IHsgZW1wbG95ZTogc2VsZWN0ZWRFbXBsb3llSWQgfSwKICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgIHZhciBmaXJzdG5hbWVQYXJ0ID0gc2VsZWN0ZWRFbXBsb3llUHJlbm9tID8gKCIgIiArIHNlbGVjdGVkRW1wbG95ZVByZW5vbSkgOiAiIjsKICAgICAgdmFyIG1zZyA9IChzZWxlY3RlZElzUG9pbnRlZCA9PT0gMSkKICAgICAgICA/ICgiRMOpcGFydCIgKyBmaXJzdG5hbWVQYXJ0ICsgIiBlbnJlZ2lzdHLDqSIpCiAgICAgICAgOiAoIkFycml2w6llIiArIGZpcnN0bmFtZVBhcnQgKyAiIGVucmVnaXN0csOpZSIpOwogICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJpbmRleC5waHA/dG9hc3Q9IiArIGVuY29kZVVSSUNvbXBvbmVudChtc2cpICsgIiZ0b2FzdFR5cGU9c3VjY2VzcyI7CiAgICB9LAogICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIsICJlcnJvciIpOwogICAgICB9IGVsc2UgewogICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCiBmdW5jdGlvbiBnb1RvRW1wbG95ZWVEZXRhaWxzKCkgewogICBpZiAoIXNlbGVjdGVkRW1wbG95ZUlkKSByZXR1cm47CiAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gInBvaW50YWdlLnBocD9lbXBsb3llPSIgKyBzZWxlY3RlZEVtcGxveWVJZCArICImdmlldz0xIjsKIH0KCjwvc2NyaXB0PgoKPC9ib2R5PgoKPC9odG1sPgogPC9ib2R5PgogCiA8L2h0bWw+"
            }
        },
        {
            "path": "pointages/modif_pointage.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 7339,
                "sha1": "85205857f8c5dea0e3548bb71d6dc16ededb3a87",
                "content_b64": "PD9waHAKc2Vzc2lvbl9zdGFydCgpOwovKiBkb2MtcHJvamVjdCB8IHBvaW50YWdlcy9tb2RpZl9wb2ludGFnZS5waHAgfCBHw6hyZSBs4oCZYWNjw6hzIHPDqWN1cmlzw6kgZXQgbOKAmWFmZmljaGFnZSBkdSBmb3JtdWxhaXJlIGRlIG1vZGlmaWNhdGlvbiBk4oCZdW4gcG9pbnRhZ2UgZXhpc3RhbnQuIHwgRXhwb3NlOiBhdWN1biB8IETDqXBlbmQgZGU6IGNvbmZpZy5waHAsIHRyYWl0ZW1lbnRfbW9kaWZfcG9pbnRhZ2UucGhwLCBpbmRleC5waHAsIGNvbm5leGlvbi5waHAsIHBvaW50YWdlLnBocCB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCBhZmZpY2hhZ2UgVUksIHJlZGlyZWN0aW9uIGTigJlhY2PDqHMgfCBUYWJsZXM6IHBvc19pcF9hdXRob3JpemF0aW9ucyhpcF9hZGRyZXNzLCBhdXRob3JpemVkX3VudGlsKSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELCBVc2VySUQsIERhdGVIZXVyZUVudHJlZSwgRGF0ZUhldXJlU29ydGllKSwgel9wdGdfYXFwX3V0aWxpc2F0ZXVycyhVc2VySUQsIE5vbSwgUHJlbm9tKSAqLwoKaWYgKCFpc3NldCgkX1NFU1NJT05bJ3Bpbl92ZXJpZmllJ10pIHx8ICRfU0VTU0lPTlsncGluX3ZlcmlmaWUnXSAhPT0gdHJ1ZSkgewogICAgaGVhZGVyKCdMb2NhdGlvbjogaW5kZXgucGhwJyk7IC8vIFJlZGlyaWdlciB2ZXJzIGxhIHBhZ2UgZGUgc2Fpc2llIGR1IFBJTgogICAgZXhpdDsKfQoKLy8gQ29ubmV4aW9uIMOgIGxhIGJhc2UgZGUgZG9ubsOpZXMKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsgLy8gQXNzdXJlei12b3VzIHF1ZSBjZSBmaWNoaWVyIGV4aXN0ZSBldCBjb250aWVudCBsZXMgYm9ubmVzIGluZm9ybWF0aW9ucyBkZSBjb25uZXhpb24KCi8vIFbDqXJpZmljYXRpb24gZGUgbCdhdXRvcmlzYXRpb24gZCdhY2PDqHMKJGlwX2FkZHJlc3MgPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKJGlzQXV0aG9yaXplZCA9IGZhbHNlOwoKLy8gVXRpbGlzZXogbCdvYmpldCBQRE8gZMOpasOgIGNyw6nDqSBkYW5zIGNvbmZpZy5waHAKZ2xvYmFsICRwZG87CgppZiAoaXNzZXQoJF9TRVNTSU9OWydhdXRob3JpemVkJ10pICYmICRfU0VTU0lPTlsnYXV0aG9yaXplZCddID09PSB0cnVlKSB7CiAgICAvLyBMJ3V0aWxpc2F0ZXVyIGVzdCBkw6lqw6AgYXV0b3Jpc8OpIHZpYSBsYSBzZXNzaW9uCiAgICAkaXNBdXRob3JpemVkID0gdHJ1ZTsKfSBlbHNlIHsKICAgIC8vIFbDqXJpZmljYXRpb24gZGUgbCdhdXRvcmlzYXRpb24gZGUgbCdJUCBkYW5zIGxhIGJhc2UgZGUgZG9ubsOpZXMKICAgIHRyeSB7CiAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBwb3NfaXBfYXV0aG9yaXphdGlvbnMgV0hFUkUgaXBfYWRkcmVzcyA9IDppcF9hZGRyZXNzIEFORCBhdXRob3JpemVkX3VudGlsID4gTk9XKCkiKTsKICAgICAgICAkc3RtdC0+ZXhlY3V0ZShbJzppcF9hZGRyZXNzJyA9PiAkaXBfYWRkcmVzc10pOwogICAgICAgICRjb3VudCA9ICRzdG10LT5mZXRjaENvbHVtbigpOwogICAgICAgIAogICAgICAgIGlmICgkY291bnQgPiAwKSB7CiAgICAgICAgICAgIC8vIEwnYWRyZXNzZSBJUCBlc3QgYXV0b3Jpc8OpZQogICAgICAgICAgICAkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSA9IHRydWU7CiAgICAgICAgICAgICRpc0F1dGhvcml6ZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH0gY2F0Y2ggKFBET0V4Y2VwdGlvbiAkZSkgewogICAgICAgIC8vIEVuIGNhcyBkJ2VycmV1ciBkZSBiYXNlIGRlIGRvbm7DqWVzLCBhZmZpY2hleiBsJ2VycmV1cgogICAgICAgIGVjaG8gIkVycmV1ciBkZSBiYXNlIGRlIGRvbm7DqWVzIDogIiAuICRlLT5nZXRNZXNzYWdlKCk7CiAgICAgICAgZXhpdDsKICAgIH0KfQoKLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2VzdCBwYXMgYXV0b3Jpc8OpLCByZWRpcmlnZXotbGUgdmVycyBjb25uZXhpb24ucGhwCmlmICghJGlzQXV0aG9yaXplZCkgewogICAgaGVhZGVyKCdMb2NhdGlvbjogY29ubmV4aW9uLnBocD9hY2Nlc3M9cmVmdXNlZCcpOwogICAgZXhpdDsKfQoKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnRXVyb3BlL1BhcmlzJyk7CgokcG9pbnRhZ2UgPSBudWxsOwokZW1wbG95ZSA9IG51bGw7CiR1c2VySWQgPSBudWxsOwoKZnVuY3Rpb24gZm9ybWF0RGF0ZXRpbWVMb2NhbCgkdmFsdWUpIHsKICAgICRyYXcgPSBpc19zdHJpbmcoJHZhbHVlKSA/IHRyaW0oJHZhbHVlKSA6ICcnOwogICAgaWYgKCRyYXcgPT09ICcnKSByZXR1cm4gJyc7CiAgICB0cnkgewogICAgICAgICRkdCA9IG5ldyBEYXRlVGltZSgkcmF3KTsKICAgICAgICAkZHQtPnNldFRpbWV6b25lKG5ldyBEYXRlVGltZVpvbmUoJ0V1cm9wZS9QYXJpcycpKTsKICAgICAgICByZXR1cm4gJGR0LT5mb3JtYXQoJ1ktbS1kXFRIOmknKTsKICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgIHJldHVybiAnJzsKICAgIH0KfQoKaWYgKGlzc2V0KCRfR0VUWydwb2ludGFnZUlkJ10pKSB7CiAgICAkcG9pbnRhZ2VJZCA9IChpbnQpJF9HRVRbJ3BvaW50YWdlSWQnXTsKCiAgICAvLyBSw6ljdXDDqXJhdGlvbiBkZXMgaW5mb3JtYXRpb25zIGRlIHBvaW50YWdlCiAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gel9wdGdfYXFwX3BvaW50YWdlcyBXSEVSRSBQb2ludGFnZUlEID0gOnBvaW50YWdlSWQiKTsKICAgICRzdG10LT5leGVjdXRlKFsnOnBvaW50YWdlSWQnID0+ICRwb2ludGFnZUlkXSk7CiAgICAkcG9pbnRhZ2UgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CgogICAgaWYgKCRwb2ludGFnZSAmJiBpc3NldCgkcG9pbnRhZ2VbJ1VzZXJJRCddKSkgewogICAgICAgICR1c2VySWQgPSAoaW50KSRwb2ludGFnZVsnVXNlcklEJ107CiAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgTm9tLCBQcmVub20gRlJPTSB6X3B0Z19hcXBfdXRpbGlzYXRldXJzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQgTElNSVQgMSIpOwogICAgICAgICRzdG10LT5leGVjdXRlKFsnOnVzZXJJRCcgPT4gJHVzZXJJZF0pOwogICAgICAgICRlbXBsb3llID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwogICAgfQp9CgokZW50cmVlVmFsdWUgPSAkcG9pbnRhZ2UgPyBmb3JtYXREYXRldGltZUxvY2FsKCRwb2ludGFnZVsnRGF0ZUhldXJlRW50cmVlJ10gPz8gJycpIDogJyc7CiRzb3J0aWVWYWx1ZSA9ICRwb2ludGFnZSA/IGZvcm1hdERhdGV0aW1lTG9jYWwoJHBvaW50YWdlWydEYXRlSGV1cmVTb3J0aWUnXSA/PyAnJykgOiAnJzsKCiRlbXBsb3llZUZ1bGxOYW1lID0gJyc7CmlmIChpc19hcnJheSgkZW1wbG95ZSkpIHsKICAgICRub20gPSBpc3NldCgkZW1wbG95ZVsnTm9tJ10pID8gKHN0cmluZykkZW1wbG95ZVsnTm9tJ10gOiAnJzsKICAgICRwcmVub20gPSBpc3NldCgkZW1wbG95ZVsnUHJlbm9tJ10pID8gKHN0cmluZykkZW1wbG95ZVsnUHJlbm9tJ10gOiAnJzsKICAgICRlbXBsb3llZUZ1bGxOYW1lID0gdHJpbSgkbm9tIC4gJyAnIC4gJHByZW5vbSk7Cn0KPz4KPCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCjxoZWFkPgoKPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Cgo8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgoKPHRpdGxlPk1vZGlmaWNhdGlvbiBwb2ludGFnZTwvdGl0bGU+Cgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImFwcGxlLXRvdWNoLWljb24ucG5nIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jvb3RzdHJhcC5taW4uY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2ZvbnRBd2Vzb21lLmNzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9oZXJvLXNsaWRlci5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvdG9vcGxhdGUtc3R5bGUuY3NzIj4KCjw/cGhwCiRjc3NQYXRoID0gX19ESVJfXyAuICcvY3NzL3N0eWxlLmNzcyc7CiRjc3NWZXJzaW9uID0gZmlsZV9leGlzdHMoJGNzc1BhdGgpID8gZmlsZW10aW1lKCRjc3NQYXRoKSA6IHRpbWUoKTsKJG1vZGlmQ3NzUGF0aCA9IF9fRElSX18gLiAnL2Nzcy9tb2RpZi1wb2ludGFnZS5jc3MnOwokbW9kaWZDc3NWZXJzaW9uID0gZmlsZV9leGlzdHMoJG1vZGlmQ3NzUGF0aCkgPyBmaWxlbXRpbWUoJG1vZGlmQ3NzUGF0aCkgOiB0aW1lKCk7Cj8+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTw/cGhwIGVjaG8gKGludCkkY3NzVmVyc2lvbjsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9tb2RpZi1wb2ludGFnZS5jc3M/dj08P3BocCBlY2hvIChpbnQpJG1vZGlmQ3NzVmVyc2lvbjsgPz4iPgoKPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PU9wZW4rU2FuczozMDAsNDAwLDYwMCw3MDAsODAwIiByZWw9InN0eWxlc2hlZXQiPgoKPHNjcmlwdCBzcmM9ImpzL3ZlbmRvci9tb2Rlcm5penItMi44LjMtcmVzcG9uZC0xLjQuMi5taW4uanMiPjwvc2NyaXB0PgoKPC9oZWFkPgoKPGJvZHkgY2xhc3M9InBhZ2UtbW9kaWYtcG9pbnRhZ2UgdGhlbWUtZGFyayI+Cgo8bWFpbiBjbGFzcz0icHRnLXBhZ2UiIHJvbGU9Im1haW4iPgogIDxkaXYgY2xhc3M9InB0Zy1jYXJkIj4KICAgIDxoZWFkZXIgY2xhc3M9InB0Zy1oZWFkZXIiPgogICAgICA8aDE+TW9kaWZpY2F0aW9uIGTigJl1biBwb2ludGFnZTwvaDE+CiAgICAgIDw/cGhwIGlmICgkZW1wbG95ZWVGdWxsTmFtZSAhPT0gJycpOiA/PgogICAgICAgIDxwIGNsYXNzPSJwdGctc3VidGl0bGUiPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZW1wbG95ZWVGdWxsTmFtZSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+PC9wPgogICAgICA8P3BocCBlbmRpZjsgPz4KICAgIDwvaGVhZGVyPgoKICAgIDw/cGhwIGlmICghJHBvaW50YWdlKTogPz4KICAgICAgPGRpdiBjbGFzcz0icHRnLWFsZXJ0IiByb2xlPSJzdGF0dXMiPgogICAgICAgIFBvaW50YWdlIGludHJvdXZhYmxlIChvdSBpZGVudGlmaWFudCBtYW5xdWFudCkuCiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwdGctYWN0aW9ucyI+CiAgICAgICAgPGEgY2xhc3M9InB0Zy1idG4gc2Vjb25kYXJ5IiBocmVmPSJpbmRleC5waHAiPlJldG91ciBhY2N1ZWlsPC9hPgogICAgICA8L2Rpdj4KICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgIDxmb3JtIGNsYXNzPSJwdGctZm9ybSIgYWN0aW9uPSJ0cmFpdGVtZW50X21vZGlmX3BvaW50YWdlLnBocCIgbWV0aG9kPSJwb3N0IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icG9pbnRhZ2VJZCIgdmFsdWU9Ijw/cGhwIGVjaG8gKGludCkkcG9pbnRhZ2VbJ1BvaW50YWdlSUQnXTsgPz4iPgoKICAgICAgICA8ZGl2IGNsYXNzPSJwdGctZmllbGQiPgogICAgICAgICAgPGxhYmVsIGZvcj0iRGF0ZUhldXJlRW50cmVlIj5EYXRlIC8gaGV1cmUgZOKAmWVudHLDqWU8L2xhYmVsPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIGlkPSJEYXRlSGV1cmVFbnRyZWUiCiAgICAgICAgICAgIHR5cGU9ImRhdGV0aW1lLWxvY2FsIgogICAgICAgICAgICBuYW1lPSJEYXRlSGV1cmVFbnRyZWUiCiAgICAgICAgICAgIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGVudHJlZVZhbHVlLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iCiAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICA+CiAgICAgICAgICA8cCBjbGFzcz0icHRnLWhlbHAiPkZvcm1hdCBsb2NhbCAoRXVyb3BlL1BhcmlzKS48L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InB0Zy1maWVsZCI+CiAgICAgICAgICA8bGFiZWwgZm9yPSJEYXRlSGV1cmVTb3J0aWUiPkRhdGUgLyBoZXVyZSBkZSBzb3J0aWU8L2xhYmVsPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIGlkPSJEYXRlSGV1cmVTb3J0aWUiCiAgICAgICAgICAgIHR5cGU9ImRhdGV0aW1lLWxvY2FsIgogICAgICAgICAgICBuYW1lPSJEYXRlSGV1cmVTb3J0aWUiCiAgICAgICAgICAgIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNvcnRpZVZhbHVlLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iCiAgICAgICAgICA+CiAgICAgICAgICA8cCBjbGFzcz0icHRnLWhlbHAiPkxhaXNzZXogdmlkZSBzaSBsZSBwb2ludGFnZSBkb2l0IHJlc3RlciDigJxlbiBjb3Vyc+KAnS48L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InB0Zy1hY3Rpb25zIj4KICAgICAgICAgIDw/cGhwIGlmIChpc19pbnQoJHVzZXJJZCkgfHwgaXNfbnVtZXJpYygkdXNlcklkKSk6ID8+CiAgICAgICAgICAgIDxhIGNsYXNzPSJwdGctYnRuIHNlY29uZGFyeSIgaHJlZj0icG9pbnRhZ2UucGhwP2VtcGxveWU9PD9waHAgZWNobyAoaW50KSR1c2VySWQ7ID8+JnZpZXc9MSI+QW5udWxlcjwvYT4KICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgIDxhIGNsYXNzPSJwdGctYnRuIHNlY29uZGFyeSIgaHJlZj0iaW5kZXgucGhwIj5Bbm51bGVyPC9hPgogICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InB0Zy1idG4gcHJpbWFyeSI+VmFsaWRlcjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Zvcm0+CiAgICA8P3BocCBlbmRpZjsgPz4KICA8L2Rpdj4KPC9tYWluPgoKPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzMuNS4xL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoJzxzY3JpcHQgc3JjPSJqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMiPjxcL3NjcmlwdD4nKTwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0ianMvdmVuZG9yL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0ianMvcGx1Z2lucy5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJqcy9tYWluLmpzIj48L3NjcmlwdD4KCjwvYm9keT4KPC9odG1sPgogICAgICAgICAgICAKICAgICAgICAgICAgPC9ib2R5PgogICAgICAgICAgICAKICAgICAgICAgICAgPC9odG1sPg=="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 6039,
                "sha1": "69023f590ae15ed673716eca31cd4852132b2375",
                "content_b64": "PD9waHAKc2Vzc2lvbl9zdGFydCgpOwovKiBkb2MtcHJvamVjdCB8IHBvaW50YWdlcy9tb2RpZl9wb2ludGFnZS5waHAgfCBHw6hyZSBs4oCZYWNjw6hzIHPDqWN1cmlzw6kgcGFyIGFwcGFyZWlsIGV0IGzigJlhZmZpY2hhZ2UgZHUgZm9ybXVsYWlyZSBkZSBtb2RpZmljYXRpb24gZOKAmXVuIHBvaW50YWdlIGV4aXN0YW50LiB8IEV4cG9zZTogYXVjdW4gfCBEw6lwZW5kIGRlOiBjb25maWcucGhwLCBpbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAsIHRyYWl0ZW1lbnRfbW9kaWZfcG9pbnRhZ2UucGhwLCBpbmRleC5waHAsIGNvbm5leGlvbi5waHAsIHBvaW50YWdlLnBocCB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCBjb29raWUgZOKAmWFwcGFyZWlsLCBhZmZpY2hhZ2UgVUksIHJlZGlyZWN0aW9uIGTigJlhY2PDqHMgfCBUYWJsZXM6IHBvc19kZXZpY2VfYXV0aG9yaXphdGlvbnModG9rZW5faGFzaCwgYXV0aG9yaXplZF9hdCwgbGFzdF91c2VkX2F0KSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELCBVc2VySUQsIERhdGVIZXVyZUVudHJlZSwgRGF0ZUhldXJlU29ydGllKSwgel9wdGdfYXFwX3V0aWxpc2F0ZXVycyhVc2VySUQsIE5vbSwgUHJlbm9tKSAqLwoKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7CgpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCiRwb2ludGFnZSA9IG51bGw7CiRlbXBsb3llID0gbnVsbDsKJHVzZXJJZCA9IG51bGw7CgpmdW5jdGlvbiBmb3JtYXREYXRldGltZUxvY2FsKCR2YWx1ZSkgewogICAgJHJhdyA9IGlzX3N0cmluZygkdmFsdWUpID8gdHJpbSgkdmFsdWUpIDogJyc7CiAgICBpZiAoJHJhdyA9PT0gJycpIHJldHVybiAnJzsKICAgIHRyeSB7CiAgICAgICAgJGR0ID0gbmV3IERhdGVUaW1lKCRyYXcpOwogICAgICAgICRkdC0+c2V0VGltZXpvbmUobmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJykpOwogICAgICAgIHJldHVybiAkZHQtPmZvcm1hdCgnWS1tLWRcVEg6aScpOwogICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9CgppZiAoaXNzZXQoJF9HRVRbJ3BvaW50YWdlSWQnXSkpIHsKICAgICRwb2ludGFnZUlkID0gKGludCkkX0dFVFsncG9pbnRhZ2VJZCddOwoKICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlcyBpbmZvcm1hdGlvbnMgZGUgcG9pbnRhZ2UKICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFBvaW50YWdlSUQgPSA6cG9pbnRhZ2VJZCIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyc6cG9pbnRhZ2VJZCcgPT4gJHBvaW50YWdlSWRdKTsKICAgICRwb2ludGFnZSA9ICRzdG10LT5mZXRjaChQRE86OkZFVENIX0FTU09DKTsKCiAgICBpZiAoJHBvaW50YWdlICYmIGlzc2V0KCRwb2ludGFnZVsnVXNlcklEJ10pKSB7CiAgICAgICAgJHVzZXJJZCA9IChpbnQpJHBvaW50YWdlWydVc2VySUQnXTsKICAgICAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBOb20sIFByZW5vbSBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCBMSU1JVCAxIik7CiAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkdXNlcklkXSk7CiAgICAgICAgJGVtcGxveWUgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CiAgICB9Cn0KCiRlbnRyZWVWYWx1ZSA9ICRwb2ludGFnZSA/IGZvcm1hdERhdGV0aW1lTG9jYWwoJHBvaW50YWdlWydEYXRlSGV1cmVFbnRyZWUnXSA/PyAnJykgOiAnJzsKJHNvcnRpZVZhbHVlID0gJHBvaW50YWdlID8gZm9ybWF0RGF0ZXRpbWVMb2NhbCgkcG9pbnRhZ2VbJ0RhdGVIZXVyZVNvcnRpZSddID8/ICcnKSA6ICcnOwoKJGVtcGxveWVlRnVsbE5hbWUgPSAnJzsKaWYgKGlzX2FycmF5KCRlbXBsb3llKSkgewogICAgJG5vbSA9IGlzc2V0KCRlbXBsb3llWydOb20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydOb20nXSA6ICcnOwogICAgJHByZW5vbSA9IGlzc2V0KCRlbXBsb3llWydQcmVub20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydQcmVub20nXSA6ICcnOwogICAgJGVtcGxveWVlRnVsbE5hbWUgPSB0cmltKCRub20gLiAnICcgLiAkcHJlbm9tKTsKfQo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+Cgo8dGl0bGU+TW9kaWZpY2F0aW9uIHBvaW50YWdlPC90aXRsZT4KCjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgoKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KCjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iYXBwbGUtdG91Y2gtaWNvbi5wbmciPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYm9vdHN0cmFwLm1pbi5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvZm9udEF3ZXNvbWUuY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2hlcm8tc2xpZGVyLmNzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy90b29wbGF0ZS1zdHlsZS5jc3MiPgoKPD9waHAKJGNzc1BhdGggPSBfX0RJUl9fIC4gJy9jc3Mvc3R5bGUuY3NzJzsKJGNzc1ZlcnNpb24gPSBmaWxlX2V4aXN0cygkY3NzUGF0aCkgPyBmaWxlbXRpbWUoJGNzc1BhdGgpIDogdGltZSgpOwokbW9kaWZDc3NQYXRoID0gX19ESVJfXyAuICcvY3NzL21vZGlmLXBvaW50YWdlLmNzcyc7CiRtb2RpZkNzc1ZlcnNpb24gPSBmaWxlX2V4aXN0cygkbW9kaWZDc3NQYXRoKSA/IGZpbGVtdGltZSgkbW9kaWZDc3NQYXRoKSA6IHRpbWUoKTsKPz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9PD9waHAgZWNobyAoaW50KSRjc3NWZXJzaW9uOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL21vZGlmLXBvaW50YWdlLmNzcz92PTw/cGhwIGVjaG8gKGludCkkbW9kaWZDc3NWZXJzaW9uOyA/PiI+Cgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjMwMCw0MDAsNjAwLDcwMCw4MDAiIHJlbD0ic3R5bGVzaGVldCI+Cgo8c2NyaXB0IHNyYz0ianMvdmVuZG9yL21vZGVybml6ci0yLjguMy1yZXNwb25kLTEuNC4yLm1pbi5qcyI+PC9zY3JpcHQ+Cgo8L2hlYWQ+Cgo8Ym9keSBjbGFzcz0icGFnZS1tb2RpZi1wb2ludGFnZSB0aGVtZS1kYXJrIj4KCjxtYWluIGNsYXNzPSJwdGctcGFnZSIgcm9sZT0ibWFpbiI+CiAgPGRpdiBjbGFzcz0icHRnLWNhcmQiPgogICAgPGhlYWRlciBjbGFzcz0icHRnLWhlYWRlciI+CiAgICAgIDxoMT5Nb2RpZmljYXRpb24gZOKAmXVuIHBvaW50YWdlPC9oMT4KICAgICAgPD9waHAgaWYgKCRlbXBsb3llZUZ1bGxOYW1lICE9PSAnJyk6ID8+CiAgICAgICAgPHAgY2xhc3M9InB0Zy1zdWJ0aXRsZSI+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRlbXBsb3llZUZ1bGxOYW1lLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz48L3A+CiAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPC9oZWFkZXI+CgogICAgPD9waHAgaWYgKCEkcG9pbnRhZ2UpOiA/PgogICAgICA8ZGl2IGNsYXNzPSJwdGctYWxlcnQiIHJvbGU9InN0YXR1cyI+CiAgICAgICAgUG9pbnRhZ2UgaW50cm91dmFibGUgKG91IGlkZW50aWZpYW50IG1hbnF1YW50KS4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InB0Zy1hY3Rpb25zIj4KICAgICAgICA8YSBjbGFzcz0icHRnLWJ0biBzZWNvbmRhcnkiIGhyZWY9ImluZGV4LnBocCI+UmV0b3VyIGFjY3VlaWw8L2E+CiAgICAgIDwvZGl2PgogICAgPD9waHAgZWxzZTogPz4KICAgICAgPGZvcm0gY2xhc3M9InB0Zy1mb3JtIiBhY3Rpb249InRyYWl0ZW1lbnRfbW9kaWZfcG9pbnRhZ2UucGhwIiBtZXRob2Q9InBvc3QiIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwb2ludGFnZUlkIiB2YWx1ZT0iPD9waHAgZWNobyAoaW50KSRwb2ludGFnZVsnUG9pbnRhZ2VJRCddOyA/PiI+CgogICAgICAgIDxkaXYgY2xhc3M9InB0Zy1maWVsZCI+CiAgICAgICAgICA8bGFiZWwgZm9yPSJEYXRlSGV1cmVFbnRyZWUiPkRhdGUgLyBoZXVyZSBk4oCZZW50csOpZTwvbGFiZWw+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgaWQ9IkRhdGVIZXVyZUVudHJlZSIKICAgICAgICAgICAgdHlwZT0iZGF0ZXRpbWUtbG9jYWwiCiAgICAgICAgICAgIG5hbWU9IkRhdGVIZXVyZUVudHJlZSIKICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZW50cmVlVmFsdWUsIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiIKICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgID4KICAgICAgICAgIDxwIGNsYXNzPSJwdGctaGVscCI+Rm9ybWF0IGxvY2FsIChFdXJvcGUvUGFyaXMpLjwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHRnLWZpZWxkIj4KICAgICAgICAgIDxsYWJlbCBmb3I9IkRhdGVIZXVyZVNvcnRpZSI+RGF0ZSAvIGhldXJlIGRlIHNvcnRpZTwvbGFiZWw+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgaWQ9IkRhdGVIZXVyZVNvcnRpZSIKICAgICAgICAgICAgdHlwZT0iZGF0ZXRpbWUtbG9jYWwiCiAgICAgICAgICAgIG5hbWU9IkRhdGVIZXVyZVNvcnRpZSIKICAgICAgICAgICAgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc29ydGllVmFsdWUsIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiIKICAgICAgICAgID4KICAgICAgICAgIDxwIGNsYXNzPSJwdGctaGVscCI+TGFpc3NleiB2aWRlIHNpIGxlIHBvaW50YWdlIGRvaXQgcmVzdGVyIOKAnGVuIGNvdXJz4oCdLjwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHRnLWFjdGlvbnMiPgogICAgICAgICAgPD9waHAgaWYgKGlzX2ludCgkdXNlcklkKSB8fCBpc19udW1lcmljKCR1c2VySWQpKTogPz4KICAgICAgICAgICAgPGEgY2xhc3M9InB0Zy1idG4gc2Vjb25kYXJ5IiBocmVmPSJwb2ludGFnZS5waHA/ZW1wbG95ZT08P3BocCBlY2hvIChpbnQpJHVzZXJJZDsgPz4mdmlldz0xIj5Bbm51bGVyPC9hPgogICAgICAgICAgPD9waHAgZWxzZTogPz4KICAgICAgICAgICAgPGEgY2xhc3M9InB0Zy1idG4gc2Vjb25kYXJ5IiBocmVmPSJpbmRleC5waHAiPkFubnVsZXI8L2E+CiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0icHRnLWJ0biBwcmltYXJ5Ij5WYWxpZGVyPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KICAgIDw/cGhwIGVuZGlmOyA/PgogIDwvZGl2Pgo8L21haW4+Cgo8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMy41LjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgnPHNjcmlwdCBzcmM9ImpzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcyI+PFwvc2NyaXB0PicpPC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJqcy92ZW5kb3IvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJqcy9wbHVnaW5zLmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9ImpzL21haW4uanMiPjwvc2NyaXB0PgoKPC9ib2R5Pgo8L2h0bWw+CiAgICAgICAgICAgIAogICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIAogICAgICAgICAgICA8L2h0bWw+"
            }
        },
        {
            "path": "pointages/pointage.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 22424,
                "sha1": "fc84550a649c5047fd452c70e9a4d1fa175566e3",
                "content_b64": "PD9waHAKCi8qIGRvYy1wcm9qZWN0IHwgcG9pbnRhZ2VzL3BvaW50YWdlLnBocCB8IEFmZmljaGUsIHPDqWN1cmlzZSBldCBwaWxvdGUgbOKAmWludGVyZmFjZSBkZSBwb2ludGFnZSBkZXMgc2FsYXJpw6lzIGF2ZWMgY29uc3VsdGF0aW9uIGRlcyBoZXVyZXMgZXQgYWN0aW9ucyBhcnJpdsOpZS9kw6lwYXJ0IHZpYSBQSU4uIHwgRXhwb3NlOiBhdWN1biB8IETDqXBlbmQgZGU6IGNvbmZpZy5waHAsIGNvbm5leGlvbi5waHAsIGVucmVnaXN0cmVtZW50X2Fycml2ZWUucGhwLCBlbnJlZ2lzdHJlbWVudF9kZXBhcnQucGhwLCB2ZXJpZmllcl9waW4ucGhwLCBzb3J0aXJfZW1wbG95ZS5waHAsIG1vZGlmX3BvaW50YWdlLnBocCB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCByZWRpcmVjdGlvbnMsIGFmZmljaGFnZSBVSSwgQUpBWCwgcG9pbnRhZ2VzIGVuIGJhc2UgfCBUYWJsZXM6IHBvc19pcF9hdXRob3JpemF0aW9ucyhpcF9hZGRyZXNzLCBhdXRob3JpemVkX3VudGlsKSwgel9wdGdfYXFwX3V0aWxpc2F0ZXVycyhVc2VySUQsIE5vbSwgUHJlbm9tKSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELCBVc2VySUQsIERhdGVIZXVyZUVudHJlZSwgRGF0ZUhldXJlU29ydGllKSAqLwoKCi8vIETDqW1hcnJhZ2Ugb3UgcmVwcmlzZSBkZSBsYSBzZXNzaW9uCnNlc3Npb25fc3RhcnQoKTsKCi8vIFN1cHByaW1lciB1bmlxdWVtZW50ICRfU0VTU0lPTlsncGluX3ZlcmlmaWUnXQppZiAoaXNzZXQoJF9TRVNTSU9OWydwaW5fdmVyaWZpZSddKSkgewogICAgdW5zZXQoJF9TRVNTSU9OWydwaW5fdmVyaWZpZSddKTsKICB9CgoKCi8vIENvbm5leGlvbiDDoCBsYSBiYXNlIGRlIGRvbm7DqWVzCnJlcXVpcmVfb25jZSAiY29uZmlnLnBocCI7IC8vIEFzc3VyZXotdm91cyBxdWUgY2UgZmljaGllciBleGlzdGUgZXQgY29udGllbnQgbGVzIGJvbm5lcyBpbmZvcm1hdGlvbnMgZGUgY29ubmV4aW9uCgovLyBWw6lyaWZpY2F0aW9uIGRlIGwnYXV0b3Jpc2F0aW9uIGQnYWNjw6hzCiRpcF9hZGRyZXNzID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107CiRpc0F1dGhvcml6ZWQgPSBmYWxzZTsKCi8vIFV0aWxpc2V6IGwnb2JqZXQgUERPIGTDqWrDoCBjcsOpw6kgZGFucyBjb25maWcucGhwCmdsb2JhbCAkcGRvOwoKaWYgKGlzc2V0KCRfU0VTU0lPTlsnYXV0aG9yaXplZCddKSAmJiAkX1NFU1NJT05bJ2F1dGhvcml6ZWQnXSA9PT0gdHJ1ZSkgewogICAgLy8gTCd1dGlsaXNhdGV1ciBlc3QgZMOpasOgIGF1dG9yaXPDqSB2aWEgbGEgc2Vzc2lvbgogICAgJGlzQXV0aG9yaXplZCA9IHRydWU7Cn0gZWxzZSB7CiAgICAvLyBWw6lyaWZpY2F0aW9uIGRlIGwnYXV0b3Jpc2F0aW9uIGRlIGwnSVAgZGFucyBsYSBiYXNlIGRlIGRvbm7DqWVzCiAgICB0cnkgewogICAgICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUIENPVU5UKCopIEZST00gcG9zX2lwX2F1dGhvcml6YXRpb25zIFdIRVJFIGlwX2FkZHJlc3MgPSA6aXBfYWRkcmVzcyBBTkQgYXV0aG9yaXplZF91bnRpbCA+IE5PVygpIik7CiAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6aXBfYWRkcmVzcycgPT4gJGlwX2FkZHJlc3NdKTsKICAgICAgICAkY291bnQgPSAkc3RtdC0+ZmV0Y2hDb2x1bW4oKTsKICAgICAgICAKICAgICAgICBpZiAoJGNvdW50ID4gMCkgewogICAgICAgICAgICAvLyBMJ2FkcmVzc2UgSVAgZXN0IGF1dG9yaXPDqWUKICAgICAgICAgICAgJF9TRVNTSU9OWydhdXRob3JpemVkJ10gPSB0cnVlOwogICAgICAgICAgICAkaXNBdXRob3JpemVkID0gdHJ1ZTsKICAgICAgICB9CiAgICB9IGNhdGNoIChQRE9FeGNlcHRpb24gJGUpIHsKICAgICAgICAvLyBFbiBjYXMgZCdlcnJldXIgZGUgYmFzZSBkZSBkb25uw6llcywgYWZmaWNoZXogbCdlcnJldXIKICAgICAgICBlY2hvICJFcnJldXIgZGUgYmFzZSBkZSBkb25uw6llcyA6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpOwogICAgICAgIGV4aXQ7CiAgICB9Cn0KCi8vIFNpIGwndXRpbGlzYXRldXIgbidlc3QgcGFzIGF1dG9yaXPDqSwgcmVkaXJpZ2V6LWxlIHZlcnMgY29ubmV4aW9uLnBocAppZiAoISRpc0F1dGhvcml6ZWQpIHsKICAgIGhlYWRlcignTG9jYXRpb246IGNvbm5leGlvbi5waHA/YWNjZXNzPXJlZnVzZWQnKTsKICAgIGV4aXQ7Cn0KCmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwoKLy8gUsOpY3Vww6lyYXRpb24gZGUgbCdJRCBkZSBsJ2VtcGxvecOpCiRlbXBsb3llSWQgPSBpc3NldCgkX0dFVFsnZW1wbG95ZSddKSA/IGludHZhbCgkX0dFVFsnZW1wbG95ZSddKSA6IG51bGw7CiR2aWV3T25seSA9IChpc3NldCgkX0dFVFsndmlldyddKSAmJiAkX0dFVFsndmlldyddID09PSAnMScpOwoKLy8gUsOpY3Vww6lyYXRpb24gZGVzIGluZm9ybWF0aW9ucyBkZSBsJ2VtcGxvecOpIGRlcHVpcyBsYSBCREQKJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgTm9tLCBQcmVub20gRlJPTSB6X3B0Z19hcXBfdXRpbGlzYXRldXJzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQiKTsKJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkXSk7CiRlbXBsb3llID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwoKLy8gUsOpY3Vww6lyYXRpb24gZHUgZGVybmllciBwb2ludGFnZSBkZSBsJ2VtcGxvecOpCiRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQgT1JERVIgQlkgRGF0ZUhldXJlRW50cmVlIERFU0MsIFBvaW50YWdlSUQgREVTQyBMSU1JVCAxIik7CiRzdG10LT5leGVjdXRlKFsnOnVzZXJJRCcgPT4gJGVtcGxveWVJZF0pOwokbGFzdFBvaW50YWdlID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwoKJGlzV29ya2luZyA9ICRsYXN0UG9pbnRhZ2UgJiYgJGxhc3RQb2ludGFnZVsnRGF0ZUhldXJlU29ydGllJ10gPT09IG51bGw7Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCgoKPHRpdGxlPlBvaW50YWdlcyBzYWxhcmnDqXM8L3RpdGxlPgoKPCEtLQoKCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKCgpodHRwOi8vd3d3LnRvb3BsYXRlLmNvbS92aWV3LzIwODktbWV0ZW9yCgoKCi0tPgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jvb3RzdHJhcC5taW4uY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2ZvbnRBd2Vzb21lLmNzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9mb250QXdlc29tZS5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9oZXJvLXNsaWRlci5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy90b29wbGF0ZS1zdHlsZS5jc3MiPgo8P3BocAokY3NzUGF0aCA9IF9fRElSX18gLiAnL2Nzcy9zdHlsZS5jc3MnOwokY3NzVmVyc2lvbiA9IGZpbGVfZXhpc3RzKCRjc3NQYXRoKSA/IGZpbGVtdGltZSgkY3NzUGF0aCkgOiB0aW1lKCk7Cj8+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTw/cGhwIGVjaG8gKGludCkkY3NzVmVyc2lvbjsgPz4iPgoKCgo8bGluayBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjMwMCw0MDAsNjAwLDcwMCw4MDAiIHJlbD0ic3R5bGVzaGVldCI+CgoKCjxzY3JpcHQgc3JjPSJqcy92ZW5kb3IvbW9kZXJuaXpyLTIuOC4zLXJlc3BvbmQtMS40LjIubWluLmpzIj48L3NjcmlwdD4KCjwvaGVhZD4KCgoKPGJvZHkgY2xhc3M9InBhZ2UtcG9pbnRhZ2UgdGhlbWUtZGFyayI+CgoKCgo8ZGl2IGlkPSJhYm91dCIgY2xhc3M9InBhZ2Utc2VjdGlvbiI+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CjxkaXYgY2xhc3M9InJvdyI+CjxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+CjxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGluZyI+CjxoMT5Qb2ludGFnZXMgPD9waHAgZWNobyAkZW1wbG95ZVsnTm9tJ10gLiAiICIgLiAkZW1wbG95ZVsnUHJlbm9tJ107ID8+PC9oMT4KPGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2Pgo8Y2VudGVyPgo8Zm9udCBjb2xvcj0id2hpdGUiPgo8YnI+CjxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iYmFja0hvbWVCdXR0b24iIGNsYXNzPSJidG4iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5ocmVmPSdpbmRleC5waHAnOyI+UmV0b3VyIGFjY3VlaWw8L2J1dHRvbj4KPGJyPgo8P3BocCBpZiAoISR2aWV3T25seSk6ID8+CiAgICA8P3BocCBpZiAoISRpc1dvcmtpbmcpOiA/PgogICAgICAgIDxmb3JtIGlkPSJjb250YWN0Ij4KICAgICAgICA8YnV0dG9uIGRhdGEtZW1wbG95ZT0iPD9waHAgZWNobyAkZW1wbG95ZUlkOyA/PiIgaWQ9ImFycml2YWxCdXR0b24iIGNsYXNzPSJidG4iPkFycml2w6llPC9idXR0b24+CiAgICAgICAgPC9mb3JtPgogICAgPD9waHAgZWxzZTogPz4KICAgICAgICA8Zm9ybSBpZD0iY29udGFjdDIiPgogICAgICAgIDxidXR0b24gZGF0YS1lbXBsb3llPSI8P3BocCBlY2hvICRlbXBsb3llSWQ7ID8+IiBpZD0iZGVwYXJ0dXJlQnV0dG9uIiBjbGFzcz0iYnRuIj5Ew6lwYXJ0PC9idXR0b24+CiAgICAgICAgPC9mb3JtPgogICAgPD9waHAgZW5kaWY7ID8+Cjw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwhLS0gQXV0cmUgY29udGVudS4uLiAtLT4KICAgICAgICA8L2ZvbnQ+CiAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPGJyPjxicj4gCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2PgogICAgICAgIAogICAgICAgIDxicj48YnI+CiAgICAgICAgPGNlbnRlcj4KICAgICAgICA8P3BocAogICAgICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlIGwnSUQgZGUgbCdlbXBsb3nDqQogICAgICAgICRlbXBsb3llSWQgPSBpc3NldCgkX0dFVFsnZW1wbG95ZSddKSA/IGludHZhbCgkX0dFVFsnZW1wbG95ZSddKSA6IG51bGw7CiAgICAgICAgCiAgICAgICAgLy8gSW5pdGlhbGlzYXRpb24gZGVzIHZhcmlhYmxlcyBwb3VyIGxlIHRhYmxlYXUKICAgICAgICAkdG90YWxfaG91cnMgPSAwOwogICAgICAgICR0YWJsZV9yb3dzID0gIiI7CiAgICAgICAgCiAgICAgICAgJGN1cnJlbnRfbW9udGggPSBkYXRlKCdtJyk7CiAgICAgICAgJGN1cnJlbnRfeWVhciA9IGRhdGUoJ1knKTsKICAgICAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKICAgICAgICAKICAgICAgICAKICAgICAgICAvLyBSw6ljdXDDqXJhdGlvbiBkZXMgcG9pbnRhZ2VzIGRlIGwnZW1wbG95w6kgZGVwdWlzIGxhIEJERAogICAgICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUIFBvaW50YWdlSUQsIFVOSVhfVElNRVNUQU1QKERhdGVIZXVyZUVudHJlZSkgQVMgRW50cmVlVGltZXN0YW1wLCBVTklYX1RJTUVTVEFNUChEYXRlSGV1cmVTb3J0aWUpIEFTIFNvcnRpZVRpbWVzdGFtcCBGUk9NIHpfcHRnX2FxcF9wb2ludGFnZXMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCBBTkQgTU9OVEgoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50TW9udGggQU5EIFlFQVIoRGF0ZUhldXJlRW50cmVlKSA9IDpjdXJyZW50WWVhciIpOwogICAgICAgICRzdG10LT5leGVjdXRlKFsnOnVzZXJJRCcgPT4gJGVtcGxveWVJZCwgJzpjdXJyZW50TW9udGgnID0+ICRjdXJyZW50X21vbnRoLCAnOmN1cnJlbnRZZWFyJyA9PiAkY3VycmVudF95ZWFyXSk7CiAgICAgICAgJHBvaW50YWdlcyA9ICRzdG10LT5mZXRjaEFsbChQRE86OkZFVENIX0FTU09DKTsKICAgICAgICAKICAgICAgICBmb3JlYWNoICgkcG9pbnRhZ2VzIGFzICRwb2ludGFnZSkgewogICAgICAgICAgICAvLyBDcsOpYXRpb24gZGUgbCdvYmpldCBEYXRlVGltZSBwb3VyIGwnaGV1cmUgZCdhcnJpdsOpZQogICAgICAgICAgICAkYXJyaXZhbF90aW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1UnLCAkcG9pbnRhZ2VbJ0VudHJlZVRpbWVzdGFtcCddKTsKICAgICAgICAgICAgJGFycml2YWxfdGltZS0+c2V0VGltZXpvbmUobmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJykpOwogICAgICAgICAgICAkZGF0ZV9kaXNwbGF5ID0gJGFycml2YWxfdGltZS0+Zm9ybWF0KCdZLW0tZCcpOwogICAgICAgICAgICAkYXJyaXZhbF90aW1lX2Rpc3BsYXkgPSAkYXJyaXZhbF90aW1lLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gR8OpcmVyIGxlIGNhcyBvw7kgbGUgcG9pbnRhZ2UgZGUgc29ydGllIG4nZXN0IHBhcyBlbmNvcmUgZMOpZmluaQogICAgICAgICAgICBpZiAoZW1wdHkoJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSkpIHsKICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZV9kaXNwbGF5ID0gIkVuIGNvdXJzIjsKICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzX2Rpc3BsYXkgPSAiRW4gY291cnMiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gQ3LDqWF0aW9uIGRlIGwnb2JqZXQgRGF0ZVRpbWUgcG91ciBsJ2hldXJlIGRlIGTDqXBhcnQKICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZSA9IERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdVJywgJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSk7CiAgICAgICAgICAgICAgICAkZGVwYXJ0dXJlX3RpbWUtPnNldFRpbWV6b25lKG5ldyBEYXRlVGltZVpvbmUoJ0V1cm9wZS9QYXJpcycpKTsKICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZV9kaXNwbGF5ID0gJGRlcGFydHVyZV90aW1lLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBDYWxjdWwgZGVzIGhldXJlcyB0cmF2YWlsbMOpZXMKICAgICAgICAgICAgICAgICR3b3JrX3NlY29uZHMgPSAkcG9pbnRhZ2VbJ1NvcnRpZVRpbWVzdGFtcCddIC0gJHBvaW50YWdlWydFbnRyZWVUaW1lc3RhbXAnXTsKICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzID0gJHdvcmtfc2Vjb25kcyAvIDM2MDA7CiAgICAgICAgICAgICAgICAkd29ya19ob3Vyc19kaXNwbGF5ID0gbnVtYmVyX2Zvcm1hdCgkd29ya19ob3VycywgMik7CiAgICAgICAgICAgICAgICAkdG90YWxfaG91cnMgKz0gJHdvcmtfaG91cnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFqb3V0IGRlIGxhIGxpZ25lIGRhbnMgbGUgdGFibGVhdQogICAgICAgICAgICAkdGFibGVfcm93cyAuPSAiPHRyIGRhdGEtcG9pbnRhZ2UtaWQ9JyIuJHBvaW50YWdlWydQb2ludGFnZUlEJ10uIicgZGF0YS1lbnRyZWUtdGltZXN0YW1wPSciLiRwb2ludGFnZVsnRW50cmVlVGltZXN0YW1wJ10uIicgZGF0YS1zb3J0aWUtdGltZXN0YW1wPSciLiRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10uIicgb25jbGljaz0nYWZmaWNoZXJNb2RhbCh0aGlzKSc+PHRkPnskZGF0ZV9kaXNwbGF5fTwvdGQ+PHRkPnskYXJyaXZhbF90aW1lX2Rpc3BsYXl9PC90ZD48dGQ+eyRkZXBhcnR1cmVfdGltZV9kaXNwbGF5fTwvdGQ+PHRkPiR3b3JrX2hvdXJzX2Rpc3BsYXk8L3RkPjwvdHI+IjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgLy8gQWZmaWNoYWdlIGR1IHRhYmxlYXUgZGVzIHBvaW50YWdlcwogICAgICAgIGVjaG8gIjx0YWJsZT4iOwogICAgICAgIGVjaG8gIjx0cj48dGg+RGF0ZTwvdGg+PHRoPkhldXJlIGQnYXJyaXbDqWU8L3RoPjx0aD5IZXVyZSBkZSBkw6lwYXJ0PC90aD48dGg+Tm9tYnJlIGQnaGV1cmVzPC90aD48L3RyPiI7CiAgICAgICAgZWNobyAkdGFibGVfcm93czsKICAgICAgICBlY2hvICI8L3RhYmxlPiI7CiAgICAgICAgCiAgICAgICAgPz4KICAgICAgICAKICAgICAgICAKICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPgogICAgICAgIDw/cGhwCiAgICAgICAgLy8gQWZmaWNoYWdlIGR1IHRvdGFsIGQnaGV1cmVzIHRyYXZhaWxsw6llcwogICAgICAgIGVjaG8gIlRvdGFsIGQnaGV1cmVzIHRyYXZhaWxsw6llcyA6ICIgLiBudW1iZXJfZm9ybWF0KCR0b3RhbF9ob3VycywgMik7CiAgICAgICAgPz4KICAgICAgICA8L2ZvbnQ+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPGJyPjxicj48YnI+CiAgICAgICAgPGZvbnQgY29sb3I9IndoaXRlIj4KICAgICAgICA8aDQ+QWZmaWNoYWdlIHN1ciBkYXRlcyBzw6lsZWN0aW9ubsOpZXM8L2g0PgogICAgICAgIDwvZm9udD4KICAgICAgICAKICAgICAgICA8YnI+CiAgICAgICAgPGRpdiBjbGFzcz0iZDEiPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1hcCI+CiAgICAgICAgCiAgICAgICAgPGZvcm0gaWQ9ImNvbnRhY3QiIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+IERhdGUgZGUgZMOpYnV0IDogPC9mb250Pjxmb250IGNvbG9yPSJibGFjayI+PGlucHV0IHR5cGU9ImRhdGUiIG5hbWU9InN0YXJ0X2RhdGUiIHJlcXVpcmVkPjwvZm9udD48YnI+PGJyPgogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+RGF0ZSBkZSBmaW4gOiA8L2ZvbnQ+PGZvbnQgY29sb3I9ImJsYWNrIj48aW5wdXQgdHlwZT0iZGF0ZSIgbmFtZT0iZW5kX2RhdGUiIHJlcXVpcmVkPjwvZm9udD48YnI+PGJyPgogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJibGFjayI+PGlucHV0IGNsYXNzPSJidG4iIGlkPSJmb3JtLXN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQWZmaWNoZXIgbGEgc8OpbGVjdGlvbiI+PC9mb250PgogICAgICAgIAogICAgICAgIDwvZm9ybT4KICAgICAgICAKICAgICAgICA8L2Rpdj48L2Rpdj48YnI+PGJyPjxicj48YnI+PGJyPjxicj4KICAgICAgICAKICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDw/cGhwCiAgICAgICAgLy8gVsOpcmlmaWNhdGlvbiBkZSBsYSBzb3VtaXNzaW9uIGR1IGZvcm11bGFpcmUKICAgICAgICBpZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT0gJ1BPU1QnICYmIGlzc2V0KCRfR0VUWydlbXBsb3llJ10pKSB7CiAgICAgICAgICAgICRlbXBsb3llSWQgPSBpbnR2YWwoJF9HRVRbJ2VtcGxveWUnXSk7CiAgICAgICAgICAgICRzdGFydF9kYXRlID0gJF9QT1NUWydzdGFydF9kYXRlJ107CiAgICAgICAgICAgICRlbmRfZGF0ZSA9ICRfUE9TVFsnZW5kX2RhdGUnXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZGVzIGRhdGVzIGVuIGZvcm1hdCBZLW0tZAogICAgICAgICAgICAkc3RhcnRfZGF0ZV9mb3JtYXR0ZWQgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkc3RhcnRfZGF0ZSkpOwogICAgICAgICAgICAkZW5kX2RhdGVfZm9ybWF0dGVkID0gZGF0ZSgnWS1tLWQnLCBzdHJ0b3RpbWUoJGVuZF9kYXRlIC4gJyArMSBkYXknKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAkdG90YWxfaG91cnMgPSAwOwogICAgICAgICAgICAkdGFibGVfcm93cyA9ICIiOwogICAgICAgICAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFJlcXXDqnRlIHBvdXIgb2J0ZW5pciBsZXMgcG9pbnRhZ2VzIGVudHJlIGxlcyBkYXRlcyBzcMOpY2lmacOpZXMKICAgICAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgUG9pbnRhZ2VJRCwgVU5JWF9USU1FU1RBTVAoRGF0ZUhldXJlRW50cmVlKSBBUyBFbnRyZWVUaW1lc3RhbXAsIFVOSVhfVElNRVNUQU1QKERhdGVIZXVyZVNvcnRpZSkgQVMgU29ydGllVGltZXN0YW1wIEZST00gel9wdGdfYXFwX3BvaW50YWdlcyBXSEVSRSBVc2VySUQgPSA6dXNlcklEIEFORCBEYXRlSGV1cmVFbnRyZWUgQkVUV0VFTiA6c3RhcnREYXRlIEFORCA6ZW5kRGF0ZSIpOwogICAgICAgICAgICAKICAgICAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkLCAnOnN0YXJ0RGF0ZScgPT4gJHN0YXJ0X2RhdGVfZm9ybWF0dGVkLCAnOmVuZERhdGUnID0+ICRlbmRfZGF0ZV9mb3JtYXR0ZWRdKTsKICAgICAgICAgICAgJHBvaW50YWdlcyA9ICRzdG10LT5mZXRjaEFsbChQRE86OkZFVENIX0FTU09DKTsKICAgICAgICAgICAgaWYgKCEkc3RtdC0+ZXhlY3V0ZSgpKSB7CiAgICAgICAgICAgICAgICBwcmludF9yKCRzdG10LT5lcnJvckluZm8oKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcmVhY2ggKCRwb2ludGFnZXMgYXMgJHBvaW50YWdlKSB7CiAgICAgICAgICAgICAgICAvLyBDcsOpYXRpb24gZGUgbCdvYmpldCBEYXRlVGltZSBwb3VyIGwnaGV1cmUgZCdhcnJpdsOpZQogICAgICAgICAgICAgICAgJGFycml2YWxfdGltZSA9IERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdVJywgJHBvaW50YWdlWydFbnRyZWVUaW1lc3RhbXAnXSk7CiAgICAgICAgICAgICAgICAkYXJyaXZhbF90aW1lLT5zZXRUaW1lem9uZShuZXcgRGF0ZVRpbWVab25lKCdFdXJvcGUvUGFyaXMnKSk7CiAgICAgICAgICAgICAgICAkZGF0ZV9kaXNwbGF5ID0gJGFycml2YWxfdGltZS0+Zm9ybWF0KCdZLW0tZCcpOwogICAgICAgICAgICAgICAgJGFycml2YWxfdGltZV9kaXNwbGF5ID0gJGFycml2YWxfdGltZS0+Zm9ybWF0KCdIOmknKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gR8OpcmVyIGxlIGNhcyBvw7kgbGUgcG9pbnRhZ2UgZGUgc29ydGllIG4nZXN0IHBhcyBlbmNvcmUgZMOpZmluaQogICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lX2Rpc3BsYXkgPSAiRW4gY291cnMiOwogICAgICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzX2Rpc3BsYXkgPSAiRW4gY291cnMiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBDcsOpYXRpb24gZGUgbCdvYmpldCBEYXRlVGltZSBwb3VyIGwnaGV1cmUgZGUgZMOpcGFydAogICAgICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZSA9IERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdVJywgJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSk7CiAgICAgICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lLT5zZXRUaW1lem9uZShuZXcgRGF0ZVRpbWVab25lKCdFdXJvcGUvUGFyaXMnKSk7CiAgICAgICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lX2Rpc3BsYXkgPSAkZGVwYXJ0dXJlX3RpbWUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsIGRlcyBoZXVyZXMgdHJhdmFpbGzDqWVzCiAgICAgICAgICAgICAgICAgICAgJHdvcmtfc2Vjb25kcyA9ICRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10gLSAkcG9pbnRhZ2VbJ0VudHJlZVRpbWVzdGFtcCddOwogICAgICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzID0gJHdvcmtfc2Vjb25kcyAvIDM2MDA7CiAgICAgICAgICAgICAgICAgICAgJHdvcmtfaG91cnNfZGlzcGxheSA9IG51bWJlcl9mb3JtYXQoJHdvcmtfaG91cnMsIDIpOwogICAgICAgICAgICAgICAgICAgICR0b3RhbF9ob3VycyArPSAkd29ya19ob3VyczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gQWpvdXQgZGUgbGEgbGlnbmUgZGFucyBsZSB0YWJsZWF1CiAgICAgICAgICAgICAgICAkdGFibGVfcm93cyAuPSAiPHRyIGRhdGEtcG9pbnRhZ2UtaWQ9JyIuJHBvaW50YWdlWydQb2ludGFnZUlEJ10uIicgZGF0YS1lbnRyZWUtdGltZXN0YW1wPSciLiRwb2ludGFnZVsnRW50cmVlVGltZXN0YW1wJ10uIicgZGF0YS1zb3J0aWUtdGltZXN0YW1wPSciLiRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10uIicgb25jbGljaz0nYWZmaWNoZXJNb2RhbCh0aGlzKSc+PHRkPnskZGF0ZV9kaXNwbGF5fTwvdGQ+PHRkPnskYXJyaXZhbF90aW1lX2Rpc3BsYXl9PC90ZD48dGQ+eyRkZXBhcnR1cmVfdGltZV9kaXNwbGF5fTwvdGQ+PHRkPiR3b3JrX2hvdXJzX2Rpc3BsYXk8L3RkPjwvdHI+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgdGFibGVhdQogICAgICAgICAgICBlY2hvICI8dGFibGU+PHRyPjx0aD5EYXRlPC90aD48dGg+SGV1cmUgZCdhcnJpdsOpZTwvdGg+PHRoPkhldXJlIGRlIGTDqXBhcnQ8L3RoPjx0aD5Ob21icmUgZCdoZXVyZXM8L3RoPjwvdHI+JHRhYmxlX3Jvd3M8L3RhYmxlPiI7CiAgICAgICAgICAgIGVjaG8gIlRvdGFsIGQnaGV1cmVzIHRyYXZhaWxsw6llcyA6ICIgLiBudW1iZXJfZm9ybWF0KCR0b3RhbF9ob3VycywgMik7CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgPz4KICAgICAgICAKICAgICAgICAKICAgICAgICA8YnI+PGJyPjxicj4KICAgICAgICAKICAgICAgICA8cD48YSBocmVmPSIjIiBvbmNsaWNrPSJwcm9tcHRFeGl0UGluKCkiPlNvcnRpciBFbXBsb3nDqTwvYT48L3A+CiAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPC9kaXY+PC9kaXY+CiAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPCEtLSBNb2RhbCBQSU4gKGRlc2lnbiByZWZhaXQpIC0tPgogICAgICAgIDxkaXYgaWQ9Im1vZGFsQmFja2dyb3VuZCIgb25jbGljaz0iY2xvc2VQaW5Nb2RhbCgpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CiAgICAgICAgPGRpdiBpZD0icGluTW9kYWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJwaW5Nb2RhbFRpdGxlIj4KICAgICAgICAgIDxmb3JtIGlkPSJwaW5Gb3JtIiBvbnN1Ym1pdD0idmVyaWZpZXJQaW4oKTsgcmV0dXJuIGZhbHNlOyI+CiAgICAgICAgICAgIDxoMiBpZD0icGluTW9kYWxUaXRsZSIgY2xhc3M9InBpbi1tb2RhbC10aXRsZSI+Q29kZSBQSU48L2gyPgogICAgICAgICAgICA8cCBjbGFzcz0icGluLW1vZGFsLXN1YnRpdGxlIj5TYWlzaXNzZXogdm90cmUgY29kZSDDoCA0IGNoaWZmcmVzPC9wPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWlucHV0LXdyYXBwZXIiIG9uY2xpY2s9ImZvY3VzUGluSW5wdXQoKSI+CiAgICAgICAgICAgICAgPGxhYmVsIGZvcj0icGluSW5wdXQiIGNsYXNzPSJzci1vbmx5Ij5Db2RlIFBJTiAoNCBjaGlmZnJlcyk8L2xhYmVsPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3hlcyIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjAiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjEiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjMiPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGVsIgogICAgICAgICAgICAgICAgaWQ9InBpbklucHV0IgogICAgICAgICAgICAgICAgY2xhc3M9InBpbi1oaWRkZW4taW5wdXQiCiAgICAgICAgICAgICAgICBpbnB1dG1vZGU9Im51bWVyaWMiCiAgICAgICAgICAgICAgICBwYXR0ZXJuPSJbMC05XSoiCiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9IjQiCiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9Im9mZiIKICAgICAgICAgICAgICAgIGF1dG9jYXBpdGFsaXplPSJvZmYiCiAgICAgICAgICAgICAgICBhdXRvY29ycmVjdD0ib2ZmIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiCiAgICAgICAgICAgICAgICB0aXRsZT0iU2V1bGVtZW50IGRlcyBjaGlmZnJlcy4iCiAgICAgICAgICAgICAgICB2YWx1ZT0iIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tbW9kYWwtYWN0aW9ucyI+CiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJwaW4tbW9kYWwtYnRuIGNhbmNlbCIgb25jbGljaz0iY2xvc2VQaW5Nb2RhbCgpIj5Bbm51bGVyPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJwaW4tbW9kYWwtYnRuIGNvbmZpcm0iPlZhbGlkZXI8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMy41LjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgPHNjcmlwdCBzcmM9ImpzL3ZlbmRvci9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0ianMvcGx1Z2lucy5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgPHNjcmlwdCBzcmM9ImpzL21haW4uanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAoKCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKICAgICAgICB2YXIgZW1wbG95ZWVGaXJzdE5hbWUgPSA8P3BocCBlY2hvIGpzb25fZW5jb2RlKCgkZW1wbG95ZSAmJiBpc3NldCgkZW1wbG95ZVsnUHJlbm9tJ10pKSA/IChzdHJpbmcpJGVtcGxveWVbJ1ByZW5vbSddIDogJycsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX0hFWF9UQUcgfCBKU09OX0hFWF9BTVAgfCBKU09OX0hFWF9BUE9TIHwgSlNPTl9IRVhfUVVPVCk7ID8+OwogICAgICAgIGZ1bmN0aW9uIGJ1aWxkUHVuY2hUb2FzdChhY3Rpb24pIHsgdmFyIHAgPSBlbXBsb3llZUZpcnN0TmFtZSA/ICgiICIgKyBlbXBsb3llZUZpcnN0TmFtZSkgOiAiIjsgcmV0dXJuIChhY3Rpb24gPT09ICJkZXBhcnQiKSA/ICgiRMOpcGFydCIgKyBwICsgIiBlbnJlZ2lzdHLDqSIpIDogKCJBcnJpdsOpZSIgKyBwICsgIiBlbnJlZ2lzdHLDqWUiKTsgfQoKICAgICAgICAkKCIjYXJyaXZhbEJ1dHRvbiIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBsZXQgZW1wbG95ZSA9ICQodGhpcykuZGF0YSgnZW1wbG95ZScpOwogICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgICAgICAgICAgdXJsOiAiZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAiLAogICAgICAgICAgICAgICAgZGF0YToge2VtcGxveWU6IGVtcGxveWV9LAogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gYnVpbGRQdW5jaFRvYXN0KCJhcnJpdmVlIik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiaW5kZXgucGhwP3RvYXN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICImdG9hc3RUeXBlPXN1Y2Nlc3MiOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIiwgImVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgJCgiI2RlcGFydHVyZUJ1dHRvbiIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBsZXQgZW1wbG95ZSA9ICQodGhpcykuZGF0YSgnZW1wbG95ZScpOwogICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgICAgICAgICAgdXJsOiAiZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7ZW1wbG95ZTogZW1wbG95ZX0sCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBtc2cgPSBidWlsZFB1bmNoVG9hc3QoImRlcGFydCIpOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiRXJyZXVyIGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBwb2ludGFnZS4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIAogICAgICAgIHZhciBhY3Rpb25Db250ZXh0ID0gIiI7IC8vIFZhcmlhYmxlIGdsb2JhbGUgcG91ciBzdG9ja2VyIGxlIGNvbnRleHRlIGRlIGwnYWN0aW9uCgpmdW5jdGlvbiBzYW5pdGl6ZVBpblZhbHVlKHZhbCkgewogIHJldHVybiBTdHJpbmcodmFsIHx8ICcnKS5yZXBsYWNlKC9cRC9nLCAnJykuc2xpY2UoMCwgNCk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVBpbkJveGVzKHBpbikgewogIHZhciBib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNwaW5Nb2RhbCAucGluLWJveCcpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgYm94ZXMubGVuZ3RoOyBpKyspIHsKICAgIGJveGVzW2ldLnRleHRDb250ZW50ID0gKGkgPCBwaW4ubGVuZ3RoKSA/ICfimIUnIDogJyc7CiAgfQp9CgpmdW5jdGlvbiBmb2N1c1BpbklucHV0KCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQpIHJldHVybjsKICB0cnkgeyBpbnB1dC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQp9CgpmdW5jdGlvbiByZXNldFBpbk1vZGFsKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJzsKICB1cGRhdGVQaW5Cb3hlcygnJyk7Cn0KCmZ1bmN0aW9uIG9wZW5QaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKCFtb2RhbCB8fCAhYmcpIHJldHVybjsKICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBiZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICByZXNldFBpbk1vZGFsKCk7CiAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZvY3VzUGluSW5wdXQoKTsgfSwgMTApOwp9CgpmdW5jdGlvbiBjbG9zZVBpbk1vZGFsKCkgewogIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpOwogIHZhciBiZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJhY2tncm91bmQnKTsKICBpZiAobW9kYWwpIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgaWYgKGJnKSBiZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHJlc2V0UGluTW9kYWwoKTsKfQoKLy8gQmluZCBpbnB1dCBvbmNlIChkaWdpdHMgb25seSArIHN5bmMgVUkgYm94ZXMpCihmdW5jdGlvbiBiaW5kUGluT25jZSgpIHsKICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICBpZiAoIWlucHV0IHx8IGlucHV0LmdldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcpID09PSAnMScpIHJldHVybjsKICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnLCAnMScpOwogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICB2YXIgY2xlYW4gPSBzYW5pdGl6ZVBpblZhbHVlKGlucHV0LnZhbHVlKTsKICAgIGlmIChpbnB1dC52YWx1ZSAhPT0gY2xlYW4pIGlucHV0LnZhbHVlID0gY2xlYW47CiAgICB1cGRhdGVQaW5Cb3hlcyhjbGVhbik7CiAgfSk7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgIHZhciBrZXkgPSBlLmtleSB8fCAnJzsKICAgIGlmIChrZXkgPT09ICdFc2NhcGUnKSB7CiAgICAgIGNsb3NlUGluTW9kYWwoKTsKICAgIH0KICB9KTsKfSkoKTsKCmZ1bmN0aW9uIGFmZmljaGVyTW9kYWwoZWxlbWVudCkgewogICAgdmFyIHBvaW50YWdlSWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wb2ludGFnZS1pZCcpOwogICAgd2luZG93LnBvaW50YWdlSWRQb3VyTW9kaWZpY2F0aW9uID0gcG9pbnRhZ2VJZDsKICAgIGFjdGlvbkNvbnRleHQgPSAibW9kaWZpY2F0aW9uUG9pbnRhZ2UiOyAvLyBEw6lmaW5pciBsZSBjb250ZXh0ZSBwb3VyIGxhIG1vZGlmaWNhdGlvbiBkZSBwb2ludGFnZQogICAgb3BlblBpbk1vZGFsKCk7Cn0KCmZ1bmN0aW9uIHZlcmlmaWVyUGluKCkgewogICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgICB2YXIgcGluID0gc2FuaXRpemVQaW5WYWx1ZShpbnB1dCA/IGlucHV0LnZhbHVlIDogJycpOwogICAgaWYgKGlucHV0ICYmIGlucHV0LnZhbHVlICE9PSBwaW4pIGlucHV0LnZhbHVlID0gcGluOwogICAgdXBkYXRlUGluQm94ZXMocGluKTsKCiAgICBpZiAocGluLmxlbmd0aCAhPT0gNCkgewogICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiRW50cmV6IHVuIGNvZGUgUElOIMOgIDQgY2hpZmZyZXMuIiwgImVycm9yIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFsZXJ0KCJFbnRyZXogdW4gY29kZSBQSU4gw6AgNCBjaGlmZnJlcy4iKTsKICAgICAgICB9CiAgICAgICAgdHJ5IHsgZm9jdXNQaW5JbnB1dCgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChwaW4pIHsKICAgICAgICAvLyBFbnZvaSBkdSBjb2RlIFBJTiDDoCB1biBzY3JpcHQgUEhQIHBvdXIgdsOpcmlmaWNhdGlvbgogICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLnN0YXR1cyA9PSAyMDApIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlVGV4dCA9PSAiT0siKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRXjDqWN1dGVyIGwnYWN0aW9uIGVuIGZvbmN0aW9uIGR1IGNvbnRleHRlCiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkNvbnRleHQgPT09ICJtb2RpZmljYXRpb25Qb2ludGFnZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAibW9kaWZfcG9pbnRhZ2UucGhwP3BvaW50YWdlSWQ9IiArIHdpbmRvdy5wb2ludGFnZUlkUG91ck1vZGlmaWNhdGlvbjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbkNvbnRleHQgPT09ICJzb3J0aWVFbXBsb3llIikgewogICAgICAgICAgICAgICAgICAgICAgICBzb3J0aXJFbXBsb3llKHdpbmRvdy5wb2ludGFnZUlkUG91clNvcnRpZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkNvZGUgUElOIGluY29ycmVjdC4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkNvZGUgUElOIGluY29ycmVjdC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmVzZXRQaW5Nb2RhbCgpOwogICAgICAgICAgICAgICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAidmVyaWZpZXJfcGluLnBocCIsIHRydWUpOwogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgeGhyLnNlbmQoInBpbj0iICsgcGluKTsKICAgIH0KfQoKZnVuY3Rpb24gcHJvbXB0RXhpdFBpbigpIHsKICAgIHdpbmRvdy5wb2ludGFnZUlkUG91clNvcnRpZSA9IDw/cGhwIGVjaG8gJGVtcGxveWVJZDsgPz47CiAgICBhY3Rpb25Db250ZXh0ID0gInNvcnRpZUVtcGxveWUiOyAvLyBEw6lmaW5pciBsZSBjb250ZXh0ZSBwb3VyIGxhIHNvcnRpZSBkZSBsJ2VtcGxvecOpCiAgICBvcGVuUGluTW9kYWwoKTsKfQoKZnVuY3Rpb24gc29ydGlyRW1wbG95ZShlbXBsb3llSWQpIHsKICAgICQuYWpheCh7CiAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgIHVybDogInNvcnRpcl9lbXBsb3llLnBocCIsIC8vIFNjcmlwdCBQSFAgcG91ciBzb3J0aXIgbCdlbXBsb3nDqQogICAgICAgIGRhdGE6IHtlbXBsb3llOiBlbXBsb3llSWR9LAogICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIHZhciBtc2cgPSAiU3RhdHV0IGRlIGwnZW1wbG95w6kgbWlzIMOgIGpvdXIuIjsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiaW5kZXgucGhwP3RvYXN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICImdG9hc3RUeXBlPXN1Y2Nlc3MiOwogICAgICAgIH0sCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXIgZHUgc3RhdHV0IGVtcGxvecOpLiIsICJlcnJvciIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXIgZHUgc3RhdHV0IGVtcGxvecOpLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cn0KCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDwvYm9keT4KICAgICAgICAgICAgCiAgICAgICAgICAgIDwvaHRtbD4="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 21002,
                "sha1": "fb4cc13eb2c401f4ccf913d3c8e7888be6b2e42e",
                "content_b64": "PD9waHAKCi8qIGRvYy1wcm9qZWN0IHwgcG9pbnRhZ2VzL3BvaW50YWdlLnBocCB8IEFmZmljaGUsIHPDqWN1cmlzZSBldCBwaWxvdGUgbOKAmWludGVyZmFjZSBkZSBwb2ludGFnZSBhdmVjIGF1dG9yaXNhdGlvbiBwZXJtYW5lbnRlIHBhciBhcHBhcmVpbC4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBjb25uZXhpb24ucGhwLCBlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCwgZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCwgc29ydGlyX2VtcGxveWUucGhwLCBtb2RpZl9wb2ludGFnZS5waHAgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgY29va2llIGTigJlhcHBhcmVpbCwgcmVkaXJlY3Rpb25zLCBhZmZpY2hhZ2UgVUksIEFKQVgsIHBvaW50YWdlcyBlbiBiYXNlIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoVXNlcklELCBOb20sIFByZW5vbSksIHpfcHRnX2FxcF9wb2ludGFnZXMoUG9pbnRhZ2VJRCwgVXNlcklELCBEYXRlSGV1cmVFbnRyZWUsIERhdGVIZXVyZVNvcnRpZSkgKi8KCgovLyBEw6ltYXJyYWdlIG91IHJlcHJpc2UgZGUgbGEgc2Vzc2lvbgpzZXNzaW9uX3N0YXJ0KCk7CnJlcXVpcmVfb25jZSAiY29uZmlnLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAiOwpyZXF1aXJlX2RldmljZV9hdXRob3JpemVkKCRwZG8pOwoKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnRXVyb3BlL1BhcmlzJyk7CgovLyBSw6ljdXDDqXJhdGlvbiBkZSBsJ0lEIGRlIGwnZW1wbG95w6kKJGVtcGxveWVJZCA9IGlzc2V0KCRfR0VUWydlbXBsb3llJ10pID8gaW50dmFsKCRfR0VUWydlbXBsb3llJ10pIDogbnVsbDsKJHZpZXdPbmx5ID0gKGlzc2V0KCRfR0VUWyd2aWV3J10pICYmICRfR0VUWyd2aWV3J10gPT09ICcxJyk7CgovLyBSw6ljdXDDqXJhdGlvbiBkZXMgaW5mb3JtYXRpb25zIGRlIGwnZW1wbG95w6kgZGVwdWlzIGxhIEJERAokc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBOb20sIFByZW5vbSBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCIpOwokc3RtdC0+ZXhlY3V0ZShbJzp1c2VySUQnID0+ICRlbXBsb3llSWRdKTsKJGVtcGxveWUgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CgovLyBSw6ljdXDDqXJhdGlvbiBkdSBkZXJuaWVyIHBvaW50YWdlIGRlIGwnZW1wbG95w6kKJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgKiBGUk9NIHpfcHRnX2FxcF9wb2ludGFnZXMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCBPUkRFUiBCWSBEYXRlSGV1cmVFbnRyZWUgREVTQywgUG9pbnRhZ2VJRCBERVNDIExJTUlUIDEiKTsKJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkXSk7CiRsYXN0UG9pbnRhZ2UgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CgokaXNXb3JraW5nID0gJGxhc3RQb2ludGFnZSAmJiAkbGFzdFBvaW50YWdlWydEYXRlSGV1cmVTb3J0aWUnXSA9PT0gbnVsbDsKCj8+CjwhRE9DVFlQRSBodG1sPgoKPGh0bWw+Cgo8aGVhZD4KCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgoKPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KCgoKCgo8dGl0bGU+UG9pbnRhZ2VzIHNhbGFyacOpczwvdGl0bGU+Cgo8IS0tCgoKClRlbXBsYXRlIDIwODkgTWV0ZW9yCgoKCmh0dHA6Ly93d3cudG9vcGxhdGUuY29tL3ZpZXcvMjA4OS1tZXRlb3IKCgoKLS0+Cgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImFwcGxlLXRvdWNoLWljb24ucG5nIj4KCgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYm9vdHN0cmFwLm1pbi5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvZm9udEF3ZXNvbWUuY3NzIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2ZvbnRBd2Vzb21lLmNzcyI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2hlcm8tc2xpZGVyLmNzcyI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcyI+Cjw/cGhwCiRjc3NQYXRoID0gX19ESVJfXyAuICcvY3NzL3N0eWxlLmNzcyc7CiRjc3NWZXJzaW9uID0gZmlsZV9leGlzdHMoJGNzc1BhdGgpID8gZmlsZW10aW1lKCRjc3NQYXRoKSA6IHRpbWUoKTsKPz4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9PD9waHAgZWNobyAoaW50KSRjc3NWZXJzaW9uOyA/PiI+CgoKCjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1PcGVuK1NhbnM6MzAwLDQwMCw2MDAsNzAwLDgwMCIgcmVsPSJzdHlsZXNoZWV0Ij4KCgoKPHNjcmlwdCBzcmM9ImpzL3ZlbmRvci9tb2Rlcm5penItMi44LjMtcmVzcG9uZC0xLjQuMi5taW4uanMiPjwvc2NyaXB0PgoKPC9oZWFkPgoKCgo8Ym9keSBjbGFzcz0icGFnZS1wb2ludGFnZSB0aGVtZS1kYXJrIj4KCgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0icGFnZS1zZWN0aW9uIj4KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KPGRpdiBjbGFzcz0icm93Ij4KPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KPGgxPlBvaW50YWdlcyA8P3BocCBlY2hvICRlbXBsb3llWydOb20nXSAuICIgIiAuICRlbXBsb3llWydQcmVub20nXTsgPz48L2gxPgo8ZGl2IGNsYXNzPSJsaW5lLWRlYyI+PC9kaXY+CjxjZW50ZXI+Cjxmb250IGNvbG9yPSJ3aGl0ZSI+Cjxicj4KPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJiYWNrSG9tZUJ1dHRvbiIgY2xhc3M9ImJ0biIgb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9J2luZGV4LnBocCc7Ij5SZXRvdXIgYWNjdWVpbDwvYnV0dG9uPgo8YnI+Cjw/cGhwIGlmICghJHZpZXdPbmx5KTogPz4KICAgIDw/cGhwIGlmICghJGlzV29ya2luZyk6ID8+CiAgICAgICAgPGZvcm0gaWQ9ImNvbnRhY3QiPgogICAgICAgIDxidXR0b24gZGF0YS1lbXBsb3llPSI8P3BocCBlY2hvICRlbXBsb3llSWQ7ID8+IiBpZD0iYXJyaXZhbEJ1dHRvbiIgY2xhc3M9ImJ0biI+QXJyaXbDqWU8L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CiAgICA8P3BocCBlbHNlOiA/PgogICAgICAgIDxmb3JtIGlkPSJjb250YWN0MiI+CiAgICAgICAgPGJ1dHRvbiBkYXRhLWVtcGxveWU9Ijw/cGhwIGVjaG8gJGVtcGxveWVJZDsgPz4iIGlkPSJkZXBhcnR1cmVCdXR0b24iIGNsYXNzPSJidG4iPkTDqXBhcnQ8L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CiAgICA8P3BocCBlbmRpZjsgPz4KPD9waHAgZW5kaWY7ID8+CiAgICAgICAgPCEtLSBBdXRyZSBjb250ZW51Li4uIC0tPgogICAgICAgIDwvZm9udD4KICAgICAgICA8L2NlbnRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICAKICAgICAgICA8YnI+PGJyPiAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWRlYyI+PC9kaXY+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICA8Y2VudGVyPgogICAgICAgIDw/cGhwCiAgICAgICAgLy8gUsOpY3Vww6lyYXRpb24gZGUgbCdJRCBkZSBsJ2VtcGxvecOpCiAgICAgICAgJGVtcGxveWVJZCA9IGlzc2V0KCRfR0VUWydlbXBsb3llJ10pID8gaW50dmFsKCRfR0VUWydlbXBsb3llJ10pIDogbnVsbDsKICAgICAgICAKICAgICAgICAvLyBJbml0aWFsaXNhdGlvbiBkZXMgdmFyaWFibGVzIHBvdXIgbGUgdGFibGVhdQogICAgICAgICR0b3RhbF9ob3VycyA9IDA7CiAgICAgICAgJHRhYmxlX3Jvd3MgPSAiIjsKICAgICAgICAKICAgICAgICAkY3VycmVudF9tb250aCA9IGRhdGUoJ20nKTsKICAgICAgICAkY3VycmVudF95ZWFyID0gZGF0ZSgnWScpOwogICAgICAgIGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwogICAgICAgIAogICAgICAgIAogICAgICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlcyBwb2ludGFnZXMgZGUgbCdlbXBsb3nDqSBkZXB1aXMgbGEgQkRECiAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgUG9pbnRhZ2VJRCwgVU5JWF9USU1FU1RBTVAoRGF0ZUhldXJlRW50cmVlKSBBUyBFbnRyZWVUaW1lc3RhbXAsIFVOSVhfVElNRVNUQU1QKERhdGVIZXVyZVNvcnRpZSkgQVMgU29ydGllVGltZXN0YW1wIEZST00gel9wdGdfYXFwX3BvaW50YWdlcyBXSEVSRSBVc2VySUQgPSA6dXNlcklEIEFORCBNT05USChEYXRlSGV1cmVFbnRyZWUpID0gOmN1cnJlbnRNb250aCBBTkQgWUVBUihEYXRlSGV1cmVFbnRyZWUpID0gOmN1cnJlbnRZZWFyIik7CiAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkLCAnOmN1cnJlbnRNb250aCcgPT4gJGN1cnJlbnRfbW9udGgsICc6Y3VycmVudFllYXInID0+ICRjdXJyZW50X3llYXJdKTsKICAgICAgICAkcG9pbnRhZ2VzID0gJHN0bXQtPmZldGNoQWxsKFBETzo6RkVUQ0hfQVNTT0MpOwogICAgICAgIAogICAgICAgIGZvcmVhY2ggKCRwb2ludGFnZXMgYXMgJHBvaW50YWdlKSB7CiAgICAgICAgICAgIC8vIENyw6lhdGlvbiBkZSBsJ29iamV0IERhdGVUaW1lIHBvdXIgbCdoZXVyZSBkJ2Fycml2w6llCiAgICAgICAgICAgICRhcnJpdmFsX3RpbWUgPSBEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnVScsICRwb2ludGFnZVsnRW50cmVlVGltZXN0YW1wJ10pOwogICAgICAgICAgICAkYXJyaXZhbF90aW1lLT5zZXRUaW1lem9uZShuZXcgRGF0ZVRpbWVab25lKCdFdXJvcGUvUGFyaXMnKSk7CiAgICAgICAgICAgICRkYXRlX2Rpc3BsYXkgPSAkYXJyaXZhbF90aW1lLT5mb3JtYXQoJ1ktbS1kJyk7CiAgICAgICAgICAgICRhcnJpdmFsX3RpbWVfZGlzcGxheSA9ICRhcnJpdmFsX3RpbWUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBHw6lyZXIgbGUgY2FzIG/DuSBsZSBwb2ludGFnZSBkZSBzb3J0aWUgbidlc3QgcGFzIGVuY29yZSBkw6lmaW5pCiAgICAgICAgICAgIGlmIChlbXB0eSgkcG9pbnRhZ2VbJ1NvcnRpZVRpbWVzdGFtcCddKSkgewogICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lX2Rpc3BsYXkgPSAiRW4gY291cnMiOwogICAgICAgICAgICAgICAgJHdvcmtfaG91cnNfZGlzcGxheSA9ICJFbiBjb3VycyI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBDcsOpYXRpb24gZGUgbCdvYmpldCBEYXRlVGltZSBwb3VyIGwnaGV1cmUgZGUgZMOpcGFydAogICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1UnLCAkcG9pbnRhZ2VbJ1NvcnRpZVRpbWVzdGFtcCddKTsKICAgICAgICAgICAgICAgICRkZXBhcnR1cmVfdGltZS0+c2V0VGltZXpvbmUobmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJykpOwogICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lX2Rpc3BsYXkgPSAkZGVwYXJ0dXJlX3RpbWUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIENhbGN1bCBkZXMgaGV1cmVzIHRyYXZhaWxsw6llcwogICAgICAgICAgICAgICAgJHdvcmtfc2Vjb25kcyA9ICRwb2ludGFnZVsnU29ydGllVGltZXN0YW1wJ10gLSAkcG9pbnRhZ2VbJ0VudHJlZVRpbWVzdGFtcCddOwogICAgICAgICAgICAgICAgJHdvcmtfaG91cnMgPSAkd29ya19zZWNvbmRzIC8gMzYwMDsKICAgICAgICAgICAgICAgICR3b3JrX2hvdXJzX2Rpc3BsYXkgPSBudW1iZXJfZm9ybWF0KCR3b3JrX2hvdXJzLCAyKTsKICAgICAgICAgICAgICAgICR0b3RhbF9ob3VycyArPSAkd29ya19ob3VyczsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQWpvdXQgZGUgbGEgbGlnbmUgZGFucyBsZSB0YWJsZWF1CiAgICAgICAgICAgICR0YWJsZV9yb3dzIC49ICI8dHIgZGF0YS1wb2ludGFnZS1pZD0nIi4kcG9pbnRhZ2VbJ1BvaW50YWdlSUQnXS4iJyBkYXRhLWVudHJlZS10aW1lc3RhbXA9JyIuJHBvaW50YWdlWydFbnRyZWVUaW1lc3RhbXAnXS4iJyBkYXRhLXNvcnRpZS10aW1lc3RhbXA9JyIuJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXS4iJyBvbmNsaWNrPSdhZmZpY2hlck1vZGFsKHRoaXMpJz48dGQ+eyRkYXRlX2Rpc3BsYXl9PC90ZD48dGQ+eyRhcnJpdmFsX3RpbWVfZGlzcGxheX08L3RkPjx0ZD57JGRlcGFydHVyZV90aW1lX2Rpc3BsYXl9PC90ZD48dGQ+JHdvcmtfaG91cnNfZGlzcGxheTwvdGQ+PC90cj4iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgdGFibGVhdSBkZXMgcG9pbnRhZ2VzCiAgICAgICAgZWNobyAiPHRhYmxlPiI7CiAgICAgICAgZWNobyAiPHRyPjx0aD5EYXRlPC90aD48dGg+SGV1cmUgZCdhcnJpdsOpZTwvdGg+PHRoPkhldXJlIGRlIGTDqXBhcnQ8L3RoPjx0aD5Ob21icmUgZCdoZXVyZXM8L3RoPjwvdHI+IjsKICAgICAgICBlY2hvICR0YWJsZV9yb3dzOwogICAgICAgIGVjaG8gIjwvdGFibGU+IjsKICAgICAgICAKICAgICAgICA/PgogICAgICAgIAogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+CiAgICAgICAgPD9waHAKICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgdG90YWwgZCdoZXVyZXMgdHJhdmFpbGzDqWVzCiAgICAgICAgZWNobyAiVG90YWwgZCdoZXVyZXMgdHJhdmFpbGzDqWVzIDogIiAuIG51bWJlcl9mb3JtYXQoJHRvdGFsX2hvdXJzLCAyKTsKICAgICAgICA/PgogICAgICAgIDwvZm9udD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8YnI+PGJyPjxicj4KICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPgogICAgICAgIDxoND5BZmZpY2hhZ2Ugc3VyIGRhdGVzIHPDqWxlY3Rpb25uw6llczwvaDQ+CiAgICAgICAgPC9mb250PgogICAgICAgIAogICAgICAgIDxicj4KICAgICAgICA8ZGl2IGNsYXNzPSJkMSI+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibWFwIj4KICAgICAgICAKICAgICAgICA8Zm9ybSBpZD0iY29udGFjdCIgbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CiAgICAgICAgCiAgICAgICAgPGZvbnQgY29sb3I9IndoaXRlIj4gRGF0ZSBkZSBkw6lidXQgOiA8L2ZvbnQ+PGZvbnQgY29sb3I9ImJsYWNrIj48aW5wdXQgdHlwZT0iZGF0ZSIgbmFtZT0ic3RhcnRfZGF0ZSIgcmVxdWlyZWQ+PC9mb250Pjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGZvbnQgY29sb3I9IndoaXRlIj5EYXRlIGRlIGZpbiA6IDwvZm9udD48Zm9udCBjb2xvcj0iYmxhY2siPjxpbnB1dCB0eXBlPSJkYXRlIiBuYW1lPSJlbmRfZGF0ZSIgcmVxdWlyZWQ+PC9mb250Pjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGZvbnQgY29sb3I9ImJsYWNrIj48aW5wdXQgY2xhc3M9ImJ0biIgaWQ9ImZvcm0tc3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJBZmZpY2hlciBsYSBzw6lsZWN0aW9uIj48L2ZvbnQ+CiAgICAgICAgCiAgICAgICAgPC9mb3JtPgogICAgICAgIAogICAgICAgIDwvZGl2PjwvZGl2Pjxicj48YnI+PGJyPjxicj48YnI+PGJyPgogICAgICAgIAogICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPD9waHAKICAgICAgICAvLyBWw6lyaWZpY2F0aW9uIGRlIGxhIHNvdW1pc3Npb24gZHUgZm9ybXVsYWlyZQogICAgICAgIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAnUE9TVCcgJiYgaXNzZXQoJF9HRVRbJ2VtcGxveWUnXSkpIHsKICAgICAgICAgICAgJGVtcGxveWVJZCA9IGludHZhbCgkX0dFVFsnZW1wbG95ZSddKTsKICAgICAgICAgICAgJHN0YXJ0X2RhdGUgPSAkX1BPU1RbJ3N0YXJ0X2RhdGUnXTsKICAgICAgICAgICAgJGVuZF9kYXRlID0gJF9QT1NUWydlbmRfZGF0ZSddOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ29udmVyc2lvbiBkZXMgZGF0ZXMgZW4gZm9ybWF0IFktbS1kCiAgICAgICAgICAgICRzdGFydF9kYXRlX2Zvcm1hdHRlZCA9IGRhdGUoJ1ktbS1kJywgc3RydG90aW1lKCRzdGFydF9kYXRlKSk7CiAgICAgICAgICAgICRlbmRfZGF0ZV9mb3JtYXR0ZWQgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkZW5kX2RhdGUgLiAnICsxIGRheScpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgICR0b3RhbF9ob3VycyA9IDA7CiAgICAgICAgICAgICR0YWJsZV9yb3dzID0gIiI7CiAgICAgICAgICAgIGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gUmVxdcOqdGUgcG91ciBvYnRlbmlyIGxlcyBwb2ludGFnZXMgZW50cmUgbGVzIGRhdGVzIHNww6ljaWZpw6llcwogICAgICAgICAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBQb2ludGFnZUlELCBVTklYX1RJTUVTVEFNUChEYXRlSGV1cmVFbnRyZWUpIEFTIEVudHJlZVRpbWVzdGFtcCwgVU5JWF9USU1FU1RBTVAoRGF0ZUhldXJlU29ydGllKSBBUyBTb3J0aWVUaW1lc3RhbXAgRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQgQU5EIERhdGVIZXVyZUVudHJlZSBCRVRXRUVOIDpzdGFydERhdGUgQU5EIDplbmREYXRlIik7CiAgICAgICAgICAgIAogICAgICAgICAgICAkc3RtdC0+ZXhlY3V0ZShbJzp1c2VySUQnID0+ICRlbXBsb3llSWQsICc6c3RhcnREYXRlJyA9PiAkc3RhcnRfZGF0ZV9mb3JtYXR0ZWQsICc6ZW5kRGF0ZScgPT4gJGVuZF9kYXRlX2Zvcm1hdHRlZF0pOwogICAgICAgICAgICAkcG9pbnRhZ2VzID0gJHN0bXQtPmZldGNoQWxsKFBETzo6RkVUQ0hfQVNTT0MpOwogICAgICAgICAgICBpZiAoISRzdG10LT5leGVjdXRlKCkpIHsKICAgICAgICAgICAgICAgIHByaW50X3IoJHN0bXQtPmVycm9ySW5mbygpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgZm9yZWFjaCAoJHBvaW50YWdlcyBhcyAkcG9pbnRhZ2UpIHsKICAgICAgICAgICAgICAgIC8vIENyw6lhdGlvbiBkZSBsJ29iamV0IERhdGVUaW1lIHBvdXIgbCdoZXVyZSBkJ2Fycml2w6llCiAgICAgICAgICAgICAgICAkYXJyaXZhbF90aW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1UnLCAkcG9pbnRhZ2VbJ0VudHJlZVRpbWVzdGFtcCddKTsKICAgICAgICAgICAgICAgICRhcnJpdmFsX3RpbWUtPnNldFRpbWV6b25lKG5ldyBEYXRlVGltZVpvbmUoJ0V1cm9wZS9QYXJpcycpKTsKICAgICAgICAgICAgICAgICRkYXRlX2Rpc3BsYXkgPSAkYXJyaXZhbF90aW1lLT5mb3JtYXQoJ1ktbS1kJyk7CiAgICAgICAgICAgICAgICAkYXJyaXZhbF90aW1lX2Rpc3BsYXkgPSAkYXJyaXZhbF90aW1lLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBHw6lyZXIgbGUgY2FzIG/DuSBsZSBwb2ludGFnZSBkZSBzb3J0aWUgbidlc3QgcGFzIGVuY29yZSBkw6lmaW5pCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSkpIHsKICAgICAgICAgICAgICAgICAgICAkZGVwYXJ0dXJlX3RpbWVfZGlzcGxheSA9ICJFbiBjb3VycyI7CiAgICAgICAgICAgICAgICAgICAgJHdvcmtfaG91cnNfZGlzcGxheSA9ICJFbiBjb3VycyI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIENyw6lhdGlvbiBkZSBsJ29iamV0IERhdGVUaW1lIHBvdXIgbCdoZXVyZSBkZSBkw6lwYXJ0CiAgICAgICAgICAgICAgICAgICAgJGRlcGFydHVyZV90aW1lID0gRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ1UnLCAkcG9pbnRhZ2VbJ1NvcnRpZVRpbWVzdGFtcCddKTsKICAgICAgICAgICAgICAgICAgICAkZGVwYXJ0dXJlX3RpbWUtPnNldFRpbWV6b25lKG5ldyBEYXRlVGltZVpvbmUoJ0V1cm9wZS9QYXJpcycpKTsKICAgICAgICAgICAgICAgICAgICAkZGVwYXJ0dXJlX3RpbWVfZGlzcGxheSA9ICRkZXBhcnR1cmVfdGltZS0+Zm9ybWF0KCdIOmknKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWwgZGVzIGhldXJlcyB0cmF2YWlsbMOpZXMKICAgICAgICAgICAgICAgICAgICAkd29ya19zZWNvbmRzID0gJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXSAtICRwb2ludGFnZVsnRW50cmVlVGltZXN0YW1wJ107CiAgICAgICAgICAgICAgICAgICAgJHdvcmtfaG91cnMgPSAkd29ya19zZWNvbmRzIC8gMzYwMDsKICAgICAgICAgICAgICAgICAgICAkd29ya19ob3Vyc19kaXNwbGF5ID0gbnVtYmVyX2Zvcm1hdCgkd29ya19ob3VycywgMik7CiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX2hvdXJzICs9ICR3b3JrX2hvdXJzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBBam91dCBkZSBsYSBsaWduZSBkYW5zIGxlIHRhYmxlYXUKICAgICAgICAgICAgICAgICR0YWJsZV9yb3dzIC49ICI8dHIgZGF0YS1wb2ludGFnZS1pZD0nIi4kcG9pbnRhZ2VbJ1BvaW50YWdlSUQnXS4iJyBkYXRhLWVudHJlZS10aW1lc3RhbXA9JyIuJHBvaW50YWdlWydFbnRyZWVUaW1lc3RhbXAnXS4iJyBkYXRhLXNvcnRpZS10aW1lc3RhbXA9JyIuJHBvaW50YWdlWydTb3J0aWVUaW1lc3RhbXAnXS4iJyBvbmNsaWNrPSdhZmZpY2hlck1vZGFsKHRoaXMpJz48dGQ+eyRkYXRlX2Rpc3BsYXl9PC90ZD48dGQ+eyRhcnJpdmFsX3RpbWVfZGlzcGxheX08L3RkPjx0ZD57JGRlcGFydHVyZV90aW1lX2Rpc3BsYXl9PC90ZD48dGQ+JHdvcmtfaG91cnNfZGlzcGxheTwvdGQ+PC90cj4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFmZmljaGFnZSBkdSB0YWJsZWF1CiAgICAgICAgICAgIGVjaG8gIjx0YWJsZT48dHI+PHRoPkRhdGU8L3RoPjx0aD5IZXVyZSBkJ2Fycml2w6llPC90aD48dGg+SGV1cmUgZGUgZMOpcGFydDwvdGg+PHRoPk5vbWJyZSBkJ2hldXJlczwvdGg+PC90cj4kdGFibGVfcm93czwvdGFibGU+IjsKICAgICAgICAgICAgZWNobyAiVG90YWwgZCdoZXVyZXMgdHJhdmFpbGzDqWVzIDogIiAuIG51bWJlcl9mb3JtYXQoJHRvdGFsX2hvdXJzLCAyKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICA/PgogICAgICAgIAogICAgICAgIAogICAgICAgIDxicj48YnI+PGJyPgogICAgICAgIAogICAgICAgIDxwPjxhIGhyZWY9IiMiIG9uY2xpY2s9InByb21wdEV4aXRQaW4oKSI+U29ydGlyIEVtcGxvecOpPC9hPjwvcD4KICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICAKICAgICAgICA8L2Rpdj48L2Rpdj4KICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L2NlbnRlcj4KICAgICAgICAKICAgICAgICAKICAgICAgICA8IS0tIE1vZGFsIFBJTiAoZGVzaWduIHJlZmFpdCkgLS0+CiAgICAgICAgPGRpdiBpZD0ibW9kYWxCYWNrZ3JvdW5kIiBvbmNsaWNrPSJjbG9zZVBpbk1vZGFsKCkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KICAgICAgICA8ZGl2IGlkPSJwaW5Nb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9InBpbk1vZGFsVGl0bGUiPgogICAgICAgICAgPGZvcm0gaWQ9InBpbkZvcm0iIG9uc3VibWl0PSJ2ZXJpZmllclBpbigpOyByZXR1cm4gZmFsc2U7Ij4KICAgICAgICAgICAgPGgyIGlkPSJwaW5Nb2RhbFRpdGxlIiBjbGFzcz0icGluLW1vZGFsLXRpdGxlIj5Db2RlIFBJTjwvaDI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJwaW4tbW9kYWwtc3VidGl0bGUiPlNhaXNpc3NleiB2b3RyZSBjb2RlIMOgIDQgY2hpZmZyZXM8L3A+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4taW5wdXQtd3JhcHBlciIgb25jbGljaz0iZm9jdXNQaW5JbnB1dCgpIj4KICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJwaW5JbnB1dCIgY2xhc3M9InNyLW9ubHkiPkNvZGUgUElOICg0IGNoaWZmcmVzKTwvbGFiZWw+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveGVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMiI+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMyI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICB0eXBlPSJ0ZWwiCiAgICAgICAgICAgICAgICBpZD0icGluSW5wdXQiCiAgICAgICAgICAgICAgICBjbGFzcz0icGluLWhpZGRlbi1pbnB1dCIKICAgICAgICAgICAgICAgIGlucHV0bW9kZT0ibnVtZXJpYyIKICAgICAgICAgICAgICAgIHBhdHRlcm49IlswLTldKiIKICAgICAgICAgICAgICAgIG1heGxlbmd0aD0iNCIKICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIgogICAgICAgICAgICAgICAgYXV0b2NhcGl0YWxpemU9Im9mZiIKICAgICAgICAgICAgICAgIGF1dG9jb3JyZWN0PSJvZmYiCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSIKICAgICAgICAgICAgICAgIHRpdGxlPSJTZXVsZW1lbnQgZGVzIGNoaWZmcmVzLiIKICAgICAgICAgICAgICAgIHZhbHVlPSIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBpbi1tb2RhbC1hY3Rpb25zIj4KICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InBpbi1tb2RhbC1idG4gY2FuY2VsIiBvbmNsaWNrPSJjbG9zZVBpbk1vZGFsKCkiPkFubnVsZXI8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9InBpbi1tb2RhbC1idG4gY29uZmlybSI+VmFsaWRlcjwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8c2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8zLjUuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0ianMvdmVuZG9yL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIDxzY3JpcHQgc3JjPSJqcy9wbHVnaW5zLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0ianMvbWFpbi5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgCgoKICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgogICAgICAgIHZhciBlbXBsb3llZUZpcnN0TmFtZSA9IDw/cGhwIGVjaG8ganNvbl9lbmNvZGUoKCRlbXBsb3llICYmIGlzc2V0KCRlbXBsb3llWydQcmVub20nXSkpID8gKHN0cmluZykkZW1wbG95ZVsnUHJlbm9tJ10gOiAnJywgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSB8IEpTT05fSEVYX1RBRyB8IEpTT05fSEVYX0FNUCB8IEpTT05fSEVYX0FQT1MgfCBKU09OX0hFWF9RVU9UKTsgPz47CiAgICAgICAgZnVuY3Rpb24gYnVpbGRQdW5jaFRvYXN0KGFjdGlvbikgeyB2YXIgcCA9IGVtcGxveWVlRmlyc3ROYW1lID8gKCIgIiArIGVtcGxveWVlRmlyc3ROYW1lKSA6ICIiOyByZXR1cm4gKGFjdGlvbiA9PT0gImRlcGFydCIpID8gKCJEw6lwYXJ0IiArIHAgKyAiIGVucmVnaXN0csOpIikgOiAoIkFycml2w6llIiArIHAgKyAiIGVucmVnaXN0csOpZSIpOyB9CgogICAgICAgICQoIiNhcnJpdmFsQnV0dG9uIikuY2xpY2soZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGxldCBlbXBsb3llID0gJCh0aGlzKS5kYXRhKCdlbXBsb3llJyk7CiAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgICB1cmw6ICJlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7ZW1wbG95ZTogZW1wbG95ZX0sCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBtc2cgPSBidWlsZFB1bmNoVG9hc3QoImFycml2ZWUiKTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJpbmRleC5waHA/dG9hc3Q9IiArIGVuY29kZVVSSUNvbXBvbmVudChtc2cpICsgIiZ0b2FzdFR5cGU9c3VjY2VzcyI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiRXJyZXVyIGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBwb2ludGFnZS4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAKICAgICAgICAkKCIjZGVwYXJ0dXJlQnV0dG9uIikuY2xpY2soZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGxldCBlbXBsb3llID0gJCh0aGlzKS5kYXRhKCdlbXBsb3llJyk7CiAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgICB1cmw6ICJlbnJlZ2lzdHJlbWVudF9kZXBhcnQucGhwIiwKICAgICAgICAgICAgICAgIGRhdGE6IHtlbXBsb3llOiBlbXBsb3llfSwKICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9IGJ1aWxkUHVuY2hUb2FzdCgiZGVwYXJ0Iik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiaW5kZXgucGhwP3RvYXN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICImdG9hc3RUeXBlPXN1Y2Nlc3MiOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIiwgImVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgdmFyIGFjdGlvbkNvbnRleHQgPSAiIjsgLy8gVmFyaWFibGUgZ2xvYmFsZSBwb3VyIHN0b2NrZXIgbGUgY29udGV4dGUgZGUgbCdhY3Rpb24KCmZ1bmN0aW9uIHNhbml0aXplUGluVmFsdWUodmFsKSB7CiAgcmV0dXJuIFN0cmluZyh2YWwgfHwgJycpLnJlcGxhY2UoL1xEL2csICcnKS5zbGljZSgwLCA0KTsKfQoKZnVuY3Rpb24gdXBkYXRlUGluQm94ZXMocGluKSB7CiAgdmFyIGJveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3Bpbk1vZGFsIC5waW4tYm94Jyk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3hlcy5sZW5ndGg7IGkrKykgewogICAgYm94ZXNbaV0udGV4dENvbnRlbnQgPSAoaSA8IHBpbi5sZW5ndGgpID8gJ+KYhScgOiAnJzsKICB9Cn0KCmZ1bmN0aW9uIGZvY3VzUGluSW5wdXQoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCkgcmV0dXJuOwogIHRyeSB7IGlucHV0LmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9Cn0KCmZ1bmN0aW9uIHJlc2V0UGluTW9kYWwoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKGlucHV0KSBpbnB1dC52YWx1ZSA9ICcnOwogIHVwZGF0ZVBpbkJveGVzKCcnKTsKfQoKZnVuY3Rpb24gb3BlblBpbk1vZGFsKCkgewogIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpOwogIHZhciBiZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJhY2tncm91bmQnKTsKICBpZiAoIW1vZGFsIHx8ICFiZykgcmV0dXJuOwogIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIGJnLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogIHJlc2V0UGluTW9kYWwoKTsKICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgZm9jdXNQaW5JbnB1dCgpOyB9LCAxMCk7Cn0KCmZ1bmN0aW9uIGNsb3NlUGluTW9kYWwoKSB7CiAgdmFyIG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bpbk1vZGFsJyk7CiAgdmFyIGJnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmFja2dyb3VuZCcpOwogIGlmIChtb2RhbCkgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICBpZiAoYmcpIGJnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgcmVzZXRQaW5Nb2RhbCgpOwp9CgovLyBCaW5kIGlucHV0IG9uY2UgKGRpZ2l0cyBvbmx5ICsgc3luYyBVSSBib3hlcykKKGZ1bmN0aW9uIGJpbmRQaW5PbmNlKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQgfHwgaW5wdXQuZ2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJykgPT09ICcxJykgcmV0dXJuOwogIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcsICcxJyk7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgIHZhciBjbGVhbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQudmFsdWUpOwogICAgaWYgKGlucHV0LnZhbHVlICE9PSBjbGVhbikgaW5wdXQudmFsdWUgPSBjbGVhbjsKICAgIHVwZGF0ZVBpbkJveGVzKGNsZWFuKTsKICB9KTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgewogICAgdmFyIGtleSA9IGUua2V5IHx8ICcnOwogICAgaWYgKGtleSA9PT0gJ0VzY2FwZScpIHsKICAgICAgY2xvc2VQaW5Nb2RhbCgpOwogICAgfQogIH0pOwp9KSgpOwoKZnVuY3Rpb24gYWZmaWNoZXJNb2RhbChlbGVtZW50KSB7CiAgICB2YXIgcG9pbnRhZ2VJZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBvaW50YWdlLWlkJyk7CiAgICB3aW5kb3cucG9pbnRhZ2VJZFBvdXJNb2RpZmljYXRpb24gPSBwb2ludGFnZUlkOwogICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAibW9kaWZfcG9pbnRhZ2UucGhwP3BvaW50YWdlSWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChwb2ludGFnZUlkKTsKfQoKZnVuY3Rpb24gdmVyaWZpZXJQaW4oKSB7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICAgIHZhciBwaW4gPSBzYW5pdGl6ZVBpblZhbHVlKGlucHV0ID8gaW5wdXQudmFsdWUgOiAnJyk7CiAgICBpZiAoaW5wdXQgJiYgaW5wdXQudmFsdWUgIT09IHBpbikgaW5wdXQudmFsdWUgPSBwaW47CiAgICB1cGRhdGVQaW5Cb3hlcyhwaW4pOwoKICAgIGlmIChwaW4ubGVuZ3RoICE9PSA0KSB7CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFbnRyZXogdW4gY29kZSBQSU4gw6AgNCBjaGlmZnJlcy4iLCAiZXJyb3IiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWxlcnQoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIpOwogICAgICAgIH0KICAgICAgICB0cnkgeyBmb2N1c1BpbklucHV0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHBpbikgewogICAgICAgIC8vIEVudm9pIGR1IGNvZGUgUElOIMOgIHVuIHNjcmlwdCBQSFAgcG91ciB2w6lyaWZpY2F0aW9uCiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0ICYmIHRoaXMuc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VUZXh0ID09ICJPSyIpIHsKICAgICAgICAgICAgICAgICAgICAvLyBFeMOpY3V0ZXIgbCdhY3Rpb24gZW4gZm9uY3Rpb24gZHUgY29udGV4dGUKICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uQ29udGV4dCA9PT0gIm1vZGlmaWNhdGlvblBvaW50YWdlIikgewogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJtb2RpZl9wb2ludGFnZS5waHA/cG9pbnRhZ2VJZD0iICsgd2luZG93LnBvaW50YWdlSWRQb3VyTW9kaWZpY2F0aW9uOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uQ29udGV4dCA9PT0gInNvcnRpZUVtcGxveWUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRpckVtcGxveWUod2luZG93LnBvaW50YWdlSWRQb3VyU29ydGllKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXNldFBpbk1vZGFsKCk7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgZm9jdXNQaW5JbnB1dCgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB4aHIub3BlbigiUE9TVCIsICJ2ZXJpZmllcl9waW4ucGhwIiwgdHJ1ZSk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICB4aHIuc2VuZCgicGluPSIgKyBwaW4pOwogICAgfQp9CgpmdW5jdGlvbiBwcm9tcHRFeGl0UGluKCkgewogICAgd2luZG93LnBvaW50YWdlSWRQb3VyU29ydGllID0gPD9waHAgZWNobyAkZW1wbG95ZUlkOyA/PjsKICAgIHNvcnRpckVtcGxveWUod2luZG93LnBvaW50YWdlSWRQb3VyU29ydGllKTsKfQoKZnVuY3Rpb24gc29ydGlyRW1wbG95ZShlbXBsb3llSWQpIHsKICAgICQuYWpheCh7CiAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgIHVybDogInNvcnRpcl9lbXBsb3llLnBocCIsIC8vIFNjcmlwdCBQSFAgcG91ciBzb3J0aXIgbCdlbXBsb3nDqQogICAgICAgIGRhdGE6IHtlbXBsb3llOiBlbXBsb3llSWR9LAogICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIHZhciBtc2cgPSAiU3RhdHV0IGRlIGwnZW1wbG95w6kgbWlzIMOgIGpvdXIuIjsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiaW5kZXgucGhwP3RvYXN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICImdG9hc3RUeXBlPXN1Y2Nlc3MiOwogICAgICAgIH0sCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXIgZHUgc3RhdHV0IGVtcGxvecOpLiIsICJlcnJvciIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsYSBtaXNlIMOgIGpvdXIgZHUgc3RhdHV0IGVtcGxvecOpLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cn0KCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDwvYm9keT4KICAgICAgICAgICAgCiAgICAgICAgICAgIDwvaHRtbD4="
            }
        }
    ],
    "meta": {
        "summary": {
            "changed": 7,
            "created": 2,
            "deleted": 0,
            "errors": 0
        },
        "patch_sha1": "bd5be2de33c054e82350554bcfed3b4b0052027d",
        "created_files": [
            "pointages/includes/device_auth.php",
            "pointages/css/device-login.css"
        ],
        "branching": {
            "auto_branch_created": false,
            "auto_branch_id": null,
            "source_branch_id": "main",
            "base_event_id": "event_66151d81c952b430"
        },
        "transition_store": {
            "dir": "event-assets/event_dd82e0f403ebe6f1",
            "manifest": "event-assets/event_dd82e0f403ebe6f1/manifest.json",
            "files_count": 9
        }
    },
    "impacted_paths": [
        "pointages/admin.php",
        "pointages/api/livreurs.php",
        "pointages/connexion.php",
        "pointages/css/device-login.css",
        "pointages/enregistrer_livreur.php",
        "pointages/includes/device_auth.php",
        "pointages/index.php",
        "pointages/modif_pointage.php",
        "pointages/pointage.php"
    ]
}