{
    "id": "event_3c01b1f1ba5c5d08",
    "timestamp": 1777292333,
    "branch_id": "main",
    "parent_event_id": "event_a4c22d3ca872c3ae",
    "type": "patch_apply",
    "label": "Charge jQuery sans casser les pages",
    "source": "patch",
    "author": "CNOC",
    "session_id": "43305eb2706f6eee2531a5a173355a18",
    "payload": [
        {
            "path": "pointages/admin.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 6607,
                "sha1": "d6906f9c89917042c845ba35b47847fec59fa8e7",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvYWRtaW4ucGhwIHwgUHJvdMOoZ2UgbOKAmWFjY8OocyBhZG1pbmlzdHJhdGV1ciB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsLCBwZXJtZXQgbOKAmWFqb3V0IGTigJl1biBzYWxhcmnDqSBldCBjaGFyZ2UgdW5pcXVlbWVudCBkZXMgYXNzZXRzIGxvY2F1eCB2ZXJzaW9ubsOpcyBzYW5zIE1vZGVybml6ci9SZXNwb25kIG5pIEJvb3RzdHJhcCBKUy4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBpbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCwgaW5kZXgucGhwLCBjb25uZXhpb24ucGhwLCBqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMsIGpzL3BsdWdpbnMuanMsIGpzL21haW4uanMgfCBJbXBhY3RlOiDDqXRhdCBkZSBzZXNzaW9uLCBjb29raWUgZOKAmWFwcGFyZWlsLCBhY2PDqHMgw6AgbOKAmWludGVyZmFjZSwgaW5zZXJ0aW9uIEJERCwgcmVkaXJlY3Rpb24sIGludGVyYWN0aW9ucyBVSSBuYXRpdmVzIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoTm9tLCBQcmVub20sIERhdGVEZU5haXNzYW5jZSwgUm9sZSwgRW1haWwsIENvZGVQaW4sIERhdGVEZUNyZWF0aW9uLCBTdGF0dXQpICovCgoKCnNlc3Npb25fc3RhcnQoKTsKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCgoKPHRpdGxlPkFqb3V0IG5vdXZlYXUgc2FsYXJpw6k8L3RpdGxlPgoKPCEtLQoKCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKCgpodHRwOi8vd3d3LnRvb3BsYXRlLmNvbS92aWV3LzIwODktbWV0ZW9yCgoKCi0tPgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAtdGhlbWUubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2ZvbnRBd2Vzb21lLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3N0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPC9oZWFkPgoKPGJvZHkgY2xhc3M9InBhZ2UtYWRtaW4gdGhlbWUtZGFyayI+CgoKCgoKCgo8ZGl2IGlkPSJhYm91dCIgY2xhc3M9InBhZ2Utc2VjdGlvbiI+Cgo8ZGl2IGNsYXNzPSJjb250YWluZXIiPgoKPGRpdiBjbGFzcz0icm93Ij4KCjxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+Cgo8ZGl2IGNsYXNzPSJzZWN0aW9uLWhlYWRpbmciPgoKPGgxPkFqb3V0IG5vdXZlbCBlbXBsb3nDqTwvaDE+CgoKCgoKPGg0PjwvaDQ+PGRpdiBjbGFzcz0ibGluZS1kZWMiPjwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgIAoKCgo8Y2VudGVyPjxmb250IGNvbG9yPSJ3aGl0ZSI+CgoKCgoKCgoKCgoKPCEtLSBGb3JtdWxhaXJlIHBvdXIgYWpvdXRlciB1biBlbXBsb3nDqSAtLT4KCjxicj4KPGZvbnQgY29sb3I9ImJsYWNrIj4KPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CjwhLS0gQWpvdXRlciBsZXMgY2hhbXBzIG1hbnF1YW50cyBpY2kgLS0+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJub20iIHBsYWNlaG9sZGVyPSJOb20iIHJlcXVpcmVkPjxicj48YnI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwcmVub20iIHBsYWNlaG9sZGVyPSJQcsOpbm9tIiByZXF1aXJlZD48YnI+PGJyPgoKPGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlRGVOYWlzc2FuY2UiIG5hbWU9ImRhdGVEZU5haXNzYW5jZSIgb25pbnB1dD0iZm9ybWF0ZXJEYXRlKHRoaXMpIiBpbnB1dG1vZGU9Im51bWVyaWMiIG1heGxlbmd0aD0iMTAiIHBsYWNlaG9sZGVyPSJKSi9NTS9BQUFBIj48YnI+PGJyPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icm9sZSIgcGxhY2Vob2xkZXI9IlJvbGUiID48YnI+PGJyPgo8aW5wdXQgdHlwZT0iZW1haWwiIG5hbWU9ImVtYWlsIiBwbGFjZWhvbGRlcj0iRW1haWwiID48YnI+PGJyPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29kZVBpbiIgcGxhY2Vob2xkZXI9IkNvZGUgUGluIiA+PGJyPjxicj4KCjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkFqb3V0ZXIiPgo8L2ZvbnQ+CjwvZm9ybT4KCgoKCgoKCjxicj48YnI+PGJyPgoKPGZvbnQgY29sb3I9IndoaXRlIj4KCjw/cGhwCmlmIChpc3NldCgkX1BPU1RbJ3N1Ym1pdCddKSkgewogICAgJGRhdGVQYXJ0cyA9IGV4cGxvZGUoJy8nLCAkX1BPU1RbJ2RhdGVEZU5haXNzYW5jZSddKTsKICAgICRkYXRlRGVOYWlzc2FuY2VGb3JtYXR0ZWQgPSAkZGF0ZVBhcnRzWzJdIC4gJy0nIC4gJGRhdGVQYXJ0c1sxXSAuICctJyAuICRkYXRlUGFydHNbMF07CgogICAgLy8gUsOpY3Vww6lyZXIgbGVzIGRvbm7DqWVzIGR1IGZvcm11bGFpcmUKICAgICRub20gPSAkX1BPU1RbJ25vbSddOwogICAgJHByZW5vbSA9ICRfUE9TVFsncHJlbm9tJ107CiAgICAkZGF0ZURlTmFpc3NhbmNlID0gJF9QT1NUWydkYXRlRGVOYWlzc2FuY2UnXTsKICAgICRyb2xlID0gJF9QT1NUWydyb2xlJ107CiAgICAkZW1haWwgPSAkX1BPU1RbJ2VtYWlsJ107CiAgICAkY29kZVBpbiA9ICRfUE9TVFsnY29kZVBpbiddOwogICAgCiAgICAvLyBDb25zdHJ1aXJlIGV0IGV4w6ljdXRlciBsYSByZXF1w6p0ZSBJTlNFUlQKICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiSU5TRVJUIElOVE8gel9wdGdfYXFwX3V0aWxpc2F0ZXVycyAoTm9tLCBQcmVub20sIERhdGVEZU5haXNzYW5jZSwgUm9sZSwgRW1haWwsIENvZGVQaW4sIERhdGVEZUNyZWF0aW9uLCBTdGF0dXQpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgTk9XKCksICdhY3RpZicpIik7CiAgICAkc3RtdC0+ZXhlY3V0ZShbJG5vbSwgJHByZW5vbSwgJGRhdGVEZU5haXNzYW5jZUZvcm1hdHRlZCwgJHJvbGUsICRlbWFpbCwgJGNvZGVQaW5dKTsKICAgIAogICAgLy8gUmVkaXJpZ2VyIGF2ZWMgdG9hc3QgKGFmZmljaMOpIHN1ciBpbmRleC5waHApCiAgICAkdG9hc3RNZXNzYWdlID0gcmF3dXJsZW5jb2RlKCdFbXBsb3nDqSBham91dMOpIGF2ZWMgc3VjY8OocycpOwogICAgZWNobyAiPHNjcmlwdD53aW5kb3cubG9jYXRpb24uaHJlZiA9ICdpbmRleC5waHA/dG9hc3Q9eyR0b2FzdE1lc3NhZ2V9JnRvYXN0VHlwZT1zdWNjZXNzJzs8L3NjcmlwdD4iOwp9Cj8+CgoKCgoKCjxicj48YnI+PGJyPjxicj48YnI+Cgo8Zm9udCBjb2xvcj0iYmxhY2siPgoKPGJ1dHRvbiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdpbmRleC5waHAnOyI+IFJldG91cm5lciBwYWdlIGVtcGxvecOpcyA8L2J1dHRvbj4KCjwvZm9udD4KCgoKCgo8L2ZvbnQ+Cgo8L2NlbnRlcj4KCjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgoKCgo8cD48YSBocmVmPSJpbmRleC5waHAiPlJldG91ciBhY2N1ZWlsPC9hPjwvcD4KCjwvZGl2PgoKCgoKCgoKCgoKCgoKCgoKCgoKPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2pzL3BsdWdpbnMuanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvbWFpbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKCgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgCiAgICAvLyBuYXZpZ2F0aW9uIGNsaWNrIGFjdGlvbnMgCiAgICAKICAgICQoJy5zY3JvbGwtbGluaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgIHZhciBzZWN0aW9uSUQgPSAkKHRoaXMpLmF0dHIoImRhdGEtaWQiKTsKICAgICAgICAKICAgICAgICBzY3JvbGxUb0lEKCcjJyArIHNlY3Rpb25JRCwgNzUwKTsKICAgICAgICAKICAgIH0pOwogICAgCiAgICAvLyBzY3JvbGwgdG8gdG9wIGFjdGlvbgogICAgCiAgICAkKCcuc2Nyb2xsLXRvcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAKICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOjB9LCAnc2xvdycpOyAgICAgICAgIAogICAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIG1vYmlsZSBuYXYgdG9nZ2xlCiAgICAKICAgICQoJyNuYXYtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAKICAgICAgICAkKCcjbWFpbi1uYXYnKS50b2dnbGVDbGFzcygib3BlbiIpOwogICAgICAgIAogICAgfSk7CiAgICAKfSk7CgovLyBzY3JvbGwgZnVuY3Rpb24KCmZ1bmN0aW9uIHNjcm9sbFRvSUQoaWQsIHNwZWVkKXsKICAgIAogICAgdmFyIG9mZlNldCA9IDUwOwogICAgCiAgICB2YXIgdGFyZ2V0T2Zmc2V0ID0gJChpZCkub2Zmc2V0KCkudG9wIC0gb2ZmU2V0OwogICAgCiAgICB2YXIgbWFpbk5hdiA9ICQoJyNtYWluLW5hdicpOwogICAgCiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6dGFyZ2V0T2Zmc2V0fSwgc3BlZWQpOwogICAgCiAgICBpZiAobWFpbk5hdi5oYXNDbGFzcygib3BlbiIpKSB7CiAgICAgICAgCiAgICAgICAgbWFpbk5hdi5jc3MoImhlaWdodCIsICIxcHgiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygiY29sbGFwc2UiKTsKICAgICAgICAKICAgICAgICBtYWluTmF2LnJlbW92ZUNsYXNzKCJvcGVuIik7CiAgICAgICAgCiAgICB9CiAgICAKfQoKaWYgKHR5cGVvZiBjb25zb2xlID09PSAidW5kZWZpbmVkIikgewogICAgCiAgICBjb25zb2xlID0gewogICAgICAgIAogICAgICAgIGxvZzogZnVuY3Rpb24oKSB7IH0KICAgICAgICAKICAgIH07CiAgICAKfQoKCmZ1bmN0aW9uIGZvcm1hdGVyRGF0ZShpbnB1dCkgewogICAgdmFyIHZhbGV1ciA9IGlucHV0LnZhbHVlOwogICAgdmFyIGNoaWZmcmVzID0gdmFsZXVyLnJlcGxhY2UoL1xEL2csICcnKTsgLy8gU3VwcHJpbWUgdG91cyBsZXMgY2FyYWN0w6hyZXMgbm9uLW51bcOpcmlxdWVzCiAgICAKICAgIC8vIEFqb3V0ZSBkZXMgJy8nIGFwcsOocyBsZSBqb3VyIGV0IGxlIG1vaXMKICAgIGNoaWZmcmVzID0gY2hpZmZyZXMuc3Vic3RyaW5nKDAsIDIpICsgKGNoaWZmcmVzLmxlbmd0aCA+IDIgPyAnLycgOiAnJykgKyBjaGlmZnJlcy5zdWJzdHJpbmcoMiwgNCkgKyAoY2hpZmZyZXMubGVuZ3RoID4gNCA/ICcvJyA6ICcnKSArIGNoaWZmcmVzLnN1YnN0cmluZyg0LCA4KTsKICAgIAogICAgaW5wdXQudmFsdWUgPSBjaGlmZnJlczsKfQoKCjwvc2NyaXB0PgoKPC9ib2R5PgoKPC9odG1sPg=="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 6606,
                "sha1": "715e9088f6c21c63febb01dc5d8869a495a9a074",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvYWRtaW4ucGhwIHwgUHJvdMOoZ2UgbOKAmWFjY8OocyBhZG1pbmlzdHJhdGV1ciB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsLCBwZXJtZXQgbOKAmWFqb3V0IGTigJl1biBzYWxhcmnDqSBldCBjaGFyZ2UgbGVzIGFzc2V0cyB2ZXJzaW9ubsOpcyBhdmVjIGhlbHBlciBqUXVlcnkgcm9idXN0ZSBzYW5zIE1vZGVybml6ci9SZXNwb25kIG5pIEJvb3RzdHJhcCBKUy4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBpbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCwgaW5jbHVkZXMvanF1ZXJ5X2xvYWRlci5waHAsIGluZGV4LnBocCwgY29ubmV4aW9uLnBocCwganMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzLCBqcy9wbHVnaW5zLmpzLCBqcy9tYWluLmpzIHwgSW1wYWN0ZTogw6l0YXQgZGUgc2Vzc2lvbiwgY29va2llIGTigJlhcHBhcmVpbCwgYWNjw6hzIMOgIGzigJlpbnRlcmZhY2UsIGluc2VydGlvbiBCREQsIHJlZGlyZWN0aW9uLCBpbnRlcmFjdGlvbnMgVUkgbmF0aXZlcyB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpLCB6X3B0Z19hcXBfdXRpbGlzYXRldXJzKE5vbSwgUHJlbm9tLCBEYXRlRGVOYWlzc2FuY2UsIFJvbGUsIEVtYWlsLCBDb2RlUGluLCBEYXRlRGVDcmVhdGlvbiwgU3RhdHV0KSAqLwoKCgpzZXNzaW9uX3N0YXJ0KCk7CnJlcXVpcmVfb25jZSAiY29uZmlnLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvYXNzZXRfdmVyc2lvbi5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvanF1ZXJ5X2xvYWRlci5waHAiOwpyZXF1aXJlX2RldmljZV9hdXRob3JpemVkKCRwZG8pOwoKPz4KPCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCjxoZWFkPgoKPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Cgo8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgoKCgoKCjx0aXRsZT5Bam91dCBub3V2ZWF1IHNhbGFyacOpPC90aXRsZT4KCjwhLS0KCgoKVGVtcGxhdGUgMjA4OSBNZXRlb3IKCgoKaHR0cDovL3d3dy50b29wbGF0ZS5jb20vdmlldy8yMDg5LW1ldGVvcgoKCgotLT4KCjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgoKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KCjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iYXBwbGUtdG91Y2gtaWNvbi5wbmciPgoKCgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9mb250QXdlc29tZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9oZXJvLXNsaWRlci5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy90b29wbGF0ZS1zdHlsZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9zdHlsZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KCjwvaGVhZD4KCjxib2R5IGNsYXNzPSJwYWdlLWFkbWluIHRoZW1lLWRhcmsiPgoKCgoKCgoKPGRpdiBpZD0iYWJvdXQiIGNsYXNzPSJwYWdlLXNlY3Rpb24iPgoKPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KCjxkaXYgY2xhc3M9InJvdyI+Cgo8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgoKPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KCjxoMT5Bam91dCBub3V2ZWwgZW1wbG95w6k8L2gxPgoKCgoKCjxoND48L2g0PjxkaXYgY2xhc3M9ImxpbmUtZGVjIj48L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAKCgoKPGNlbnRlcj48Zm9udCBjb2xvcj0id2hpdGUiPgoKCgoKCgoKCgoKCjwhLS0gRm9ybXVsYWlyZSBwb3VyIGFqb3V0ZXIgdW4gZW1wbG95w6kgLS0+Cgo8YnI+Cjxmb250IGNvbG9yPSJibGFjayI+Cjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgo8IS0tIEFqb3V0ZXIgbGVzIGNoYW1wcyBtYW5xdWFudHMgaWNpIC0tPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibm9tIiBwbGFjZWhvbGRlcj0iTm9tIiByZXF1aXJlZD48YnI+PGJyPgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icHJlbm9tIiBwbGFjZWhvbGRlcj0iUHLDqW5vbSIgcmVxdWlyZWQ+PGJyPjxicj4KCjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZGF0ZURlTmFpc3NhbmNlIiBuYW1lPSJkYXRlRGVOYWlzc2FuY2UiIG9uaW5wdXQ9ImZvcm1hdGVyRGF0ZSh0aGlzKSIgaW5wdXRtb2RlPSJudW1lcmljIiBtYXhsZW5ndGg9IjEwIiBwbGFjZWhvbGRlcj0iSkovTU0vQUFBQSI+PGJyPjxicj4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InJvbGUiIHBsYWNlaG9sZGVyPSJSb2xlIiA+PGJyPjxicj4KPGlucHV0IHR5cGU9ImVtYWlsIiBuYW1lPSJlbWFpbCIgcGxhY2Vob2xkZXI9IkVtYWlsIiA+PGJyPjxicj4KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNvZGVQaW4iIHBsYWNlaG9sZGVyPSJDb2RlIFBpbiIgPjxicj48YnI+Cgo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJBam91dGVyIj4KPC9mb250Pgo8L2Zvcm0+CgoKCgoKCgo8YnI+PGJyPjxicj4KCjxmb250IGNvbG9yPSJ3aGl0ZSI+Cgo8P3BocAppZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQnXSkpIHsKICAgICRkYXRlUGFydHMgPSBleHBsb2RlKCcvJywgJF9QT1NUWydkYXRlRGVOYWlzc2FuY2UnXSk7CiAgICAkZGF0ZURlTmFpc3NhbmNlRm9ybWF0dGVkID0gJGRhdGVQYXJ0c1syXSAuICctJyAuICRkYXRlUGFydHNbMV0gLiAnLScgLiAkZGF0ZVBhcnRzWzBdOwoKICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBkb25uw6llcyBkdSBmb3JtdWxhaXJlCiAgICAkbm9tID0gJF9QT1NUWydub20nXTsKICAgICRwcmVub20gPSAkX1BPU1RbJ3ByZW5vbSddOwogICAgJGRhdGVEZU5haXNzYW5jZSA9ICRfUE9TVFsnZGF0ZURlTmFpc3NhbmNlJ107CiAgICAkcm9sZSA9ICRfUE9TVFsncm9sZSddOwogICAgJGVtYWlsID0gJF9QT1NUWydlbWFpbCddOwogICAgJGNvZGVQaW4gPSAkX1BPU1RbJ2NvZGVQaW4nXTsKICAgIAogICAgLy8gQ29uc3RydWlyZSBldCBleMOpY3V0ZXIgbGEgcmVxdcOqdGUgSU5TRVJUCiAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIklOU0VSVCBJTlRPIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgKE5vbSwgUHJlbm9tLCBEYXRlRGVOYWlzc2FuY2UsIFJvbGUsIEVtYWlsLCBDb2RlUGluLCBEYXRlRGVDcmVhdGlvbiwgU3RhdHV0KSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sIE5PVygpLCAnYWN0aWYnKSIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyRub20sICRwcmVub20sICRkYXRlRGVOYWlzc2FuY2VGb3JtYXR0ZWQsICRyb2xlLCAkZW1haWwsICRjb2RlUGluXSk7CiAgICAKICAgIC8vIFJlZGlyaWdlciBhdmVjIHRvYXN0IChhZmZpY2jDqSBzdXIgaW5kZXgucGhwKQogICAgJHRvYXN0TWVzc2FnZSA9IHJhd3VybGVuY29kZSgnRW1wbG95w6kgYWpvdXTDqSBhdmVjIHN1Y2PDqHMnKTsKICAgIGVjaG8gIjxzY3JpcHQ+d2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaW5kZXgucGhwP3RvYXN0PXskdG9hc3RNZXNzYWdlfSZ0b2FzdFR5cGU9c3VjY2Vzcyc7PC9zY3JpcHQ+IjsKfQo/PgoKCgoKCgo8YnI+PGJyPjxicj48YnI+PGJyPgoKPGZvbnQgY29sb3I9ImJsYWNrIj4KCjxidXR0b24gb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaW5kZXgucGhwJzsiPiBSZXRvdXJuZXIgcGFnZSBlbXBsb3nDqXMgPC9idXR0b24+Cgo8L2ZvbnQ+CgoKCgoKPC9mb250PgoKPC9jZW50ZXI+Cgo8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KCgoKPHA+PGEgaHJlZj0iaW5kZXgucGhwIj5SZXRvdXIgYWNjdWVpbDwvYT48L3A+Cgo8L2Rpdj4KCgoKCgoKCgoKCgoKCgoKCgoKCjw/cGhwIHJlbmRlcl9qcXVlcnlfc2NyaXB0X3RhZ3MoKTsgPz4KPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvcGx1Z2lucy5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9tYWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CgoKCgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAKICAgIC8vIG5hdmlnYXRpb24gY2xpY2sgYWN0aW9ucyAKICAgIAogICAgJCgnLnNjcm9sbC1saW5rJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpewogICAgICAgIAogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgCiAgICAgICAgdmFyIHNlY3Rpb25JRCA9ICQodGhpcykuYXR0cigiZGF0YS1pZCIpOwogICAgICAgIAogICAgICAgIHNjcm9sbFRvSUQoJyMnICsgc2VjdGlvbklELCA3NTApOwogICAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIHNjcm9sbCB0byB0b3AgYWN0aW9uCiAgICAKICAgICQoJy5zY3JvbGwtdG9wJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6MH0sICdzbG93Jyk7ICAgICAgICAgCiAgICAgICAgCiAgICB9KTsKICAgIAogICAgLy8gbW9iaWxlIG5hdiB0b2dnbGUKICAgIAogICAgJCgnI25hdi10b2dnbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIAogICAgICAgICQoJyNtYWluLW5hdicpLnRvZ2dsZUNsYXNzKCJvcGVuIik7CiAgICAgICAgCiAgICB9KTsKICAgIAp9KTsKCi8vIHNjcm9sbCBmdW5jdGlvbgoKZnVuY3Rpb24gc2Nyb2xsVG9JRChpZCwgc3BlZWQpewogICAgCiAgICB2YXIgb2ZmU2V0ID0gNTA7CiAgICAKICAgIHZhciB0YXJnZXRPZmZzZXQgPSAkKGlkKS5vZmZzZXQoKS50b3AgLSBvZmZTZXQ7CiAgICAKICAgIHZhciBtYWluTmF2ID0gJCgnI21haW4tbmF2Jyk7CiAgICAKICAgICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoe3Njcm9sbFRvcDp0YXJnZXRPZmZzZXR9LCBzcGVlZCk7CiAgICAKICAgIGlmIChtYWluTmF2Lmhhc0NsYXNzKCJvcGVuIikpIHsKICAgICAgICAKICAgICAgICBtYWluTmF2LmNzcygiaGVpZ2h0IiwgIjFweCIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJjb2xsYXBzZSIpOwogICAgICAgIAogICAgICAgIG1haW5OYXYucmVtb3ZlQ2xhc3MoIm9wZW4iKTsKICAgICAgICAKICAgIH0KICAgIAp9CgppZiAodHlwZW9mIGNvbnNvbGUgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAKICAgIGNvbnNvbGUgPSB7CiAgICAgICAgCiAgICAgICAgbG9nOiBmdW5jdGlvbigpIHsgfQogICAgICAgIAogICAgfTsKICAgIAp9CgoKZnVuY3Rpb24gZm9ybWF0ZXJEYXRlKGlucHV0KSB7CiAgICB2YXIgdmFsZXVyID0gaW5wdXQudmFsdWU7CiAgICB2YXIgY2hpZmZyZXMgPSB2YWxldXIucmVwbGFjZSgvXEQvZywgJycpOyAvLyBTdXBwcmltZSB0b3VzIGxlcyBjYXJhY3TDqHJlcyBub24tbnVtw6lyaXF1ZXMKICAgIAogICAgLy8gQWpvdXRlIGRlcyAnLycgYXByw6hzIGxlIGpvdXIgZXQgbGUgbW9pcwogICAgY2hpZmZyZXMgPSBjaGlmZnJlcy5zdWJzdHJpbmcoMCwgMikgKyAoY2hpZmZyZXMubGVuZ3RoID4gMiA/ICcvJyA6ICcnKSArIGNoaWZmcmVzLnN1YnN0cmluZygyLCA0KSArIChjaGlmZnJlcy5sZW5ndGggPiA0ID8gJy8nIDogJycpICsgY2hpZmZyZXMuc3Vic3RyaW5nKDQsIDgpOwogICAgCiAgICBpbnB1dC52YWx1ZSA9IGNoaWZmcmVzOwp9CgoKPC9zY3JpcHQ+Cgo8L2JvZHk+Cgo8L2h0bWw+"
            }
        },
        {
            "path": "pointages/includes/jquery_loader.php",
            "kind": "file",
            "before": {
                "exists": false
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 1562,
                "sha1": "b052ba39bc235071dcebc3bea9c5c5d1cbf00d2f",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvaW5jbHVkZXMvanF1ZXJ5X2xvYWRlci5waHAgfCBDZW50cmFsaXNlIGxlIGNoYXJnZW1lbnQgZGUgalF1ZXJ5IGF2ZWMgcHJpb3JpdMOpIGF1IGZpY2hpZXIgbG9jYWwgdmVyc2lvbm7DqSBwYXIgZmlsZW10aW1lIGV0IHNlY291cnMgQ0ROIHNpIGzigJlhc3NldCBsb2NhbCBtYW5xdWUuIHwgRXhwb3NlOiByZW5kZXJfanF1ZXJ5X3NjcmlwdF90YWdzIHwgRMOpcGVuZCBkZTogaW5jbHVkZXMvYXNzZXRfdmVyc2lvbi5waHAsIHN5c3TDqG1lIGRlIGZpY2hpZXJzIFBIUCwgY29kZS5qcXVlcnkuY29tIHwgSW1wYWN0ZTogY2hhcmdlbWVudCBKYXZhU2NyaXB0LCBwcsOpdmVudGlvbiBkZXMgZXJyZXVycyBqUXVlcnkvJCB1bmRlZmluZWQgfCBUYWJsZXM6IGF1Y3VuZSAqLwoKZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygncmVuZGVyX2pxdWVyeV9zY3JpcHRfdGFncycpKSB7CiAgICAvKioKICAgICAqIEFmZmljaGUgbGVzIGJhbGlzZXMgc2NyaXB0IG7DqWNlc3NhaXJlcyBhdSBjaGFyZ2VtZW50IGRlIGpRdWVyeS4KICAgICAqCiAgICAgKiBQcmlvcml0w6kgOgogICAgICogMS4gZmljaGllciBsb2NhbCBqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMgYXZlYyA/dj1maWxlbXRpbWUgOwogICAgICogMi4gQ0ROIHNldWxlbWVudCBzaSBsZSBmaWNoaWVyIGxvY2FsIG4nZXhpc3RlIHBhcywgcG91ciDDqXZpdGVyIHVuIDQwNCBibG9xdWFudC4KICAgICAqLwogICAgZnVuY3Rpb24gcmVuZGVyX2pxdWVyeV9zY3JpcHRfdGFncygpOiB2b2lkCiAgICB7CiAgICAgICAgJGxvY2FsUmVsYXRpdmVQYXRoID0gJ2pzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcyc7CiAgICAgICAgJGxvY2FsQWJzb2x1dGVQYXRoID0gZGlybmFtZShfX0RJUl9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBzdHJfcmVwbGFjZSgnLycsIERJUkVDVE9SWV9TRVBBUkFUT1IsICRsb2NhbFJlbGF0aXZlUGF0aCk7CiAgICAgICAgJGNkblVybCA9ICdodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMS4yLm1pbi5qcyc7CgogICAgICAgIGlmIChpc19maWxlKCRsb2NhbEFic29sdXRlUGF0aCkpIHsKICAgICAgICAgICAgZWNobyAnPHNjcmlwdCBzcmM9IicgLiBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCRsb2NhbFJlbGF0aXZlUGF0aCksIEVOVF9RVU9URVMsICdVVEYtOCcpIC4gJyI+PC9zY3JpcHQ+JyAuICJcbiI7CiAgICAgICAgICAgIGVjaG8gJzxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZShcJzxzY3JpcHQgc3JjPSInIC4gaHRtbHNwZWNpYWxjaGFycygkY2RuVXJsLCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICciPjxcL3NjcmlwdD5cJyk8L3NjcmlwdD4nIC4gIlxuIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZWNobyAnPHNjcmlwdCBzcmM9IicgLiBodG1sc3BlY2lhbGNoYXJzKCRjZG5VcmwsIEVOVF9RVU9URVMsICdVVEYtOCcpIC4gJyI+PC9zY3JpcHQ+JyAuICJcbiI7CiAgICB9Cn0="
            }
        },
        {
            "path": "pointages/index.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 21144,
                "sha1": "e9531fa86e2dee8f602b272137af0763b70bf93b",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvaW5kZXgucGhwIHwgQWZmaWNoZSBsZSB0YWJsZWF1IGRlIHBvaW50YWdlIGRlcyBzYWxhcmnDqXMgZXQgcHJvdMOoZ2UgbOKAmWFjY8OocyB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsIGF2ZWMgYXNzZXRzIGxvY2F1eCB2ZXJzaW9ubsOpcywgc2FucyBNb2Rlcm5penIvUmVzcG9uZCBuaSBCb290c3RyYXAgSlMuIHwgRXhwb3NlOiBvcGVuRW1wbG95ZWVNb2RhbCwgY2xvc2VFbXBsb3llZU1vZGFsLCBzdWJtaXRFbXBsb3llZVB1bmNoLCBnb1RvRW1wbG95ZWVEZXRhaWxzIHwgRMOpcGVuZCBkZTogcG9pbnRhZ2VzL2NvbmZpZy5waHAsIGluY2x1ZGVzL2RldmljZV9hdXRoLnBocCwgaW5jbHVkZXMvYXNzZXRfdmVyc2lvbi5waHAsIGNvbm5leGlvbi5waHAsIGFkbWluLnBocCwgZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAsIGVucmVnaXN0cmVtZW50X2RlcGFydC5waHAsIHBvaW50YWdlLnBocCwganMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzLCBqcy9wbHVnaW5zLmpzLCBqcy9tYWluLmpzLCBqcy9kcml2ZXItbW9kYWwuanMgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgY29va2llIGTigJlhcHBhcmVpbCwgcmVkaXJlY3Rpb24gZOKAmWFjY8OocywgbGVjdHVyZSBkZXMgcG9pbnRhZ2VzL2VtcGxvecOpcywgbW9kYWxlcyBVSSBuYXRpdmVzLCBhcHBlbHMgQUpBWCB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpLCB6X3B0Z19hcXBfdXRpbGlzYXRldXJzKFVzZXJJRCxOb20sUHJlbm9tLFN0YXR1dCksIHpfcHRnX2FxcF9wb2ludGFnZXMoUG9pbnRhZ2VJRCxVc2VySUQsRGF0ZUhldXJlRW50cmVlLERhdGVIZXVyZVNvcnRpZSkgKi8KLy8gRMOpbWFycmFnZSBvdSByZXByaXNlIGRlIGxhIHNlc3Npb24Kc2Vzc2lvbl9zdGFydCgpOwpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCnJlcXVpcmVfb25jZSAiY29uZmlnLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvYXNzZXRfdmVyc2lvbi5waHAiOwpyZXF1aXJlX2RldmljZV9hdXRob3JpemVkKCRwZG8pOwoKPz4KCgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCjx0aXRsZT5Qb2ludGFnZXMgU2FsYXJpw6lzPC90aXRsZT4KCgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2Jvb3RzdHJhcC5taW4uY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9mb250QXdlc29tZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9oZXJvLXNsaWRlci5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy90b29wbGF0ZS1zdHlsZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9zdHlsZS5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ob21lLWJ1dHRvbnMuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvZHJpdmVyLW1vZGFsLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPC9oZWFkPgoKPGJvZHkgY2xhc3M9InBhZ2UtaW5kZXggdGhlbWUtZGFyayI+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+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvcGx1Z2lucy5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9tYWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2pzL2RyaXZlci1tb2RhbC5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAKICAvLyBuYXZpZ2F0aW9uIGNsaWNrIGFjdGlvbnMgCiAgCiAgJCgnLnNjcm9sbC1saW5rJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpewogICAgCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgCiAgICB2YXIgc2VjdGlvbklEID0gJCh0aGlzKS5hdHRyKCJkYXRhLWlkIik7CiAgICAKICAgIHNjcm9sbFRvSUQoJyMnICsgc2VjdGlvbklELCA3NTApOwogICAgCiAgfSk7CiAgCiAgLy8gc2Nyb2xsIHRvIHRvcCBhY3Rpb24KICAKICAkKCcuc2Nyb2xsLXRvcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAKICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6MH0sICdzbG93Jyk7ICAgICAgICAgCiAgICAKICB9KTsKICAKICAvLyBtb2JpbGUgbmF2IHRvZ2dsZQogIAogICQoJyNuYXYtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAKICAgICQoJyNtYWluLW5hdicpLnRvZ2dsZUNsYXNzKCJvcGVuIik7CiAgICAKICB9KTsKICAKfSk7CgovLyBzY3JvbGwgZnVuY3Rpb24KCmZ1bmN0aW9uIHNjcm9sbFRvSUQoaWQsIHNwZWVkKXsKICAKICB2YXIgb2ZmU2V0ID0gNTA7CiAgCiAgdmFyIHRhcmdldE9mZnNldCA9ICQoaWQpLm9mZnNldCgpLnRvcCAtIG9mZlNldDsKICAKICB2YXIgbWFpbk5hdiA9ICQoJyNtYWluLW5hdicpOwogIAogICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoe3Njcm9sbFRvcDp0YXJnZXRPZmZzZXR9LCBzcGVlZCk7CiAgCiAgaWYgKG1haW5OYXYuaGFzQ2xhc3MoIm9wZW4iKSkgewogICAgCiAgICBtYWluTmF2LmNzcygiaGVpZ2h0IiwgIjFweCIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJjb2xsYXBzZSIpOwogICAgCiAgICBtYWluTmF2LnJlbW92ZUNsYXNzKCJvcGVuIik7CiAgICAKICB9CiAgCn0KCmlmICh0eXBlb2YgY29uc29sZSA9PT0gInVuZGVmaW5lZCIpIHsKICAKICBjb25zb2xlID0gewogICAgCiAgICBsb2c6IGZ1bmN0aW9uKCkgeyB9CiAgICAKICB9OwogIAp9CgoKZnVuY3Rpb24gYWZmaWNoZXJNb2RhbCgpIHsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImFkbWluLnBocCI7Cn0KCgovL2Z1bmN0aW9uIGFmZmljaGVyTW9kYWwocG9pbnRhZ2VJZCkgewogIC8vIEVucmVnaXN0cmV6IGwnSUQgZHUgcG9pbnRhZ2UgcG91ciBsJ3V0aWxpc2VyIHBsdXMgdGFyZAogIC8vd2luZG93LnBvaW50YWdlSWRQb3VyTW9kaWZpY2F0aW9uID0gcG9pbnRhZ2VJZDsKICAvLyBBZmZpY2hleiBsYSBmZW7DqnRyZSBtb2RhbGUKICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwovL30KCmZ1bmN0aW9uIHNhbml0aXplUGluVmFsdWUodmFsKSB7CiAgcmV0dXJuIFN0cmluZyh2YWwgfHwgJycpLnJlcGxhY2UoL1xEL2csICcnKS5zbGljZSgwLCA0KTsKfQoKZnVuY3Rpb24gdXBkYXRlUGluQm94ZXMocGluKSB7CiAgdmFyIGJveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3Bpbk1vZGFsIC5waW4tYm94Jyk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3hlcy5sZW5ndGg7IGkrKykgewogICAgYm94ZXNbaV0udGV4dENvbnRlbnQgPSAoaSA8IHBpbi5sZW5ndGgpID8gJ+KYhScgOiAnJzsKICB9Cn0KCmZ1bmN0aW9uIGZvY3VzUGluSW5wdXQoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCkgcmV0dXJuOwogIHRyeSB7IGlucHV0LmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9Cn0KCmZ1bmN0aW9uIHJlc2V0UGluTW9kYWwoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKGlucHV0KSBpbnB1dC52YWx1ZSA9ICcnOwogIHVwZGF0ZVBpbkJveGVzKCcnKTsKfQoKZnVuY3Rpb24gb3BlblBpbk1vZGFsKCkgewogIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpOwogIHZhciBiZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJhY2tncm91bmQnKTsKICBpZiAoIW1vZGFsIHx8ICFiZykgcmV0dXJuOwoKICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBiZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICByZXNldFBpbk1vZGFsKCk7CgogIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgZm9jdXNQaW5JbnB1dCgpOwogIH0sIDEwKTsKfQoKZnVuY3Rpb24gY2xvc2VQaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKG1vZGFsKSBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGlmIChiZykgYmcuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICByZXNldFBpbk1vZGFsKCk7Cn0KCi8vIEJpbmQgaW5wdXQgb25jZSAoZGlnaXRzIG9ubHkgKyBzeW5jIFVJIGJveGVzKQooZnVuY3Rpb24gYmluZFBpbk9uY2UoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCB8fCBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnKSA9PT0gJzEnKSByZXR1cm47CiAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJywgJzEnKTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgdmFyIGNsZWFuID0gc2FuaXRpemVQaW5WYWx1ZShpbnB1dC52YWx1ZSk7CiAgICBpZiAoaW5wdXQudmFsdWUgIT09IGNsZWFuKSBpbnB1dC52YWx1ZSA9IGNsZWFuOwogICAgdXBkYXRlUGluQm94ZXMoY2xlYW4pOwogIH0pOwogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICB2YXIga2V5ID0gZS5rZXkgfHwgJyc7CiAgICBpZiAoa2V5ID09PSAnRXNjYXBlJykgewogICAgICBjbG9zZVBpbk1vZGFsKCk7CiAgICB9CiAgfSk7Cn0pKCk7CgpmdW5jdGlvbiB2ZXJpZmllclBpbigpIHsKICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogICAgdmFyIHBpbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQgPyBpbnB1dC52YWx1ZSA6ICcnKTsKICAgIGlmIChpbnB1dCAmJiBpbnB1dC52YWx1ZSAhPT0gcGluKSBpbnB1dC52YWx1ZSA9IHBpbjsKICAgIHVwZGF0ZVBpbkJveGVzKHBpbik7CgogICAgaWYgKHBpbi5sZW5ndGggIT09IDQpIHsKICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIsICJlcnJvciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbGVydCgiRW50cmV6IHVuIGNvZGUgUElOIMOgIDQgY2hpZmZyZXMuIik7CiAgICAgICAgfQogICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocGluKSB7CiAgICAgICAgLy8gRW52b2kgZHUgY29kZSBQSU4gw6AgdW4gc2NyaXB0IFBIUCBwb3VyIHbDqXJpZmljYXRpb24KICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zZVRleHQgPT0gIk9LIikgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImFkbWluLnBocCI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXNldFBpbk1vZGFsKCk7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgZm9jdXNQaW5JbnB1dCgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB4aHIub3BlbigiUE9TVCIsICJ2ZXJpZmllcl9waW4ucGhwIiwgdHJ1ZSk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICB4aHIuc2VuZCgicGluPSIgKyBwaW4pOwogICAgfQp9CgovLyAtLS0gTW9kYWwgYWN0aW9ucyBlbXBsb3nDqSAtLS0KdmFyIHNlbGVjdGVkRW1wbG95ZUlkID0gbnVsbDsKdmFyIHNlbGVjdGVkSXNQb2ludGVkID0gMDsKdmFyIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICcnOwoKZnVuY3Rpb24gb3BlbkVtcGxveWVlTW9kYWwoZW1wbG95ZUlkLCBpc1BvaW50ZWQsIGVtcGxveWVQcmVub20pIHsKICBzZWxlY3RlZEVtcGxveWVJZCA9IGVtcGxveWVJZDsKICBzZWxlY3RlZElzUG9pbnRlZCA9IGlzUG9pbnRlZCA/IDEgOiAwOwogIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICh0eXBlb2YgZW1wbG95ZVByZW5vbSA9PT0gJ3N0cmluZycpID8gZW1wbG95ZVByZW5vbSA6ICcnOwoKICB2YXIgcHVuY2hCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVQdW5jaEJ1dHRvbicpOwogIHB1bmNoQnRuLnRleHRDb250ZW50ID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSA/ICdEw6lwYXJ0JyA6ICdBcnJpdsOpZSc7CiAgaWYgKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSB7CiAgICBwdW5jaEJ0bi5jbGFzc0xpc3QuYWRkKCdpcy1kZXBhcnQnKTsKICB9IGVsc2UgewogICAgcHVuY2hCdG4uY2xhc3NMaXN0LnJlbW92ZSgnaXMtZGVwYXJ0Jyk7CiAgfQoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVNb2RhbEJhY2tncm91bmQnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVBY3Rpb25Nb2RhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwp9CgpmdW5jdGlvbiBjbG9zZUVtcGxveWVlTW9kYWwoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlQWN0aW9uTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZU1vZGFsQmFja2dyb3VuZCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgdmFyIHB1bmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlUHVuY2hCdXR0b24nKTsKICBpZiAocHVuY2hCdG4pIHB1bmNoQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWRlcGFydCcpOwogIHNlbGVjdGVkRW1wbG95ZUlkID0gbnVsbDsKICBzZWxlY3RlZElzUG9pbnRlZCA9IDA7CiAgc2VsZWN0ZWRFbXBsb3llUHJlbm9tID0gJyc7Cn0KCmZ1bmN0aW9uIHN1Ym1pdEVtcGxveWVlUHVuY2goKSB7CiAgaWYgKCFzZWxlY3RlZEVtcGxveWVJZCkgcmV0dXJuOwoKICB2YXIgdXJsID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSA/ICdlbnJlZ2lzdHJlbWVudF9kZXBhcnQucGhwJyA6ICdlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCc7CiAgJC5hamF4KHsKICAgIHR5cGU6ICJQT1NUIiwKICAgIHVybDogdXJsLAogICAgZGF0YTogeyBlbXBsb3llOiBzZWxlY3RlZEVtcGxveWVJZCB9LAogICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgdmFyIGZpcnN0bmFtZVBhcnQgPSBzZWxlY3RlZEVtcGxveWVQcmVub20gPyAoIiAiICsgc2VsZWN0ZWRFbXBsb3llUHJlbm9tKSA6ICIiOwogICAgICB2YXIgbXNnID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKQogICAgICAgID8gKCJEw6lwYXJ0IiArIGZpcnN0bmFtZVBhcnQgKyAiIGVucmVnaXN0csOpIikKICAgICAgICA6ICgiQXJyaXbDqWUiICsgZmlyc3RuYW1lUGFydCArICIgZW5yZWdpc3Ryw6llIik7CiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgIH0sCiAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIiwgImVycm9yIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxlcnQoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIik7CiAgICAgIH0KICAgIH0KICB9KTsKfQoKIGZ1bmN0aW9uIGdvVG9FbXBsb3llZURldGFpbHMoKSB7CiAgIGlmICghc2VsZWN0ZWRFbXBsb3llSWQpIHJldHVybjsKICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAicG9pbnRhZ2UucGhwP2VtcGxveWU9IiArIHNlbGVjdGVkRW1wbG95ZUlkICsgIiZ2aWV3PTEiOwogfQoKPC9zY3JpcHQ+Cgo8L2JvZHk+Cgo8L2h0bWw+"
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 21168,
                "sha1": "ca03267a9f8f3c002c32ca51d6491207465e8d06",
                "content_b64": "PD9waHAKLyogZG9jLXByb2plY3QgfCBwb2ludGFnZXMvaW5kZXgucGhwIHwgQWZmaWNoZSBsZSB0YWJsZWF1IGRlIHBvaW50YWdlIGRlcyBzYWxhcmnDqXMgZXQgcHJvdMOoZ2UgbOKAmWFjY8OocyB2aWEgYXV0b3Jpc2F0aW9uIHBlcm1hbmVudGUgcGFyIGFwcGFyZWlsIGF2ZWMgYXNzZXRzIGxvY2F1eCB2ZXJzaW9ubsOpcywgY2hhcmdlIGpRdWVyeSB2aWEgaGVscGVyIHJvYnVzdGUsIHNhbnMgTW9kZXJuaXpyL1Jlc3BvbmQgbmkgQm9vdHN0cmFwIEpTLiB8IEV4cG9zZTogb3BlbkVtcGxveWVlTW9kYWwsIGNsb3NlRW1wbG95ZWVNb2RhbCwgc3VibWl0RW1wbG95ZWVQdW5jaCwgZ29Ub0VtcGxveWVlRGV0YWlscyB8IETDqXBlbmQgZGU6IHBvaW50YWdlcy9jb25maWcucGhwLCBpbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAsIGluY2x1ZGVzL2Fzc2V0X3ZlcnNpb24ucGhwLCBpbmNsdWRlcy9qcXVlcnlfbG9hZGVyLnBocCwgY29ubmV4aW9uLnBocCwgYWRtaW4ucGhwLCBlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCwgZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCwgcG9pbnRhZ2UucGhwLCBqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMsIGpzL3BsdWdpbnMuanMsIGpzL21haW4uanMsIGpzL2RyaXZlci1tb2RhbC5qcyB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCBjb29raWUgZOKAmWFwcGFyZWlsLCByZWRpcmVjdGlvbiBk4oCZYWNjw6hzLCBsZWN0dXJlIGRlcyBwb2ludGFnZXMvZW1wbG95w6lzLCBtb2RhbGVzIFVJIG5hdGl2ZXMsIGFwcGVscyBBSkFYIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoVXNlcklELE5vbSxQcmVub20sU3RhdHV0KSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELFVzZXJJRCxEYXRlSGV1cmVFbnRyZWUsRGF0ZUhldXJlU29ydGllKSAqLwovLyBEw6ltYXJyYWdlIG91IHJlcHJpc2UgZGUgbGEgc2Vzc2lvbgpzZXNzaW9uX3N0YXJ0KCk7CmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwoKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9qcXVlcnlfbG9hZGVyLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7Cgo/PgoKCjwhRE9DVFlQRSBodG1sPgoKPGh0bWw+Cgo8aGVhZD4KCjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgoKPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KCgoKPHRpdGxlPlBvaW50YWdlcyBTYWxhcmnDqXM8L3RpdGxlPgoKCgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImFwcGxlLXRvdWNoLWljb24ucG5nIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAtdGhlbWUubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2ZvbnRBd2Vzb21lLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3N0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2hvbWUtYnV0dG9ucy5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9kcml2ZXItbW9kYWwuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+Cgo8L2hlYWQ+Cgo8Ym9keSBjbGFzcz0icGFnZS1pbmRleCB0aGVtZS1kYXJrIj4KCgoKPGRpdiBpZD0iYWJvdXQiIGNsYXNzPSIiPgoKPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KPGgxPlBvaW50YWdlcyBzYWxhcmnDqXM8L2gxPgo8ZGl2IGNsYXNzPSJsaW5lLWRlYyI+PC9kaXY+CjxjZW50ZXI+Cjxicj4KPGZvbnQgY29sb3I9ImJsYWNrIiBzaXplPSI0IiA+CjxzdHJvbmc+Cjw/cGhwCi8vIFLDqWN1cMOocmUgbGUgZGVybmllciBwb2ludGFnZSBkZSBjaGFxdWUgZW1wbG95w6kgcG91ciBkw6l0ZXJtaW5lciBzJ2lsIGVzdCAicG9pbnTDqSIKJGN1cnJlbnRNb250aCA9IChpbnQpZGF0ZSgnbicpOwokY3VycmVudFllYXIgPSAoaW50KWRhdGUoJ1knKTsKJG5vd1BhcmlzID0gZGF0ZSgnWS1tLWQgSDppOnMnKTsKCiRzdG10ID0gJHBkby0+cHJlcGFyZSgiCiAgU0VMRUNUCiAgICB1LlVzZXJJRCwKICAgIHUuTm9tLAogICAgdS5QcmVub20sCiAgICBwLkRhdGVIZXVyZUVudHJlZSwKICAgIHAuRGF0ZUhldXJlU29ydGllLAogICAgbWguc2Vjb25kc193b3JrZWQsCiAgICBtaC5tYXhfcHVuY2hfc2Vjb25kcwogIEZST00gel9wdGdfYXFwX3V0aWxpc2F0ZXVycyB1CiAgTEVGVCBKT0lOIHpfcHRnX2FxcF9wb2ludGFnZXMgcAogICAgT04gcC5Qb2ludGFnZUlEID0gKAogICAgICBTRUxFQ1QgcDIuUG9pbnRhZ2VJRAogICAgICBGUk9NIHpfcHRnX2FxcF9wb2ludGFnZXMgcDIKICAgICAgV0hFUkUgcDIuVXNlcklEID0gdS5Vc2VySUQKICAgICAgT1JERVIgQlkgcDIuRGF0ZUhldXJlRW50cmVlIERFU0MsIHAyLlBvaW50YWdlSUQgREVTQwogICAgICBMSU1JVCAxCiAgICApCiAgTEVGVCBKT0lOICgKICAgIFNFTEVDVAogICAgICBVc2VySUQsCiAgICAgIFNVTSgKICAgICAgICBUSU1FU1RBTVBESUZGKAogICAgICAgICAgU0VDT05ELAogICAgICAgICAgRGF0ZUhldXJlRW50cmVlLAogICAgICAgICAgQ09BTEVTQ0UoRGF0ZUhldXJlU29ydGllLCA6bm93UGFyaXNTdW0pCiAgICAgICAgKQogICAgICApIEFTIHNlY29uZHNfd29ya2VkLAogICAgICBNQVgoCiAgICAgICAgVElNRVNUQU1QRElGRigKICAgICAgICAgIFNFQ09ORCwKICAgICAgICAgIERhdGVIZXVyZUVudHJlZSwKICAgICAgICAgIENPQUxFU0NFKERhdGVIZXVyZVNvcnRpZSwgOm5vd1BhcmlzTWF4KQogICAgICAgICkKICAgICAgKSBBUyBtYXhfcHVuY2hfc2Vjb25kcwogICAgRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzCiAgICBXSEVSRSBNT05USChEYXRlSGV1cmVFbnRyZWUpID0gOmN1cnJlbnRNb250aAogICAgICBBTkQgWUVBUihEYXRlSGV1cmVFbnRyZWUpID0gOmN1cnJlbnRZZWFyCiAgICBHUk9VUCBCWSBVc2VySUQKICApIG1oIE9OIG1oLlVzZXJJRCA9IHUuVXNlcklECiAgV0hFUkUgdS5TdGF0dXQgPSAnYWN0aWYnCiIpOwokc3RtdC0+ZXhlY3V0ZShbCiAgJzpub3dQYXJpc1N1bScgPT4gJG5vd1BhcmlzLAogICc6bm93UGFyaXNNYXgnID0+ICRub3dQYXJpcywKICAnOmN1cnJlbnRNb250aCcgPT4gJGN1cnJlbnRNb250aCwKICAnOmN1cnJlbnRZZWFyJyA9PiAkY3VycmVudFllYXIsCl0pOwokZW1wbG95ZXNBY3RpZnMgPSAkc3RtdC0+ZmV0Y2hBbGwoUERPOjpGRVRDSF9BU1NPQyk7CgplY2hvICc8dGFibGUgY2xhc3M9ImVtcGxveWVlLWdyaWQiPic7CiRjb21wdGV1ciA9IDA7Cgpmb3JlYWNoICgkZW1wbG95ZXNBY3RpZnMgYXMgJGVtcGxveWUpIHsKICAvLyBMb2dpcXVlIHNpbWlsYWlyZSBwb3VyIGFmZmljaGVyIGxlcyBlbXBsb3nDqXMKICBpZiAoJGNvbXB0ZXVyICUgMiA9PSAwKSB7CiAgICBlY2hvICc8dHI+JzsKICB9CiAgJG5vbVJhdyA9IGlzc2V0KCRlbXBsb3llWydOb20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydOb20nXSA6ICcnOwogICRwcmVub21SYXcgPSBpc3NldCgkZW1wbG95ZVsnUHJlbm9tJ10pID8gKHN0cmluZykkZW1wbG95ZVsnUHJlbm9tJ10gOiAnJzsKICAkbm9tID0gbWJfc3RydG91cHBlcigkbm9tUmF3LCAnVVRGLTgnKTsKICAkcHJlbm9tID0gbWJfc3RydG91cHBlcigkcHJlbm9tUmF3LCAnVVRGLTgnKTsKICAkcHJlbm9tSnMgPSBodG1sc3BlY2lhbGNoYXJzKAogICAganNvbl9lbmNvZGUoJHByZW5vbVJhdywgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSB8IEpTT05fSEVYX1RBRyB8IEpTT05fSEVYX0FNUCB8IEpTT05fSEVYX0FQT1MgfCBKU09OX0hFWF9RVU9UKSwKICAgIEVOVF9RVU9URVMsCiAgICAnVVRGLTgnCiAgKTsKCiAgLy8gVW4gZW1wbG95w6kgZXN0ICJwb2ludMOpIiBzJ2lsIGEgdW4gZGVybmllciBwb2ludGFnZSBkb250IERhdGVIZXVyZVNvcnRpZSBlc3QgTlVMTAogIC8vIChldCBxdSdpbCBleGlzdGUgYmllbiB1bmUgRGF0ZUhldXJlRW50cmVlKS4KICAkaXNQb2ludGVkID0gKCFlbXB0eSgkZW1wbG95ZVsnRGF0ZUhldXJlRW50cmVlJ10pICYmICRlbXBsb3llWydEYXRlSGV1cmVTb3J0aWUnXSA9PT0gbnVsbCk7CgogIC8vIETDqXRlY3Rpb24gInBvaW50YWdlID4gOEgiIDoKICAvLyAtIHZpYSBsYSBkdXLDqWUgbWF4IGRlcyBwb2ludGFnZXMgZHUgbW9pcyAobWF4X3B1bmNoX3NlY29uZHMpLAogIC8vIC0gZXQgdmlhIGxlIGRlcm5pZXIgcG9pbnRhZ2UgKGVuIGNvdXJzIG91IHRlcm1pbsOpKSwgbcOqbWUgcydpbCBlc3QgaG9ycyBtb2lzIChjYXMgcmFyZSwgbWFpcyByb2J1c3RlKS4KICAkbWF4UHVuY2hTZWNvbmRzID0gaXNzZXQoJGVtcGxveWVbJ21heF9wdW5jaF9zZWNvbmRzJ10pID8gKGludCkkZW1wbG95ZVsnbWF4X3B1bmNoX3NlY29uZHMnXSA6IDA7CiAgJGxhc3RQdW5jaFNlY29uZHMgPSAwOwogIGlmICghZW1wdHkoJGVtcGxveWVbJ0RhdGVIZXVyZUVudHJlZSddKSkgewogICAgJHN0YXJ0VHMgPSBzdHJ0b3RpbWUoJGVtcGxveWVbJ0RhdGVIZXVyZUVudHJlZSddKTsKICAgICRlbmRUcyA9ICgkZW1wbG95ZVsnRGF0ZUhldXJlU29ydGllJ10gPT09IG51bGwgfHwgJGVtcGxveWVbJ0RhdGVIZXVyZVNvcnRpZSddID09PSAnJykKICAgICAgPyBzdHJ0b3RpbWUoJG5vd1BhcmlzKQogICAgICA6IHN0cnRvdGltZSgkZW1wbG95ZVsnRGF0ZUhldXJlU29ydGllJ10pOwogICAgaWYgKCRzdGFydFRzICE9PSBmYWxzZSAmJiAkZW5kVHMgIT09IGZhbHNlICYmICRlbmRUcyA+PSAkc3RhcnRUcykgewogICAgICAkbGFzdFB1bmNoU2Vjb25kcyA9IChpbnQpKCRlbmRUcyAtICRzdGFydFRzKTsKICAgIH0KICB9CiAgJGhhc1B1bmNoT3ZlcjhoID0gKCRtYXhQdW5jaFNlY29uZHMgPj0gMjg4MDApIHx8ICgkbGFzdFB1bmNoU2Vjb25kcyA+PSAyODgwMCk7CgogICRidG5DbGFzcyA9ICRpc1BvaW50ZWQgPyAnZW1wbG95ZWUtYnRuIHN0YXR1cy1wb2ludGVkJyA6ICdlbXBsb3llZS1idG4gc3RhdHVzLWRlcG9pbnRlZCc7CiAgaWYgKCRoYXNQdW5jaE92ZXI4aCkgewogICAgJGJ0bkNsYXNzIC49ICcgc3RhdHVzLXByb2JsZW0nOwogIH0KICAvLyBJY8O0bmUgdW5pcXVlbWVudCBxdWFuZCBwb2ludMOpCiAgJGljb25IdG1sID0gJyc7CiAgaWYgKCRpc1BvaW50ZWQpIHsKICAgICRpY29uSHRtbCA9ICc8aSBjbGFzcz0iZmEgZmEtY2hlY2stY2lyY2xlIHN0YXR1cy1pY29uIiBhcmlhLWhpZGRlbj0idHJ1ZSIgdGl0bGU9IlBvaW50w6kiPjwvaT4nOwogIH0KCiAgJHNlY29uZHNXb3JrZWQgPSBpc3NldCgkZW1wbG95ZVsnc2Vjb25kc193b3JrZWQnXSkgPyAoZmxvYXQpJGVtcGxveWVbJ3NlY29uZHNfd29ya2VkJ10gOiAwLjA7CiAgJG1vbnRoSG91cnMgPSAkc2Vjb25kc1dvcmtlZCA+IDAgPyAoJHNlY29uZHNXb3JrZWQgLyAzNjAwKSA6IDAuMDsKICAkbW9udGhIb3Vyc1RleHQgPSBudW1iZXJfZm9ybWF0KCRtb250aEhvdXJzLCAyLCAnLicsICcnKSAuICdIJzsKICAkbW9udGhIb3Vyc0h0bWwgPSAnPHNwYW4gY2xhc3M9Im1vbnRoLWhvdXJzIj4nIC4gaHRtbHNwZWNpYWxjaGFycygkbW9udGhIb3Vyc1RleHQsIEVOVF9RVU9URVMsICdVVEYtOCcpIC4gJzwvc3Bhbj4nOwoKICBlY2hvICc8dGQgY2xhc3M9ImVtcGxveWVlLWdyaWQtY2VsbCI+JwogICAgIC4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iJyAuICRidG5DbGFzcyAuICciIG9uY2xpY2s9Im9wZW5FbXBsb3llZU1vZGFsKCcgLiAoaW50KSRlbXBsb3llWydVc2VySUQnXSAuICcsICcgLiAoJGlzUG9pbnRlZCA/ICcxJyA6ICcwJykgLiAnLCAnIC4gJHByZW5vbUpzIC4gJykiPicKICAgICAuICRpY29uSHRtbAogICAgIC4gJzxzcGFuIGNsYXNzPSJlbXBsb3llZS1uYW1lIj4nIC4gaHRtbHNwZWNpYWxjaGFycygkbm9tLCBFTlRfUVVPVEVTLCAnVVRGLTgnKSAuICc8L3NwYW4+JwogICAgIC4gJzxzcGFuIGNsYXNzPSJlbXBsb3llZS1maXJzdG5hbWUiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRwcmVub20sIEVOVF9RVU9URVMsICdVVEYtOCcpIC4gJzwvc3Bhbj4nCiAgICAgLiAkbW9udGhIb3Vyc0h0bWwKICAgICAuICc8L2J1dHRvbj4nCiAgICAgLiAnPC90ZD4nOwoKICBpZiAoJGNvbXB0ZXVyICUgMiA9PSAxKSB7CiAgICBlY2hvICc8L3RyPic7CiAgfQogICRjb21wdGV1cisrOwp9CiAKIGVjaG8gJzwvdGFibGU+JzsKID8+CiAKIDxkaXYgY2xhc3M9ImRyaXZlci1waG9uZS1hY3Rpb25zIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbjoxOHB4IDAgNnB4OyI+CiAgIDxidXR0b24KICAgICB0eXBlPSJidXR0b24iCiAgICAgaWQ9ImRyaXZlclBob25lQnV0dG9uIgogICAgIGNsYXNzPSJkcml2ZXItcGhvbmUtdHJpZ2dlciIKICAgICBvbmNsaWNrPSJvcGVuRHJpdmVyUGhvbmVNb2RhbCgpIgogICA+CiAgICAgRW52b3llciBTTVMgbGl2cmV1cgogICA8L2J1dHRvbj4KIDwvZGl2PgoKIDwvc3Ryb25nPgogPC9mb250PgogPC9jZW50ZXI+CiA8L2Rpdj4KIDwvZGl2PgoKCjxicj48YnI+Cgo8cD48YSBocmVmPSJhZG1pbi5waHAiPkdlc3Rpb24gZW1wbG95w6lzPC9hPjwvcD48YnI+CgoKCgoKPC9kaXY+CgoKCgo8IS0tIE1vZGFsIFBJTiAoZGVzaWduIHJlZmFpdCkgLS0+CjxkaXYgaWQ9Im1vZGFsQmFja2dyb3VuZCIgb25jbGljaz0iY2xvc2VQaW5Nb2RhbCgpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CjxkaXYgaWQ9InBpbk1vZGFsIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFiZWxsZWRieT0icGluTW9kYWxUaXRsZSI+CiAgPGZvcm0gaWQ9InBpbkZvcm0iIG9uc3VibWl0PSJ2ZXJpZmllclBpbigpOyByZXR1cm4gZmFsc2U7Ij4KICAgIDxoMiBpZD0icGluTW9kYWxUaXRsZSIgY2xhc3M9InBpbi1tb2RhbC10aXRsZSI+Q29kZSBQSU48L2gyPgogICAgPHAgY2xhc3M9InBpbi1tb2RhbC1zdWJ0aXRsZSI+U2Fpc2lzc2V6IHZvdHJlIGNvZGUgw6AgNCBjaGlmZnJlczwvcD4KCiAgICA8ZGl2IGNsYXNzPSJwaW4taW5wdXQtd3JhcHBlciIgb25jbGljaz0iZm9jdXNQaW5JbnB1dCgpIj4KICAgICAgPGxhYmVsIGZvcj0icGluSW5wdXQiIGNsYXNzPSJzci1vbmx5Ij5Db2RlIFBJTiAoNCBjaGlmZnJlcyk8L2xhYmVsPgogICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94ZXMiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMCI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGluLWJveCIgZGF0YS1pZHg9IjEiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBpbi1ib3giIGRhdGEtaWR4PSIyIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwaW4tYm94IiBkYXRhLWlkeD0iMyI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8aW5wdXQKICAgICAgICB0eXBlPSJ0ZWwiCiAgICAgICAgaWQ9InBpbklucHV0IgogICAgICAgIGNsYXNzPSJwaW4taGlkZGVuLWlucHV0IgogICAgICAgIGlucHV0bW9kZT0ibnVtZXJpYyIKICAgICAgICBwYXR0ZXJuPSJbMC05XSoiCiAgICAgICAgbWF4bGVuZ3RoPSI0IgogICAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIgogICAgICAgIGF1dG9jYXBpdGFsaXplPSJvZmYiCiAgICAgICAgYXV0b2NvcnJlY3Q9Im9mZiIKICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSIKICAgICAgICB0aXRsZT0iU2V1bGVtZW50IGRlcyBjaGlmZnJlcy4iCiAgICAgICAgdmFsdWU9IiIKICAgICAgPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0icGluLW1vZGFsLWFjdGlvbnMiPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InBpbi1tb2RhbC1idG4gY2FuY2VsIiBvbmNsaWNrPSJjbG9zZVBpbk1vZGFsKCkiPkFubnVsZXI8L2J1dHRvbj4KICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJwaW4tbW9kYWwtYnRuIGNvbmZpcm0iPlZhbGlkZXI8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZm9ybT4KPC9kaXY+Cgo8IS0tIE1vZGFsIEFjdGlvbnMgRW1wbG95w6kgKEFycml2w6llL0TDqXBhcnQgKyBWb2lyIGTDqXRhaWwpIC0tPgo8ZGl2IGlkPSJlbXBsb3llZU1vZGFsQmFja2dyb3VuZCIgb25jbGljaz0iY2xvc2VFbXBsb3llZU1vZGFsKCkiPjwvZGl2Pgo8ZGl2IGlkPSJlbXBsb3llZUFjdGlvbk1vZGFsIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFiZWxsZWRieT0iZW1wbG95ZWVBY3Rpb25UaXRsZSI+CiAgPGgyIGlkPSJlbXBsb3llZUFjdGlvblRpdGxlIj5BY3Rpb25zPC9oMj4KICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImVtcGxveWVlUHVuY2hCdXR0b24iIGNsYXNzPSJlbXBsb3llZS1tb2RhbC1idG4gcHVuY2giIG9uY2xpY2s9InN1Ym1pdEVtcGxveWVlUHVuY2goKSI+PC9idXR0b24+CiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJlbXBsb3llZS1tb2RhbC1idG4gZGV0YWlscyIgb25jbGljaz0iZ29Ub0VtcGxveWVlRGV0YWlscygpIj5Wb2lyIGTDqXRhaWwgZGVzIGhldXJlczwvYnV0dG9uPgo8L2Rpdj4KCjwhLS0gTW9kYWwgTGl2cmV1ciAoc8OpbGVjdGlvbiArIGVudm9pIFNNUykgLS0+CjxkaXYgaWQ9ImRyaXZlck1vZGFsQmFja2dyb3VuZCIgY2xhc3M9ImRyaXZlci1tb2RhbC1iYWNrZHJvcCIgb25jbGljaz0iY2xvc2VEcml2ZXJQaG9uZU1vZGFsKCkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KPGRpdiBpZD0iZHJpdmVyUGhvbmVNb2RhbCIgY2xhc3M9ImRyaXZlci1tb2RhbCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9ImRyaXZlclBob25lTW9kYWxUaXRsZSIgYXJpYS1oaWRkZW49InRydWUiPgogIDxmb3JtIGlkPSJkcml2ZXJQaG9uZUZvcm0iIG9uc3VibWl0PSJzdWJtaXREcml2ZXJQaG9uZSgpOyByZXR1cm4gZmFsc2U7Ij4KICAgIDxkaXYgY2xhc3M9ImRyaXZlci1tb2RhbC1oZWFkZXIiPgogICAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtaGVhZGVyLXRleHQiPgogICAgICAgIDxoMiBpZD0iZHJpdmVyUGhvbmVNb2RhbFRpdGxlIiBjbGFzcz0iZHJpdmVyLW1vZGFsLXRpdGxlIj5FbnZveWVyIFNNUyBsaXZyZXVyPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZHJpdmVyLW1vZGFsLXN1YnRpdGxlIj5Tw6lsZWN0aW9ubmV6IHVuIGxpdnJldXIgcG91ciBsZSBwb2ludCBkZSB2ZW50ZSBkZSBs4oCZYXBwYXJlaWw8L3A+CiAgICAgIDwvZGl2PgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRyaXZlci1tb2RhbC1jbG9zZSIgb25jbGljaz0iY2xvc2VEcml2ZXJQaG9uZU1vZGFsKCkiIGFyaWEtbGFiZWw9IkZlcm1lciI+w5c8L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1maWVsZCI+CiAgICAgIDxsYWJlbCBmb3I9ImRyaXZlclNlbGVjdCIgY2xhc3M9ImRyaXZlci1sYWJlbCI+TGl2cmV1cjwvbGFiZWw+CiAgICAgIDxzZWxlY3QgaWQ9ImRyaXZlclNlbGVjdCIgY2xhc3M9ImRyaXZlci1zZWxlY3QiIHJlcXVpcmVkPgogICAgICAgIDxvcHRpb24gdmFsdWU9IiI+Q2hhcmdlbWVudCBkZXMgbGl2cmV1cnPigKY8L29wdGlvbj4KICAgICAgPC9zZWxlY3Q+CiAgICAgIDxzbWFsbCBpZD0iZHJpdmVyU2VsZWN0ZWRQaG9uZUhlbHAiIGNsYXNzPSJkcml2ZXItaGVscCI+U8OpbGVjdGlvbm5leiB1biBsaXZyZXVyIHBvdXIgYWZmaWNoZXIgc29uIG51bcOpcm8uPC9zbWFsbD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1maWVsZCI+CiAgICAgIDxsYWJlbCBmb3I9ImRyaXZlclBvaW50VmVudGUiIGNsYXNzPSJkcml2ZXItbGFiZWwiPlBvaW50IGRlIHZlbnRlPC9sYWJlbD4KICAgICAgPHNlbGVjdCBpZD0iZHJpdmVyUG9pbnRWZW50ZSIgY2xhc3M9ImRyaXZlci1zZWxlY3QiIGRpc2FibGVkPgogICAgICAgIDxvcHRpb24gdmFsdWU9ImxhbmNvbiI+TGFuw6dvbjwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9InBlbGlzc2FubmUiPlDDqWxpc3Nhbm5lPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWFjdGlvbnMgZHJpdmVyLW1vZGFsLWFjdGlvbnMtc3BsaXQiPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRyaXZlci1tb2RhbC1idG4gc2Vjb25kYXJ5IiBvbmNsaWNrPSJvcGVuRHJpdmVyTWFuYWdlTW9kYWwoKSI+R8OpcmVyIGxlcyBsaXZyZXVyczwvYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWFjdGlvbnMiPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRyaXZlci1tb2RhbC1idG4gY2FuY2VsIiBvbmNsaWNrPSJjbG9zZURyaXZlclBob25lTW9kYWwoKSI+QW5udWxlcjwvYnV0dG9uPgogICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImRyaXZlci1tb2RhbC1idG4gY29uZmlybSI+RW52b3llciBTTVM8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZm9ybT4KPC9kaXY+Cgo8IS0tIE1vZGFsIGdlc3Rpb24gbGl2cmV1cnMgLS0+CjxkaXYgaWQ9ImRyaXZlck1hbmFnZU1vZGFsQmFja2dyb3VuZCIgY2xhc3M9ImRyaXZlci1tb2RhbC1iYWNrZHJvcCIgb25jbGljaz0iY2xvc2VEcml2ZXJNYW5hZ2VNb2RhbCgpIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CjxkaXYgaWQ9ImRyaXZlck1hbmFnZU1vZGFsIiBjbGFzcz0iZHJpdmVyLW1vZGFsIGRyaXZlci1tYW5hZ2UtbW9kYWwiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSIgYXJpYS1sYWJlbGxlZGJ5PSJkcml2ZXJNYW5hZ2VNb2RhbFRpdGxlIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWhlYWRlciI+CiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtaGVhZGVyLXRleHQiPgogICAgICA8aDIgaWQ9ImRyaXZlck1hbmFnZU1vZGFsVGl0bGUiIGNsYXNzPSJkcml2ZXItbW9kYWwtdGl0bGUiPkfDqXJlciBsZXMgbGl2cmV1cnM8L2gyPgogICAgICA8cCBjbGFzcz0iZHJpdmVyLW1vZGFsLXN1YnRpdGxlIj5Bam91dCwgbW9kaWZpY2F0aW9uIGV0IHN1cHByZXNzaW9uIHBvdXIgbGUgcG9pbnQgZGUgdmVudGUgY291cmFudDwvcD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJkcml2ZXItbW9kYWwtY2xvc2UiIG9uY2xpY2s9ImNsb3NlRHJpdmVyTWFuYWdlTW9kYWwoKSIgYXJpYS1sYWJlbD0iRmVybWVyIj7DlzwvYnV0dG9uPgogIDwvZGl2PgoKICA8Zm9ybSBpZD0iZHJpdmVyTWFuYWdlRm9ybSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZHJpdmVyTWFuYWdlTW9kZSIgdmFsdWU9ImNyZWF0ZSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZHJpdmVyRWRpdE9yaWdpbmFsUGhvbmUiIHZhbHVlPSIiPgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1maWVsZCI+CiAgICAgIDxsYWJlbCBmb3I9ImRyaXZlck1hbmFnZVNlbGVjdCIgY2xhc3M9ImRyaXZlci1sYWJlbCI+TGl2cmV1ciBleGlzdGFudDwvbGFiZWw+CiAgICAgIDxzZWxlY3QgaWQ9ImRyaXZlck1hbmFnZVNlbGVjdCIgY2xhc3M9ImRyaXZlci1zZWxlY3QiPgogICAgICAgIDxvcHRpb24gdmFsdWU9IiI+Tm91dmVhdSBsaXZyZXVyPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLWZpZWxkIj4KICAgICAgPGxhYmVsIGZvcj0iZHJpdmVyTWFuYWdlTmFtZSIgY2xhc3M9ImRyaXZlci1sYWJlbCI+Tm9tIGFmZmljaMOpPC9sYWJlbD4KICAgICAgPGlucHV0CiAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICBpZD0iZHJpdmVyTWFuYWdlTmFtZSIKICAgICAgICBjbGFzcz0iZHJpdmVyLWlucHV0IgogICAgICAgIG1heGxlbmd0aD0iMTIwIgogICAgICAgIHBsYWNlaG9sZGVyPSJFeDogS2FyaW0iCiAgICAgICAgYXV0b2NvbXBsZXRlPSJvZmYiCiAgICAgID4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImRyaXZlci1maWVsZCI+CiAgICAgIDxsYWJlbCBmb3I9ImRyaXZlck1hbmFnZVBob25lIiBjbGFzcz0iZHJpdmVyLWxhYmVsIj5Uw6lsw6lwaG9uZTwvbGFiZWw+CiAgICAgIDxpbnB1dAogICAgICAgIHR5cGU9InRlbCIKICAgICAgICBpZD0iZHJpdmVyTWFuYWdlUGhvbmUiCiAgICAgICAgY2xhc3M9ImRyaXZlci1pbnB1dCIKICAgICAgICBpbnB1dG1vZGU9Im51bWVyaWMiCiAgICAgICAgcGF0dGVybj0iWzAtOV0qIgogICAgICAgIG1heGxlbmd0aD0iMTYiCiAgICAgICAgcGxhY2Vob2xkZXI9IkV4OiAwNjE4NTI5Mzc1IgogICAgICAgIGF1dG9jb21wbGV0ZT0ib2ZmIgogICAgICAgIGF1dG9jYXBpdGFsaXplPSJvZmYiCiAgICAgICAgYXV0b2NvcnJlY3Q9Im9mZiIKICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSIKICAgICAgPgogICAgICA8c21hbGwgY2xhc3M9ImRyaXZlci1oZWxwIj5Gb3JtYXQgYWNjZXB0w6kgOiAwNjE4NTI5Mzc1LCAzMzYxODUyOTM3NSBvdSAwMDMzNjE4NTI5Mzc1Ljwvc21hbGw+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkcml2ZXItbW9kYWwtYWN0aW9ucyI+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iZHJpdmVyLW1vZGFsLWJ0biBkYW5nZXIiIG9uY2xpY2s9ImRlbGV0ZVNlbGVjdGVkRHJpdmVyKCkiPlN1cHByaW1lcjwvYnV0dG9uPgogICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImRyaXZlci1tb2RhbC1idG4gY29uZmlybSI+RW5yZWdpc3RyZXI8L2J1dHRvbj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZHJpdmVyLW1vZGFsLWFjdGlvbnMiPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImRyaXZlci1tb2RhbC1idG4gY2FuY2VsIiBvbmNsaWNrPSJjbG9zZURyaXZlck1hbmFnZU1vZGFsKCkiPkZlcm1lcjwvYnV0dG9uPgogICAgPC9kaXY+CiAgPC9mb3JtPgo8L2Rpdj4KCjw/cGhwIHJlbmRlcl9qcXVlcnlfc2NyaXB0X3RhZ3MoKTsgPz4KPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvcGx1Z2lucy5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9tYWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2pzL2RyaXZlci1tb2RhbC5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgoKCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAKICAvLyBuYXZpZ2F0aW9uIGNsaWNrIGFjdGlvbnMgCiAgCiAgJCgnLnNjcm9sbC1saW5rJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpewogICAgCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgCiAgICB2YXIgc2VjdGlvbklEID0gJCh0aGlzKS5hdHRyKCJkYXRhLWlkIik7CiAgICAKICAgIHNjcm9sbFRvSUQoJyMnICsgc2VjdGlvbklELCA3NTApOwogICAgCiAgfSk7CiAgCiAgLy8gc2Nyb2xsIHRvIHRvcCBhY3Rpb24KICAKICAkKCcuc2Nyb2xsLXRvcCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAKICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6MH0sICdzbG93Jyk7ICAgICAgICAgCiAgICAKICB9KTsKICAKICAvLyBtb2JpbGUgbmF2IHRvZ2dsZQogIAogICQoJyNuYXYtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAKICAgICQoJyNtYWluLW5hdicpLnRvZ2dsZUNsYXNzKCJvcGVuIik7CiAgICAKICB9KTsKICAKfSk7CgovLyBzY3JvbGwgZnVuY3Rpb24KCmZ1bmN0aW9uIHNjcm9sbFRvSUQoaWQsIHNwZWVkKXsKICAKICB2YXIgb2ZmU2V0ID0gNTA7CiAgCiAgdmFyIHRhcmdldE9mZnNldCA9ICQoaWQpLm9mZnNldCgpLnRvcCAtIG9mZlNldDsKICAKICB2YXIgbWFpbk5hdiA9ICQoJyNtYWluLW5hdicpOwogIAogICQoJ2h0bWwsYm9keScpLmFuaW1hdGUoe3Njcm9sbFRvcDp0YXJnZXRPZmZzZXR9LCBzcGVlZCk7CiAgCiAgaWYgKG1haW5OYXYuaGFzQ2xhc3MoIm9wZW4iKSkgewogICAgCiAgICBtYWluTmF2LmNzcygiaGVpZ2h0IiwgIjFweCIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJjb2xsYXBzZSIpOwogICAgCiAgICBtYWluTmF2LnJlbW92ZUNsYXNzKCJvcGVuIik7CiAgICAKICB9CiAgCn0KCmlmICh0eXBlb2YgY29uc29sZSA9PT0gInVuZGVmaW5lZCIpIHsKICAKICBjb25zb2xlID0gewogICAgCiAgICBsb2c6IGZ1bmN0aW9uKCkgeyB9CiAgICAKICB9OwogIAp9CgoKZnVuY3Rpb24gYWZmaWNoZXJNb2RhbCgpIHsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImFkbWluLnBocCI7Cn0KCgovL2Z1bmN0aW9uIGFmZmljaGVyTW9kYWwocG9pbnRhZ2VJZCkgewogIC8vIEVucmVnaXN0cmV6IGwnSUQgZHUgcG9pbnRhZ2UgcG91ciBsJ3V0aWxpc2VyIHBsdXMgdGFyZAogIC8vd2luZG93LnBvaW50YWdlSWRQb3VyTW9kaWZpY2F0aW9uID0gcG9pbnRhZ2VJZDsKICAvLyBBZmZpY2hleiBsYSBmZW7DqnRyZSBtb2RhbGUKICAvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwovL30KCmZ1bmN0aW9uIHNhbml0aXplUGluVmFsdWUodmFsKSB7CiAgcmV0dXJuIFN0cmluZyh2YWwgfHwgJycpLnJlcGxhY2UoL1xEL2csICcnKS5zbGljZSgwLCA0KTsKfQoKZnVuY3Rpb24gdXBkYXRlUGluQm94ZXMocGluKSB7CiAgdmFyIGJveGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI3Bpbk1vZGFsIC5waW4tYm94Jyk7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3hlcy5sZW5ndGg7IGkrKykgewogICAgYm94ZXNbaV0udGV4dENvbnRlbnQgPSAoaSA8IHBpbi5sZW5ndGgpID8gJ+KYhScgOiAnJzsKICB9Cn0KCmZ1bmN0aW9uIGZvY3VzUGluSW5wdXQoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCkgcmV0dXJuOwogIHRyeSB7IGlucHV0LmZvY3VzKCk7IH0gY2F0Y2ggKGUpIHt9Cn0KCmZ1bmN0aW9uIHJlc2V0UGluTW9kYWwoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKGlucHV0KSBpbnB1dC52YWx1ZSA9ICcnOwogIHVwZGF0ZVBpbkJveGVzKCcnKTsKfQoKZnVuY3Rpb24gb3BlblBpbk1vZGFsKCkgewogIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpOwogIHZhciBiZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJhY2tncm91bmQnKTsKICBpZiAoIW1vZGFsIHx8ICFiZykgcmV0dXJuOwoKICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBiZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICByZXNldFBpbk1vZGFsKCk7CgogIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgZm9jdXNQaW5JbnB1dCgpOwogIH0sIDEwKTsKfQoKZnVuY3Rpb24gY2xvc2VQaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKG1vZGFsKSBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGlmIChiZykgYmcuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICByZXNldFBpbk1vZGFsKCk7Cn0KCi8vIEJpbmQgaW5wdXQgb25jZSAoZGlnaXRzIG9ubHkgKyBzeW5jIFVJIGJveGVzKQooZnVuY3Rpb24gYmluZFBpbk9uY2UoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCB8fCBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnKSA9PT0gJzEnKSByZXR1cm47CiAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJywgJzEnKTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgdmFyIGNsZWFuID0gc2FuaXRpemVQaW5WYWx1ZShpbnB1dC52YWx1ZSk7CiAgICBpZiAoaW5wdXQudmFsdWUgIT09IGNsZWFuKSBpbnB1dC52YWx1ZSA9IGNsZWFuOwogICAgdXBkYXRlUGluQm94ZXMoY2xlYW4pOwogIH0pOwogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICB2YXIga2V5ID0gZS5rZXkgfHwgJyc7CiAgICBpZiAoa2V5ID09PSAnRXNjYXBlJykgewogICAgICBjbG9zZVBpbk1vZGFsKCk7CiAgICB9CiAgfSk7Cn0pKCk7CgpmdW5jdGlvbiB2ZXJpZmllclBpbigpIHsKICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogICAgdmFyIHBpbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQgPyBpbnB1dC52YWx1ZSA6ICcnKTsKICAgIGlmIChpbnB1dCAmJiBpbnB1dC52YWx1ZSAhPT0gcGluKSBpbnB1dC52YWx1ZSA9IHBpbjsKICAgIHVwZGF0ZVBpbkJveGVzKHBpbik7CgogICAgaWYgKHBpbi5sZW5ndGggIT09IDQpIHsKICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIsICJlcnJvciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbGVydCgiRW50cmV6IHVuIGNvZGUgUElOIMOgIDQgY2hpZmZyZXMuIik7CiAgICAgICAgfQogICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocGluKSB7CiAgICAgICAgLy8gRW52b2kgZHUgY29kZSBQSU4gw6AgdW4gc2NyaXB0IFBIUCBwb3VyIHbDqXJpZmljYXRpb24KICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zZVRleHQgPT0gIk9LIikgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImFkbWluLnBocCI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiQ29kZSBQSU4gaW5jb3JyZWN0LiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXNldFBpbk1vZGFsKCk7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgZm9jdXNQaW5JbnB1dCgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB4aHIub3BlbigiUE9TVCIsICJ2ZXJpZmllcl9waW4ucGhwIiwgdHJ1ZSk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKICAgICAgICB4aHIuc2VuZCgicGluPSIgKyBwaW4pOwogICAgfQp9CgovLyAtLS0gTW9kYWwgYWN0aW9ucyBlbXBsb3nDqSAtLS0KdmFyIHNlbGVjdGVkRW1wbG95ZUlkID0gbnVsbDsKdmFyIHNlbGVjdGVkSXNQb2ludGVkID0gMDsKdmFyIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICcnOwoKZnVuY3Rpb24gb3BlbkVtcGxveWVlTW9kYWwoZW1wbG95ZUlkLCBpc1BvaW50ZWQsIGVtcGxveWVQcmVub20pIHsKICBzZWxlY3RlZEVtcGxveWVJZCA9IGVtcGxveWVJZDsKICBzZWxlY3RlZElzUG9pbnRlZCA9IGlzUG9pbnRlZCA/IDEgOiAwOwogIHNlbGVjdGVkRW1wbG95ZVByZW5vbSA9ICh0eXBlb2YgZW1wbG95ZVByZW5vbSA9PT0gJ3N0cmluZycpID8gZW1wbG95ZVByZW5vbSA6ICcnOwoKICB2YXIgcHVuY2hCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVQdW5jaEJ1dHRvbicpOwogIHB1bmNoQnRuLnRleHRDb250ZW50ID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSA/ICdEw6lwYXJ0JyA6ICdBcnJpdsOpZSc7CiAgaWYgKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSB7CiAgICBwdW5jaEJ0bi5jbGFzc0xpc3QuYWRkKCdpcy1kZXBhcnQnKTsKICB9IGVsc2UgewogICAgcHVuY2hCdG4uY2xhc3NMaXN0LnJlbW92ZSgnaXMtZGVwYXJ0Jyk7CiAgfQoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVNb2RhbEJhY2tncm91bmQnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wbG95ZWVBY3Rpb25Nb2RhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwp9CgpmdW5jdGlvbiBjbG9zZUVtcGxveWVlTW9kYWwoKSB7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlQWN0aW9uTW9kYWwnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXBsb3llZU1vZGFsQmFja2dyb3VuZCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgdmFyIHB1bmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcGxveWVlUHVuY2hCdXR0b24nKTsKICBpZiAocHVuY2hCdG4pIHB1bmNoQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWRlcGFydCcpOwogIHNlbGVjdGVkRW1wbG95ZUlkID0gbnVsbDsKICBzZWxlY3RlZElzUG9pbnRlZCA9IDA7CiAgc2VsZWN0ZWRFbXBsb3llUHJlbm9tID0gJyc7Cn0KCmZ1bmN0aW9uIHN1Ym1pdEVtcGxveWVlUHVuY2goKSB7CiAgaWYgKCFzZWxlY3RlZEVtcGxveWVJZCkgcmV0dXJuOwoKICB2YXIgdXJsID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKSA/ICdlbnJlZ2lzdHJlbWVudF9kZXBhcnQucGhwJyA6ICdlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCc7CiAgJC5hamF4KHsKICAgIHR5cGU6ICJQT1NUIiwKICAgIHVybDogdXJsLAogICAgZGF0YTogeyBlbXBsb3llOiBzZWxlY3RlZEVtcGxveWVJZCB9LAogICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgdmFyIGZpcnN0bmFtZVBhcnQgPSBzZWxlY3RlZEVtcGxveWVQcmVub20gPyAoIiAiICsgc2VsZWN0ZWRFbXBsb3llUHJlbm9tKSA6ICIiOwogICAgICB2YXIgbXNnID0gKHNlbGVjdGVkSXNQb2ludGVkID09PSAxKQogICAgICAgID8gKCJEw6lwYXJ0IiArIGZpcnN0bmFtZVBhcnQgKyAiIGVucmVnaXN0csOpIikKICAgICAgICA6ICgiQXJyaXbDqWUiICsgZmlyc3RuYW1lUGFydCArICIgZW5yZWdpc3Ryw6llIik7CiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgIH0sCiAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIiwgImVycm9yIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxlcnQoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIik7CiAgICAgIH0KICAgIH0KICB9KTsKfQoKIGZ1bmN0aW9uIGdvVG9FbXBsb3llZURldGFpbHMoKSB7CiAgIGlmICghc2VsZWN0ZWRFbXBsb3llSWQpIHJldHVybjsKICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAicG9pbnRhZ2UucGhwP2VtcGxveWU9IiArIHNlbGVjdGVkRW1wbG95ZUlkICsgIiZ2aWV3PTEiOwogfQoKPC9zY3JpcHQ+Cgo8L2JvZHk+Cgo8L2h0bWw+"
            }
        },
        {
            "path": "pointages/modif_pointage.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 6260,
                "sha1": "7079f445a548d5fc0c6bece1b753c0074bf03540",
                "content_b64": "PD9waHAKc2Vzc2lvbl9zdGFydCgpOwovKiBkb2MtcHJvamVjdCB8IHBvaW50YWdlcy9tb2RpZl9wb2ludGFnZS5waHAgfCBHw6hyZSBs4oCZYWNjw6hzIHPDqWN1cmlzw6kgcGFyIGFwcGFyZWlsIGV0IGzigJlhZmZpY2hhZ2UgZHUgZm9ybXVsYWlyZSBkZSBtb2RpZmljYXRpb24gZOKAmXVuIHBvaW50YWdlIGV4aXN0YW50IGF2ZWMgYXNzZXRzIGxvY2F1eCB2ZXJzaW9ubsOpcyBzYW5zIE1vZGVybml6ci9SZXNwb25kIG5pIEJvb3RzdHJhcCBKUy4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBpbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCwgdHJhaXRlbWVudF9tb2RpZl9wb2ludGFnZS5waHAsIGluZGV4LnBocCwgY29ubmV4aW9uLnBocCwgcG9pbnRhZ2UucGhwLCBqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMsIGpzL3BsdWdpbnMuanMsIGpzL21haW4uanMgfCBJbXBhY3RlOiBzZXNzaW9uIFBIUCwgY29va2llIGTigJlhcHBhcmVpbCwgYWZmaWNoYWdlIFVJLCByZWRpcmVjdGlvbiBk4oCZYWNjw6hzLCB0b2FzdHMgaW50ZXJuZXMgfCBUYWJsZXM6IHBvc19kZXZpY2VfYXV0aG9yaXphdGlvbnModG9rZW5faGFzaCwgYXV0aG9yaXplZF9hdCwgbGFzdF91c2VkX2F0KSwgel9wdGdfYXFwX3BvaW50YWdlcyhQb2ludGFnZUlELCBVc2VySUQsIERhdGVIZXVyZUVudHJlZSwgRGF0ZUhldXJlU29ydGllKSwgel9wdGdfYXFwX3V0aWxpc2F0ZXVycyhVc2VySUQsIE5vbSwgUHJlbm9tKSAqLwoKcmVxdWlyZV9vbmNlICJjb25maWcucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2RldmljZV9hdXRoLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCI7CnJlcXVpcmVfZGV2aWNlX2F1dGhvcml6ZWQoJHBkbyk7CgpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvUGFyaXMnKTsKCiRwb2ludGFnZSA9IG51bGw7CiRlbXBsb3llID0gbnVsbDsKJHVzZXJJZCA9IG51bGw7CgpmdW5jdGlvbiBmb3JtYXREYXRldGltZUxvY2FsKCR2YWx1ZSkgewogICAgJHJhdyA9IGlzX3N0cmluZygkdmFsdWUpID8gdHJpbSgkdmFsdWUpIDogJyc7CiAgICBpZiAoJHJhdyA9PT0gJycpIHJldHVybiAnJzsKICAgIHRyeSB7CiAgICAgICAgJGR0ID0gbmV3IERhdGVUaW1lKCRyYXcpOwogICAgICAgICRkdC0+c2V0VGltZXpvbmUobmV3IERhdGVUaW1lWm9uZSgnRXVyb3BlL1BhcmlzJykpOwogICAgICAgIHJldHVybiAkZHQtPmZvcm1hdCgnWS1tLWRcVEg6aScpOwogICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9CgppZiAoaXNzZXQoJF9HRVRbJ3BvaW50YWdlSWQnXSkpIHsKICAgICRwb2ludGFnZUlkID0gKGludCkkX0dFVFsncG9pbnRhZ2VJZCddOwoKICAgIC8vIFLDqWN1cMOpcmF0aW9uIGRlcyBpbmZvcm1hdGlvbnMgZGUgcG9pbnRhZ2UKICAgICRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFBvaW50YWdlSUQgPSA6cG9pbnRhZ2VJZCIpOwogICAgJHN0bXQtPmV4ZWN1dGUoWyc6cG9pbnRhZ2VJZCcgPT4gJHBvaW50YWdlSWRdKTsKICAgICRwb2ludGFnZSA9ICRzdG10LT5mZXRjaChQRE86OkZFVENIX0FTU09DKTsKCiAgICBpZiAoJHBvaW50YWdlICYmIGlzc2V0KCRwb2ludGFnZVsnVXNlcklEJ10pKSB7CiAgICAgICAgJHVzZXJJZCA9IChpbnQpJHBvaW50YWdlWydVc2VySUQnXTsKICAgICAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCBOb20sIFByZW5vbSBGUk9NIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMgV0hFUkUgVXNlcklEID0gOnVzZXJJRCBMSU1JVCAxIik7CiAgICAgICAgJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkdXNlcklkXSk7CiAgICAgICAgJGVtcGxveWUgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CiAgICB9Cn0KCiRlbnRyZWVWYWx1ZSA9ICRwb2ludGFnZSA/IGZvcm1hdERhdGV0aW1lTG9jYWwoJHBvaW50YWdlWydEYXRlSGV1cmVFbnRyZWUnXSA/PyAnJykgOiAnJzsKJHNvcnRpZVZhbHVlID0gJHBvaW50YWdlID8gZm9ybWF0RGF0ZXRpbWVMb2NhbCgkcG9pbnRhZ2VbJ0RhdGVIZXVyZVNvcnRpZSddID8/ICcnKSA6ICcnOwoKJGVtcGxveWVlRnVsbE5hbWUgPSAnJzsKaWYgKGlzX2FycmF5KCRlbXBsb3llKSkgewogICAgJG5vbSA9IGlzc2V0KCRlbXBsb3llWydOb20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydOb20nXSA6ICcnOwogICAgJHByZW5vbSA9IGlzc2V0KCRlbXBsb3llWydQcmVub20nXSkgPyAoc3RyaW5nKSRlbXBsb3llWydQcmVub20nXSA6ICcnOwogICAgJGVtcGxveWVlRnVsbE5hbWUgPSB0cmltKCRub20gLiAnICcgLiAkcHJlbm9tKTsKfQo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+Cgo8dGl0bGU+TW9kaWZpY2F0aW9uIHBvaW50YWdlPC90aXRsZT4KCjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgoKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KCjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iYXBwbGUtdG91Y2gtaWNvbi5wbmciPgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvZm9udEF3ZXNvbWUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvaGVyby1zbGlkZXIuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvdG9vcGxhdGUtc3R5bGUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3Mvc3R5bGUuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvbW9kaWYtcG9pbnRhZ2UuY3NzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+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+Cgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvcGx1Z2lucy5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9tYWluLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+Cgo8L2JvZHk+CjwvaHRtbD4="
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 6268,
                "sha1": "6ea2ca99dab748ed8c14606593caed491b2ddd9c",
                "content_b64": "PD9waHAKc2Vzc2lvbl9zdGFydCgpOwovKiBkb2MtcHJvamVjdCB8IHBvaW50YWdlcy9tb2RpZl9wb2ludGFnZS5waHAgfCBHw6hyZSBs4oCZYWNjw6hzIHPDqWN1cmlzw6kgcGFyIGFwcGFyZWlsIGV0IGzigJlhZmZpY2hhZ2UgZHUgZm9ybXVsYWlyZSBkZSBtb2RpZmljYXRpb24gZOKAmXVuIHBvaW50YWdlIGV4aXN0YW50IGF2ZWMgYXNzZXRzIHZlcnNpb25uw6lzIGV0IGhlbHBlciBqUXVlcnkgcm9idXN0ZSBzYW5zIE1vZGVybml6ci9SZXNwb25kIG5pIEJvb3RzdHJhcCBKUy4gfCBFeHBvc2U6IGF1Y3VuIHwgRMOpcGVuZCBkZTogY29uZmlnLnBocCwgaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwLCBpbmNsdWRlcy9hc3NldF92ZXJzaW9uLnBocCwgaW5jbHVkZXMvanF1ZXJ5X2xvYWRlci5waHAsIHRyYWl0ZW1lbnRfbW9kaWZfcG9pbnRhZ2UucGhwLCBpbmRleC5waHAsIGNvbm5leGlvbi5waHAsIHBvaW50YWdlLnBocCwganMvdmVuZG9yL2pxdWVyeS0xLjExLjIubWluLmpzLCBqcy9wbHVnaW5zLmpzLCBqcy9tYWluLmpzIHwgSW1wYWN0ZTogc2Vzc2lvbiBQSFAsIGNvb2tpZSBk4oCZYXBwYXJlaWwsIGFmZmljaGFnZSBVSSwgcmVkaXJlY3Rpb24gZOKAmWFjY8OocywgdG9hc3RzIGludGVybmVzIHwgVGFibGVzOiBwb3NfZGV2aWNlX2F1dGhvcml6YXRpb25zKHRva2VuX2hhc2gsIGF1dGhvcml6ZWRfYXQsIGxhc3RfdXNlZF9hdCksIHpfcHRnX2FxcF9wb2ludGFnZXMoUG9pbnRhZ2VJRCwgVXNlcklELCBEYXRlSGV1cmVFbnRyZWUsIERhdGVIZXVyZVNvcnRpZSksIHpfcHRnX2FxcF91dGlsaXNhdGV1cnMoVXNlcklELCBOb20sIFByZW5vbSkgKi8KCnJlcXVpcmVfb25jZSAiY29uZmlnLnBocCI7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gIi9pbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvYXNzZXRfdmVyc2lvbi5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvanF1ZXJ5X2xvYWRlci5waHAiOwpyZXF1aXJlX2RldmljZV9hdXRob3JpemVkKCRwZG8pOwoKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnRXVyb3BlL1BhcmlzJyk7CgokcG9pbnRhZ2UgPSBudWxsOwokZW1wbG95ZSA9IG51bGw7CiR1c2VySWQgPSBudWxsOwoKZnVuY3Rpb24gZm9ybWF0RGF0ZXRpbWVMb2NhbCgkdmFsdWUpIHsKICAgICRyYXcgPSBpc19zdHJpbmcoJHZhbHVlKSA/IHRyaW0oJHZhbHVlKSA6ICcnOwogICAgaWYgKCRyYXcgPT09ICcnKSByZXR1cm4gJyc7CiAgICB0cnkgewogICAgICAgICRkdCA9IG5ldyBEYXRlVGltZSgkcmF3KTsKICAgICAgICAkZHQtPnNldFRpbWV6b25lKG5ldyBEYXRlVGltZVpvbmUoJ0V1cm9wZS9QYXJpcycpKTsKICAgICAgICByZXR1cm4gJGR0LT5mb3JtYXQoJ1ktbS1kXFRIOmknKTsKICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgIHJldHVybiAnJzsKICAgIH0KfQoKaWYgKGlzc2V0KCRfR0VUWydwb2ludGFnZUlkJ10pKSB7CiAgICAkcG9pbnRhZ2VJZCA9IChpbnQpJF9HRVRbJ3BvaW50YWdlSWQnXTsKCiAgICAvLyBSw6ljdXDDqXJhdGlvbiBkZXMgaW5mb3JtYXRpb25zIGRlIHBvaW50YWdlCiAgICAkc3RtdCA9ICRwZG8tPnByZXBhcmUoIlNFTEVDVCAqIEZST00gel9wdGdfYXFwX3BvaW50YWdlcyBXSEVSRSBQb2ludGFnZUlEID0gOnBvaW50YWdlSWQiKTsKICAgICRzdG10LT5leGVjdXRlKFsnOnBvaW50YWdlSWQnID0+ICRwb2ludGFnZUlkXSk7CiAgICAkcG9pbnRhZ2UgPSAkc3RtdC0+ZmV0Y2goUERPOjpGRVRDSF9BU1NPQyk7CgogICAgaWYgKCRwb2ludGFnZSAmJiBpc3NldCgkcG9pbnRhZ2VbJ1VzZXJJRCddKSkgewogICAgICAgICR1c2VySWQgPSAoaW50KSRwb2ludGFnZVsnVXNlcklEJ107CiAgICAgICAgJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgTm9tLCBQcmVub20gRlJPTSB6X3B0Z19hcXBfdXRpbGlzYXRldXJzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQgTElNSVQgMSIpOwogICAgICAgICRzdG10LT5leGVjdXRlKFsnOnVzZXJJRCcgPT4gJHVzZXJJZF0pOwogICAgICAgICRlbXBsb3llID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwogICAgfQp9CgokZW50cmVlVmFsdWUgPSAkcG9pbnRhZ2UgPyBmb3JtYXREYXRldGltZUxvY2FsKCRwb2ludGFnZVsnRGF0ZUhldXJlRW50cmVlJ10gPz8gJycpIDogJyc7CiRzb3J0aWVWYWx1ZSA9ICRwb2ludGFnZSA/IGZvcm1hdERhdGV0aW1lTG9jYWwoJHBvaW50YWdlWydEYXRlSGV1cmVTb3J0aWUnXSA/PyAnJykgOiAnJzsKCiRlbXBsb3llZUZ1bGxOYW1lID0gJyc7CmlmIChpc19hcnJheSgkZW1wbG95ZSkpIHsKICAgICRub20gPSBpc3NldCgkZW1wbG95ZVsnTm9tJ10pID8gKHN0cmluZykkZW1wbG95ZVsnTm9tJ10gOiAnJzsKICAgICRwcmVub20gPSBpc3NldCgkZW1wbG95ZVsnUHJlbm9tJ10pID8gKHN0cmluZykkZW1wbG95ZVsnUHJlbm9tJ10gOiAnJzsKICAgICRlbXBsb3llZUZ1bGxOYW1lID0gdHJpbSgkbm9tIC4gJyAnIC4gJHByZW5vbSk7Cn0KPz4KPCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCjxoZWFkPgoKPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Cgo8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgoKPHRpdGxlPk1vZGlmaWNhdGlvbiBwb2ludGFnZTwvdGl0bGU+Cgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImFwcGxlLXRvdWNoLWljb24ucG5nIj4KCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAtdGhlbWUubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2ZvbnRBd2Vzb21lLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3N0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL21vZGlmLXBvaW50YWdlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPC9oZWFkPgoKPGJvZHkgY2xhc3M9InBhZ2UtbW9kaWYtcG9pbnRhZ2UgdGhlbWUtZGFyayI+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+CiAgICA8P3BocCBlbmRpZjsgPz4KICA8L2Rpdj4KPC9tYWluPgoKPD9waHAgcmVuZGVyX2pxdWVyeV9zY3JpcHRfdGFncygpOyA/Pgo8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9wbHVnaW5zLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2pzL21haW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KCjwvYm9keT4KPC9odG1sPg=="
            }
        },
        {
            "path": "pointages/pointage.php",
            "kind": "file",
            "before": {
                "exists": true,
                "kind": "file",
                "size": 21480,
                "sha1": "8494f3c5d174b38d0f4ff29871209011ca5b26fd",
                "content_b64": "PD9waHAKCi8qIGRvYy1wcm9qZWN0IHwgcG9pbnRhZ2VzL3BvaW50YWdlLnBocCB8IEFmZmljaGUsIHPDqWN1cmlzZSBldCBwaWxvdGUgbOKAmWludGVyZmFjZSBkZSBwb2ludGFnZSBhdmVjIGF1dG9yaXNhdGlvbiBwZXJtYW5lbnRlIHBhciBhcHBhcmVpbCBldCBhc3NldHMgbG9jYXV4IHZlcnNpb25uw6lzIHNhbnMgTW9kZXJuaXpyL1Jlc3BvbmQgbmkgQm9vdHN0cmFwIEpTLiB8IEV4cG9zZTogYXVjdW4gfCBEw6lwZW5kIGRlOiBjb25maWcucGhwLCBpbmNsdWRlcy9kZXZpY2VfYXV0aC5waHAsIGluY2x1ZGVzL2Fzc2V0X3ZlcnNpb24ucGhwLCBjb25uZXhpb24ucGhwLCBlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCwgZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCwgc29ydGlyX2VtcGxveWUucGhwLCBtb2RpZl9wb2ludGFnZS5waHAsIGpzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcywganMvcGx1Z2lucy5qcywganMvbWFpbi5qcyB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCBjb29raWUgZOKAmWFwcGFyZWlsLCByZWRpcmVjdGlvbnMsIGFmZmljaGFnZSBVSSwgQUpBWCwgcG9pbnRhZ2VzIGVuIGJhc2UsIHRvYXN0cyBpbnRlcm5lcyB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpLCB6X3B0Z19hcXBfdXRpbGlzYXRldXJzKFVzZXJJRCwgTm9tLCBQcmVub20pLCB6X3B0Z19hcXBfcG9pbnRhZ2VzKFBvaW50YWdlSUQsIFVzZXJJRCwgRGF0ZUhldXJlRW50cmVlLCBEYXRlSGV1cmVTb3J0aWUpICovCgoKLy8gRMOpbWFycmFnZSBvdSByZXByaXNlIGRlIGxhIHNlc3Npb24Kc2Vzc2lvbl9zdGFydCgpOwpyZXF1aXJlX29uY2UgImNvbmZpZy5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2Fzc2V0X3ZlcnNpb24ucGhwIjsKcmVxdWlyZV9kZXZpY2VfYXV0aG9yaXplZCgkcGRvKTsKCmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwoKLy8gUsOpY3Vww6lyYXRpb24gZGUgbCdJRCBkZSBsJ2VtcGxvecOpCiRlbXBsb3llSWQgPSBpc3NldCgkX0dFVFsnZW1wbG95ZSddKSA/IGludHZhbCgkX0dFVFsnZW1wbG95ZSddKSA6IG51bGw7CiR2aWV3T25seSA9IChpc3NldCgkX0dFVFsndmlldyddKSAmJiAkX0dFVFsndmlldyddID09PSAnMScpOwoKLy8gUsOpY3Vww6lyYXRpb24gZGVzIGluZm9ybWF0aW9ucyBkZSBsJ2VtcGxvecOpIGRlcHVpcyBsYSBCREQKJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgTm9tLCBQcmVub20gRlJPTSB6X3B0Z19hcXBfdXRpbGlzYXRldXJzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQiKTsKJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkXSk7CiRlbXBsb3llID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwoKLy8gUsOpY3Vww6lyYXRpb24gZHUgZGVybmllciBwb2ludGFnZSBkZSBsJ2VtcGxvecOpCiRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQgT1JERVIgQlkgRGF0ZUhldXJlRW50cmVlIERFU0MsIFBvaW50YWdlSUQgREVTQyBMSU1JVCAxIik7CiRzdG10LT5leGVjdXRlKFsnOnVzZXJJRCcgPT4gJGVtcGxveWVJZF0pOwokbGFzdFBvaW50YWdlID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwoKJGlzV29ya2luZyA9ICRsYXN0UG9pbnRhZ2UgJiYgJGxhc3RQb2ludGFnZVsnRGF0ZUhldXJlU29ydGllJ10gPT09IG51bGw7Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCgoKPHRpdGxlPlBvaW50YWdlcyBzYWxhcmnDqXM8L3RpdGxlPgoKPCEtLQoKCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKCgpodHRwOi8vd3d3LnRvb3BsYXRlLmNvbS92aWV3LzIwODktbWV0ZW9yCgoKCi0tPgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAtdGhlbWUubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2ZvbnRBd2Vzb21lLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3N0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPC9oZWFkPgoKCgo8Ym9keSBjbGFzcz0icGFnZS1wb2ludGFnZSB0aGVtZS1kYXJrIj4KCgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0icGFnZS1zZWN0aW9uIj4KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KPGRpdiBjbGFzcz0icm93Ij4KPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KPGgxPlBvaW50YWdlcyA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoKCRlbXBsb3llWydOb20nXSA/PyAnJykgLiAiICIgLiAoJGVtcGxveWVbJ1ByZW5vbSddID8/ICcnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+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+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy92ZW5kb3IvanF1ZXJ5LTEuMTEuMi5taW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KICAgICAgICAKICAgICAgICA8c2NyaXB0IHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdqcy9wbHVnaW5zLmpzJyksIEVOVF9RVU9URVMsICdVVEYtOCcpOyA/PiI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvbWFpbi5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAoKCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKICAgICAgICB2YXIgZW1wbG95ZWVGaXJzdE5hbWUgPSA8P3BocCBlY2hvIGpzb25fZW5jb2RlKCgkZW1wbG95ZSAmJiBpc3NldCgkZW1wbG95ZVsnUHJlbm9tJ10pKSA/IChzdHJpbmcpJGVtcGxveWVbJ1ByZW5vbSddIDogJycsIEpTT05fVU5FU0NBUEVEX1VOSUNPREUgfCBKU09OX0hFWF9UQUcgfCBKU09OX0hFWF9BTVAgfCBKU09OX0hFWF9BUE9TIHwgSlNPTl9IRVhfUVVPVCk7ID8+OwogICAgICAgIGZ1bmN0aW9uIGJ1aWxkUHVuY2hUb2FzdChhY3Rpb24pIHsgdmFyIHAgPSBlbXBsb3llZUZpcnN0TmFtZSA/ICgiICIgKyBlbXBsb3llZUZpcnN0TmFtZSkgOiAiIjsgcmV0dXJuIChhY3Rpb24gPT09ICJkZXBhcnQiKSA/ICgiRMOpcGFydCIgKyBwICsgIiBlbnJlZ2lzdHLDqSIpIDogKCJBcnJpdsOpZSIgKyBwICsgIiBlbnJlZ2lzdHLDqWUiKTsgfQoKICAgICAgICAkKCIjYXJyaXZhbEJ1dHRvbiIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBsZXQgZW1wbG95ZSA9ICQodGhpcykuZGF0YSgnZW1wbG95ZScpOwogICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgICAgICAgICAgdXJsOiAiZW5yZWdpc3RyZW1lbnRfYXJyaXZlZS5waHAiLAogICAgICAgICAgICAgICAgZGF0YToge2VtcGxveWU6IGVtcGxveWV9LAogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gYnVpbGRQdW5jaFRvYXN0KCJhcnJpdmVlIik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiaW5kZXgucGhwP3RvYXN0PSIgKyBlbmNvZGVVUklDb21wb25lbnQobXNnKSArICImdG9hc3RUeXBlPXN1Y2Nlc3MiOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIiwgImVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgJCgiI2RlcGFydHVyZUJ1dHRvbiIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBsZXQgZW1wbG95ZSA9ICQodGhpcykuZGF0YSgnZW1wbG95ZScpOwogICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgdHlwZTogIlBPU1QiLAogICAgICAgICAgICAgICAgdXJsOiAiZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7ZW1wbG95ZTogZW1wbG95ZX0sCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBtc2cgPSBidWlsZFB1bmNoVG9hc3QoImRlcGFydCIpOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiRXJyZXVyIGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBwb2ludGFnZS4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIAogICAgICAgIHZhciBhY3Rpb25Db250ZXh0ID0gIiI7IC8vIFZhcmlhYmxlIGdsb2JhbGUgcG91ciBzdG9ja2VyIGxlIGNvbnRleHRlIGRlIGwnYWN0aW9uCgpmdW5jdGlvbiBzYW5pdGl6ZVBpblZhbHVlKHZhbCkgewogIHJldHVybiBTdHJpbmcodmFsIHx8ICcnKS5yZXBsYWNlKC9cRC9nLCAnJykuc2xpY2UoMCwgNCk7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVBpbkJveGVzKHBpbikgewogIHZhciBib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNwaW5Nb2RhbCAucGluLWJveCcpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgYm94ZXMubGVuZ3RoOyBpKyspIHsKICAgIGJveGVzW2ldLnRleHRDb250ZW50ID0gKGkgPCBwaW4ubGVuZ3RoKSA/ICfimIUnIDogJyc7CiAgfQp9CgpmdW5jdGlvbiBmb2N1c1BpbklucHV0KCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmICghaW5wdXQpIHJldHVybjsKICB0cnkgeyBpbnB1dC5mb2N1cygpOyB9IGNhdGNoIChlKSB7fQp9CgpmdW5jdGlvbiByZXNldFBpbk1vZGFsKCkgewogIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogIGlmIChpbnB1dCkgaW5wdXQudmFsdWUgPSAnJzsKICB1cGRhdGVQaW5Cb3hlcygnJyk7Cn0KCmZ1bmN0aW9uIG9wZW5QaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKCFtb2RhbCB8fCAhYmcpIHJldHVybjsKICBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBiZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICByZXNldFBpbk1vZGFsKCk7CiAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZvY3VzUGluSW5wdXQoKTsgfSwgMTApOwp9CgpmdW5jdGlvbiBjbG9zZVBpbk1vZGFsKCkgewogIHZhciBtb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5Nb2RhbCcpOwogIHZhciBiZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbEJhY2tncm91bmQnKTsKICBpZiAobW9kYWwpIG1vZGFsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgaWYgKGJnKSBiZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHJlc2V0UGluTW9kYWwoKTsKfQoKLy8gQmluZCBpbnB1dCBvbmNlIChkaWdpdHMgb25seSArIHN5bmMgVUkgYm94ZXMpCihmdW5jdGlvbiBiaW5kUGluT25jZSgpIHsKICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICBpZiAoIWlucHV0IHx8IGlucHV0LmdldEF0dHJpYnV0ZSgnZGF0YS1ib3VuZCcpID09PSAnMScpIHJldHVybjsKICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnLCAnMScpOwogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7CiAgICB2YXIgY2xlYW4gPSBzYW5pdGl6ZVBpblZhbHVlKGlucHV0LnZhbHVlKTsKICAgIGlmIChpbnB1dC52YWx1ZSAhPT0gY2xlYW4pIGlucHV0LnZhbHVlID0gY2xlYW47CiAgICB1cGRhdGVQaW5Cb3hlcyhjbGVhbik7CiAgfSk7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgIHZhciBrZXkgPSBlLmtleSB8fCAnJzsKICAgIGlmIChrZXkgPT09ICdFc2NhcGUnKSB7CiAgICAgIGNsb3NlUGluTW9kYWwoKTsKICAgIH0KICB9KTsKfSkoKTsKCmZ1bmN0aW9uIGFmZmljaGVyTW9kYWwoZWxlbWVudCkgewogICAgdmFyIHBvaW50YWdlSWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1wb2ludGFnZS1pZCcpOwogICAgd2luZG93LnBvaW50YWdlSWRQb3VyTW9kaWZpY2F0aW9uID0gcG9pbnRhZ2VJZDsKICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIm1vZGlmX3BvaW50YWdlLnBocD9wb2ludGFnZUlkPSIgKyBlbmNvZGVVUklDb21wb25lbnQocG9pbnRhZ2VJZCk7Cn0KCmZ1bmN0aW9uIHZlcmlmaWVyUGluKCkgewogICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgICB2YXIgcGluID0gc2FuaXRpemVQaW5WYWx1ZShpbnB1dCA/IGlucHV0LnZhbHVlIDogJycpOwogICAgaWYgKGlucHV0ICYmIGlucHV0LnZhbHVlICE9PSBwaW4pIGlucHV0LnZhbHVlID0gcGluOwogICAgdXBkYXRlUGluQm94ZXMocGluKTsKCiAgICBpZiAocGluLmxlbmd0aCAhPT0gNCkgewogICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiRW50cmV6IHVuIGNvZGUgUElOIMOgIDQgY2hpZmZyZXMuIiwgImVycm9yIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFsZXJ0KCJFbnRyZXogdW4gY29kZSBQSU4gw6AgNCBjaGlmZnJlcy4iKTsKICAgICAgICB9CiAgICAgICAgdHJ5IHsgZm9jdXNQaW5JbnB1dCgpOyB9IGNhdGNoIChlKSB7fQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChwaW4pIHsKICAgICAgICAvLyBFbnZvaSBkdSBjb2RlIFBJTiDDoCB1biBzY3JpcHQgUEhQIHBvdXIgdsOpcmlmaWNhdGlvbgogICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLnN0YXR1cyA9PSAyMDApIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlVGV4dCA9PSAiT0siKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRXjDqWN1dGVyIGwnYWN0aW9uIGVuIGZvbmN0aW9uIGR1IGNvbnRleHRlCiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkNvbnRleHQgPT09ICJtb2RpZmljYXRpb25Qb2ludGFnZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAibW9kaWZfcG9pbnRhZ2UucGhwP3BvaW50YWdlSWQ9IiArIHdpbmRvdy5wb2ludGFnZUlkUG91ck1vZGlmaWNhdGlvbjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbkNvbnRleHQgPT09ICJzb3J0aWVFbXBsb3llIikgewogICAgICAgICAgICAgICAgICAgICAgICBzb3J0aXJFbXBsb3llKHdpbmRvdy5wb2ludGFnZUlkUG91clNvcnRpZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkNvZGUgUElOIGluY29ycmVjdC4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkNvZGUgUElOIGluY29ycmVjdC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmVzZXRQaW5Nb2RhbCgpOwogICAgICAgICAgICAgICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLm9wZW4oIlBPU1QiLCAidmVyaWZpZXJfcGluLnBocCIsIHRydWUpOwogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgeGhyLnNlbmQoInBpbj0iICsgcGluKTsKICAgIH0KfQoKZnVuY3Rpb24gcHJvbXB0RXhpdFBpbigpIHsKICAgIHdpbmRvdy5wb2ludGFnZUlkUG91clNvcnRpZSA9IDw/cGhwIGVjaG8gJGVtcGxveWVJZDsgPz47CiAgICBzb3J0aXJFbXBsb3llKHdpbmRvdy5wb2ludGFnZUlkUG91clNvcnRpZSk7Cn0KCmZ1bmN0aW9uIHNvcnRpckVtcGxveWUoZW1wbG95ZUlkKSB7CiAgICAkLmFqYXgoewogICAgICAgIHR5cGU6ICJQT1NUIiwKICAgICAgICB1cmw6ICJzb3J0aXJfZW1wbG95ZS5waHAiLCAvLyBTY3JpcHQgUEhQIHBvdXIgc29ydGlyIGwnZW1wbG95w6kKICAgICAgICBkYXRhOiB7ZW1wbG95ZTogZW1wbG95ZUlkfSwKICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICB2YXIgbXNnID0gIlN0YXR1dCBkZSBsJ2VtcGxvecOpIG1pcyDDoCBqb3VyLiI7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgICAgICB9LAogICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiRXJyZXVyIGxvcnMgZGUgbGEgbWlzZSDDoCBqb3VyIGR1IHN0YXR1dCBlbXBsb3nDqS4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhbGVydCgiRXJyZXVyIGxvcnMgZGUgbGEgbWlzZSDDoCBqb3VyIGR1IHN0YXR1dCBlbXBsb3nDqS4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwp9CgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIAogICAgICAgICAgICA8L2h0bWw+"
            },
            "after": {
                "exists": true,
                "kind": "file",
                "size": 21490,
                "sha1": "67e4b87401d8dec1d518246a384779b0a47b673f",
                "content_b64": "PD9waHAKCi8qIGRvYy1wcm9qZWN0IHwgcG9pbnRhZ2VzL3BvaW50YWdlLnBocCB8IEFmZmljaGUsIHPDqWN1cmlzZSBldCBwaWxvdGUgbOKAmWludGVyZmFjZSBkZSBwb2ludGFnZSBhdmVjIGF1dG9yaXNhdGlvbiBwZXJtYW5lbnRlIHBhciBhcHBhcmVpbCBldCBhc3NldHMgdmVyc2lvbm7DqXMgYXZlYyBoZWxwZXIgalF1ZXJ5IHJvYnVzdGUgc2FucyBNb2Rlcm5penIvUmVzcG9uZCBuaSBCb290c3RyYXAgSlMuIHwgRXhwb3NlOiBhdWN1biB8IETDqXBlbmQgZGU6IGNvbmZpZy5waHAsIGluY2x1ZGVzL2RldmljZV9hdXRoLnBocCwgaW5jbHVkZXMvYXNzZXRfdmVyc2lvbi5waHAsIGluY2x1ZGVzL2pxdWVyeV9sb2FkZXIucGhwLCBjb25uZXhpb24ucGhwLCBlbnJlZ2lzdHJlbWVudF9hcnJpdmVlLnBocCwgZW5yZWdpc3RyZW1lbnRfZGVwYXJ0LnBocCwgc29ydGlyX2VtcGxveWUucGhwLCBtb2RpZl9wb2ludGFnZS5waHAsIGpzL3ZlbmRvci9qcXVlcnktMS4xMS4yLm1pbi5qcywganMvcGx1Z2lucy5qcywganMvbWFpbi5qcyB8IEltcGFjdGU6IHNlc3Npb24gUEhQLCBjb29raWUgZOKAmWFwcGFyZWlsLCByZWRpcmVjdGlvbnMsIGFmZmljaGFnZSBVSSwgQUpBWCwgcG9pbnRhZ2VzIGVuIGJhc2UsIHRvYXN0cyBpbnRlcm5lcyB8IFRhYmxlczogcG9zX2RldmljZV9hdXRob3JpemF0aW9ucyh0b2tlbl9oYXNoLCBhdXRob3JpemVkX2F0LCBsYXN0X3VzZWRfYXQpLCB6X3B0Z19hcXBfdXRpbGlzYXRldXJzKFVzZXJJRCwgTm9tLCBQcmVub20pLCB6X3B0Z19hcXBfcG9pbnRhZ2VzKFBvaW50YWdlSUQsIFVzZXJJRCwgRGF0ZUhldXJlRW50cmVlLCBEYXRlSGV1cmVTb3J0aWUpICovCgoKLy8gRMOpbWFycmFnZSBvdSByZXByaXNlIGRlIGxhIHNlc3Npb24Kc2Vzc2lvbl9zdGFydCgpOwpyZXF1aXJlX29uY2UgImNvbmZpZy5waHAiOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICIvaW5jbHVkZXMvZGV2aWNlX2F1dGgucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2Fzc2V0X3ZlcnNpb24ucGhwIjsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAiL2luY2x1ZGVzL2pxdWVyeV9sb2FkZXIucGhwIjsKcmVxdWlyZV9kZXZpY2VfYXV0aG9yaXplZCgkcGRvKTsKCmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoJ0V1cm9wZS9QYXJpcycpOwoKLy8gUsOpY3Vww6lyYXRpb24gZGUgbCdJRCBkZSBsJ2VtcGxvecOpCiRlbXBsb3llSWQgPSBpc3NldCgkX0dFVFsnZW1wbG95ZSddKSA/IGludHZhbCgkX0dFVFsnZW1wbG95ZSddKSA6IG51bGw7CiR2aWV3T25seSA9IChpc3NldCgkX0dFVFsndmlldyddKSAmJiAkX0dFVFsndmlldyddID09PSAnMScpOwoKLy8gUsOpY3Vww6lyYXRpb24gZGVzIGluZm9ybWF0aW9ucyBkZSBsJ2VtcGxvecOpIGRlcHVpcyBsYSBCREQKJHN0bXQgPSAkcGRvLT5wcmVwYXJlKCJTRUxFQ1QgTm9tLCBQcmVub20gRlJPTSB6X3B0Z19hcXBfdXRpbGlzYXRldXJzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQiKTsKJHN0bXQtPmV4ZWN1dGUoWyc6dXNlcklEJyA9PiAkZW1wbG95ZUlkXSk7CiRlbXBsb3llID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwoKLy8gUsOpY3Vww6lyYXRpb24gZHUgZGVybmllciBwb2ludGFnZSBkZSBsJ2VtcGxvecOpCiRzdG10ID0gJHBkby0+cHJlcGFyZSgiU0VMRUNUICogRlJPTSB6X3B0Z19hcXBfcG9pbnRhZ2VzIFdIRVJFIFVzZXJJRCA9IDp1c2VySUQgT1JERVIgQlkgRGF0ZUhldXJlRW50cmVlIERFU0MsIFBvaW50YWdlSUQgREVTQyBMSU1JVCAxIik7CiRzdG10LT5leGVjdXRlKFsnOnVzZXJJRCcgPT4gJGVtcGxveWVJZF0pOwokbGFzdFBvaW50YWdlID0gJHN0bXQtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpOwoKJGlzV29ya2luZyA9ICRsYXN0UG9pbnRhZ2UgJiYgJGxhc3RQb2ludGFnZVsnRGF0ZUhldXJlU29ydGllJ10gPT09IG51bGw7Cgo/Pgo8IURPQ1RZUEUgaHRtbD4KCjxodG1sPgoKPGhlYWQ+Cgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CgoKCgoKPHRpdGxlPlBvaW50YWdlcyBzYWxhcmnDqXM8L3RpdGxlPgoKPCEtLQoKCgpUZW1wbGF0ZSAyMDg5IE1ldGVvcgoKCgpodHRwOi8vd3d3LnRvb3BsYXRlLmNvbS92aWV3LzIwODktbWV0ZW9yCgoKCi0tPgoKPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Cgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgoKPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSJhcHBsZS10b3VjaC1pY29uLnBuZyI+CgoKCjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKGFzc2V0X3ZlcnNpb25fdXJsKCdjc3MvYm9vdHN0cmFwLm1pbi5jc3MnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2Nzcy9ib290c3RyYXAtdGhlbWUubWluLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2ZvbnRBd2Vzb21lLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL2hlcm8tc2xpZGVyLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3Rvb3BsYXRlLXN0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnY3NzL3N0eWxlLmNzcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPgoKPC9oZWFkPgoKCgo8Ym9keSBjbGFzcz0icGFnZS1wb2ludGFnZSB0aGVtZS1kYXJrIj4KCgoKCjxkaXYgaWQ9ImFib3V0IiBjbGFzcz0icGFnZS1zZWN0aW9uIj4KPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KPGRpdiBjbGFzcz0icm93Ij4KPGRpdiBjbGFzcz0iY29sLW1kLTEyIj4KPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkaW5nIj4KPGgxPlBvaW50YWdlcyA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoKCRlbXBsb3llWydOb20nXSA/PyAnJykgLiAiICIgLiAoJGVtcGxveWVbJ1ByZW5vbSddID8/ICcnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+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+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8P3BocCByZW5kZXJfanF1ZXJ5X3NjcmlwdF90YWdzKCk7ID8+CiAgICAgICAgCiAgICAgICAgPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhhc3NldF92ZXJzaW9uX3VybCgnanMvcGx1Z2lucy5qcycpLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsgPz4iPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIDxzY3JpcHQgc3JjPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoYXNzZXRfdmVyc2lvbl91cmwoJ2pzL21haW4uanMnKSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7ID8+Ij48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKCgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiAgICAgICAgdmFyIGVtcGxveWVlRmlyc3ROYW1lID0gPD9waHAgZWNobyBqc29uX2VuY29kZSgoJGVtcGxveWUgJiYgaXNzZXQoJGVtcGxveWVbJ1ByZW5vbSddKSkgPyAoc3RyaW5nKSRlbXBsb3llWydQcmVub20nXSA6ICcnLCBKU09OX1VORVNDQVBFRF9VTklDT0RFIHwgSlNPTl9IRVhfVEFHIHwgSlNPTl9IRVhfQU1QIHwgSlNPTl9IRVhfQVBPUyB8IEpTT05fSEVYX1FVT1QpOyA/PjsKICAgICAgICBmdW5jdGlvbiBidWlsZFB1bmNoVG9hc3QoYWN0aW9uKSB7IHZhciBwID0gZW1wbG95ZWVGaXJzdE5hbWUgPyAoIiAiICsgZW1wbG95ZWVGaXJzdE5hbWUpIDogIiI7IHJldHVybiAoYWN0aW9uID09PSAiZGVwYXJ0IikgPyAoIkTDqXBhcnQiICsgcCArICIgZW5yZWdpc3Ryw6kiKSA6ICgiQXJyaXbDqWUiICsgcCArICIgZW5yZWdpc3Ryw6llIik7IH0KCiAgICAgICAgJCgiI2Fycml2YWxCdXR0b24iKS5jbGljayhmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgbGV0IGVtcGxveWUgPSAkKHRoaXMpLmRhdGEoJ2VtcGxveWUnKTsKICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICAgIHR5cGU6ICJQT1NUIiwKICAgICAgICAgICAgICAgIHVybDogImVucmVnaXN0cmVtZW50X2Fycml2ZWUucGhwIiwKICAgICAgICAgICAgICAgIGRhdGE6IHtlbXBsb3llOiBlbXBsb3llfSwKICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9IGJ1aWxkUHVuY2hUb2FzdCgiYXJyaXZlZSIpOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gImluZGV4LnBocD90b2FzdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KG1zZykgKyAiJnRvYXN0VHlwZT1zdWNjZXNzIjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJFcnJldXIgbG9ycyBkZSBsJ2VucmVnaXN0cmVtZW50IGR1IHBvaW50YWdlLiIsICJlcnJvciIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiRXJyZXVyIGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBwb2ludGFnZS4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIAogICAgICAgICQoIiNkZXBhcnR1cmVCdXR0b24iKS5jbGljayhmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgbGV0IGVtcGxveWUgPSAkKHRoaXMpLmRhdGEoJ2VtcGxveWUnKTsKICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICAgIHR5cGU6ICJQT1NUIiwKICAgICAgICAgICAgICAgIHVybDogImVucmVnaXN0cmVtZW50X2RlcGFydC5waHAiLAogICAgICAgICAgICAgICAgZGF0YToge2VtcGxveWU6IGVtcGxveWV9LAogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gYnVpbGRQdW5jaFRvYXN0KCJkZXBhcnQiKTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJpbmRleC5waHA/dG9hc3Q9IiArIGVuY29kZVVSSUNvbXBvbmVudChtc2cpICsgIiZ0b2FzdFR5cGU9c3VjY2VzcyI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNob3dUb2FzdCgiRXJyZXVyIGxvcnMgZGUgbCdlbnJlZ2lzdHJlbWVudCBkdSBwb2ludGFnZS4iLCAiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkVycmV1ciBsb3JzIGRlIGwnZW5yZWdpc3RyZW1lbnQgZHUgcG9pbnRhZ2UuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAKICAgICAgICB2YXIgYWN0aW9uQ29udGV4dCA9ICIiOyAvLyBWYXJpYWJsZSBnbG9iYWxlIHBvdXIgc3RvY2tlciBsZSBjb250ZXh0ZSBkZSBsJ2FjdGlvbgoKZnVuY3Rpb24gc2FuaXRpemVQaW5WYWx1ZSh2YWwpIHsKICByZXR1cm4gU3RyaW5nKHZhbCB8fCAnJykucmVwbGFjZSgvXEQvZywgJycpLnNsaWNlKDAsIDQpOwp9CgpmdW5jdGlvbiB1cGRhdGVQaW5Cb3hlcyhwaW4pIHsKICB2YXIgYm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjcGluTW9kYWwgLnBpbi1ib3gnKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGJveGVzLmxlbmd0aDsgaSsrKSB7CiAgICBib3hlc1tpXS50ZXh0Q29udGVudCA9IChpIDwgcGluLmxlbmd0aCkgPyAn4piFJyA6ICcnOwogIH0KfQoKZnVuY3Rpb24gZm9jdXNQaW5JbnB1dCgpIHsKICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICBpZiAoIWlucHV0KSByZXR1cm47CiAgdHJ5IHsgaW5wdXQuZm9jdXMoKTsgfSBjYXRjaCAoZSkge30KfQoKZnVuY3Rpb24gcmVzZXRQaW5Nb2RhbCgpIHsKICB2YXIgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluSW5wdXQnKTsKICBpZiAoaW5wdXQpIGlucHV0LnZhbHVlID0gJyc7CiAgdXBkYXRlUGluQm94ZXMoJycpOwp9CgpmdW5jdGlvbiBvcGVuUGluTW9kYWwoKSB7CiAgdmFyIG1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bpbk1vZGFsJyk7CiAgdmFyIGJnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsQmFja2dyb3VuZCcpOwogIGlmICghbW9kYWwgfHwgIWJnKSByZXR1cm47CiAgbW9kYWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgYmcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgcmVzZXRQaW5Nb2RhbCgpOwogIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBmb2N1c1BpbklucHV0KCk7IH0sIDEwKTsKfQoKZnVuY3Rpb24gY2xvc2VQaW5Nb2RhbCgpIHsKICB2YXIgbW9kYWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGluTW9kYWwnKTsKICB2YXIgYmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWxCYWNrZ3JvdW5kJyk7CiAgaWYgKG1vZGFsKSBtb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGlmIChiZykgYmcuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICByZXNldFBpbk1vZGFsKCk7Cn0KCi8vIEJpbmQgaW5wdXQgb25jZSAoZGlnaXRzIG9ubHkgKyBzeW5jIFVJIGJveGVzKQooZnVuY3Rpb24gYmluZFBpbk9uY2UoKSB7CiAgdmFyIGlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BpbklucHV0Jyk7CiAgaWYgKCFpbnB1dCB8fCBpbnB1dC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYm91bmQnKSA9PT0gJzEnKSByZXR1cm47CiAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJvdW5kJywgJzEnKTsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgdmFyIGNsZWFuID0gc2FuaXRpemVQaW5WYWx1ZShpbnB1dC52YWx1ZSk7CiAgICBpZiAoaW5wdXQudmFsdWUgIT09IGNsZWFuKSBpbnB1dC52YWx1ZSA9IGNsZWFuOwogICAgdXBkYXRlUGluQm94ZXMoY2xlYW4pOwogIH0pOwogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICB2YXIga2V5ID0gZS5rZXkgfHwgJyc7CiAgICBpZiAoa2V5ID09PSAnRXNjYXBlJykgewogICAgICBjbG9zZVBpbk1vZGFsKCk7CiAgICB9CiAgfSk7Cn0pKCk7CgpmdW5jdGlvbiBhZmZpY2hlck1vZGFsKGVsZW1lbnQpIHsKICAgIHZhciBwb2ludGFnZUlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcG9pbnRhZ2UtaWQnKTsKICAgIHdpbmRvdy5wb2ludGFnZUlkUG91ck1vZGlmaWNhdGlvbiA9IHBvaW50YWdlSWQ7CiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJtb2RpZl9wb2ludGFnZS5waHA/cG9pbnRhZ2VJZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHBvaW50YWdlSWQpOwp9CgpmdW5jdGlvbiB2ZXJpZmllclBpbigpIHsKICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaW5JbnB1dCcpOwogICAgdmFyIHBpbiA9IHNhbml0aXplUGluVmFsdWUoaW5wdXQgPyBpbnB1dC52YWx1ZSA6ICcnKTsKICAgIGlmIChpbnB1dCAmJiBpbnB1dC52YWx1ZSAhPT0gcGluKSBpbnB1dC52YWx1ZSA9IHBpbjsKICAgIHVwZGF0ZVBpbkJveGVzKHBpbik7CgogICAgaWYgKHBpbi5sZW5ndGggIT09IDQpIHsKICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zaG93VG9hc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVudHJleiB1biBjb2RlIFBJTiDDoCA0IGNoaWZmcmVzLiIsICJlcnJvciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbGVydCgiRW50cmV6IHVuIGNvZGUgUElOIMOgIDQgY2hpZmZyZXMuIik7CiAgICAgICAgfQogICAgICAgIHRyeSB7IGZvY3VzUGluSW5wdXQoKTsgfSBjYXRjaCAoZSkge30KICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAocGluKSB7CiAgICAgICAgLy8gRW52b2kgZHUgY29kZSBQSU4gw6AgdW4gc2NyaXB0IFBIUCBwb3VyIHbDqXJpZmljYXRpb24KICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQgJiYgdGhpcy5zdGF0dXMgPT0gMjAwKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zZVRleHQgPT0gIk9LIikgewogICAgICAgICAgICAgICAgICAgIC8vIEV4w6ljdXRlciBsJ2FjdGlvbiBlbiBmb25jdGlvbiBkdSBjb250ZXh0ZQogICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25Db250ZXh0ID09PSAibW9kaWZpY2F0aW9uUG9pbnRhZ2UiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gIm1vZGlmX3BvaW50YWdlLnBocD9wb2ludGFnZUlkPSIgKyB3aW5kb3cucG9pbnRhZ2VJZFBvdXJNb2RpZmljYXRpb247CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25Db250ZXh0ID09PSAic29ydGllRW1wbG95ZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc29ydGlyRW1wbG95ZSh3aW5kb3cucG9pbnRhZ2VJZFBvdXJTb3J0aWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2hvd1RvYXN0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2hvd1RvYXN0KCJDb2RlIFBJTiBpbmNvcnJlY3QuIiwgImVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCJDb2RlIFBJTiBpbmNvcnJlY3QuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJlc2V0UGluTW9kYWwoKTsKICAgICAgICAgICAgICAgICAgICB0cnkgeyBmb2N1c1BpbklucHV0KCk7IH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHhoci5vcGVuKCJQT1NUIiwgInZlcmlmaWVyX3Bpbi5waHAiLCB0cnVlKTsKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwogICAgICAgIHhoci5zZW5kKCJwaW49IiArIHBpbik7CiAgICB9Cn0KCmZ1bmN0aW9uIHByb21wdEV4aXRQaW4oKSB7CiAgICB3aW5kb3cucG9pbnRhZ2VJZFBvdXJTb3J0aWUgPSA8P3BocCBlY2hvICRlbXBsb3llSWQ7ID8+OwogICAgc29ydGlyRW1wbG95ZSh3aW5kb3cucG9pbnRhZ2VJZFBvdXJTb3J0aWUpOwp9CgpmdW5jdGlvbiBzb3J0aXJFbXBsb3llKGVtcGxveWVJZCkgewogICAgJC5hamF4KHsKICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgdXJsOiAic29ydGlyX2VtcGxveWUucGhwIiwgLy8gU2NyaXB0IFBIUCBwb3VyIHNvcnRpciBsJ2VtcGxvecOpCiAgICAgICAgZGF0YToge2VtcGxveWU6IGVtcGxveWVJZH0sCiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgICAgICAgICAgdmFyIG1zZyA9ICJTdGF0dXQgZGUgbCdlbXBsb3nDqSBtaXMgw6Agam91ci4iOwogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICJpbmRleC5waHA/dG9hc3Q9IiArIGVuY29kZVVSSUNvbXBvbmVudChtc2cpICsgIiZ0b2FzdFR5cGU9c3VjY2VzcyI7CiAgICAgICAgfSwKICAgICAgICBlcnJvcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNob3dUb2FzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgIHdpbmRvdy5zaG93VG9hc3QoIkVycmV1ciBsb3JzIGRlIGxhIG1pc2Ugw6Agam91ciBkdSBzdGF0dXQgZW1wbG95w6kuIiwgImVycm9yIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYWxlcnQoIkVycmV1ciBsb3JzIGRlIGxhIG1pc2Ugw6Agam91ciBkdSBzdGF0dXQgZW1wbG95w6kuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKfQoKICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICA8L3NjcmlwdD4KICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPC9ib2R5PgogICAgICAgICAgICAKICAgICAgICAgICAgPC9odG1sPg=="
            }
        }
    ],
    "meta": {
        "summary": {
            "changed": 4,
            "created": 1,
            "deleted": 0,
            "errors": 0
        },
        "patch_sha1": "2a2a64d97de7f3b25a6ed6f6f988a90988c74ae1",
        "created_files": [
            "pointages/includes/jquery_loader.php"
        ],
        "branching": {
            "auto_branch_created": false,
            "auto_branch_id": null,
            "source_branch_id": "main",
            "base_event_id": "event_a4c22d3ca872c3ae"
        },
        "transition_store": {
            "dir": "event-assets/event_3c01b1f1ba5c5d08",
            "manifest": "event-assets/event_3c01b1f1ba5c5d08/manifest.json",
            "files_count": 5
        }
    },
    "impacted_paths": [
        "pointages/admin.php",
        "pointages/includes/jquery_loader.php",
        "pointages/index.php",
        "pointages/modif_pointage.php",
        "pointages/pointage.php"
    ]
}