From: Samuel Treweek Date: 2011-01-11T21:44:03+09:00 Subject: [ruby-core:34349] [Ruby 1.9-Bug#4263][Open] `pack': can't convert Fixnum into String (TypeError) --mimepart_4d2c507c6098_1dc2a7279f0364a Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Bug #4263: `pack': can't convert Fixnum into String (TypeError) http://redmine.ruby-lang.org/issues/show/4263 Author: Samuel Treweek Status: Open, Priority: Normal Category: core ruby -v: ruby 1.9.2p0 (2010-08-18) [i386-mingw32] I get the following error: C:/Ruby192/lib/ruby/1.9.1/Win32API.rb:22:in `pack': can't convert Fixnum = into String (TypeError) from C:/Ruby192/lib/ruby/1.9.1/Win32API.rb:22:in `block in call' from C:/Ruby192/lib/ruby/1.9.1/Win32API.rb:21:in `each' from C:/Ruby192/lib/ruby/1.9.1/Win32API.rb:21:in `each_with_index' from C:/Ruby192/lib/ruby/1.9.1/Win32API.rb:21:in `call' from C:/Documents and Settings/samuel.treweeks/Desktop/lib/wintir.rb:73:= in `object_exists' from C:/Documents and Settings/samuel.treweeks/Desktop/lib/wintir.rb:616= :in `initialize' from C:/Documents and Settings/samuel.treweeks/Desktop/lib/wintir.rb:147= :in `new' from C:/Documents and Settings/samuel.treweeks/Desktop/lib/wintir.rb:147= :in `button' from close_msgbox.rb:6:in `
' 0 >Exit code: 1 1. Create folder structure: main\lib 2. In lib put the attached file 'wintir.rb' file in 3. In Main puts the attached file 'close_msgbox.rb' in 4. Execute close_msgbox.rb 5. Error appears in Win32API Note: = This does not occur in Ruby 1.86 The code is trying to close a msgbox opened from a IE ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4d2c507c6098_1dc2a7279f0364a Content-Type: application/octet-stream; name=close_msgbox.rb Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=close_msgbox.rb JExPQURfUEFUSC51bnNoaWZ0KEZpbGUuam9pbihGaWxlLmRpcm5hbWUoX19G SUxFX18pLCAnbGliJykpDQpyZXF1aXJlICd3aW50aXInDQoNCmNvbSA9IFdp bnRpcjo6Q29tLmF0dGFjaCg6b2JqX2NsYXNzID0+ICJJRUZyYW1lIiwgOm5h bWUgPT4gIlZCU2NyaXB0IFR1dG9yaWFsIC0gTXNnQm94IC0gV2luZG93cyBJ bnRlcm5ldCBFeHBsb3JlciIpDQojY29tLmZpbGVfbWVudSg6bWVudV9wYXRo ID0+ICJGaWxlPkZvbnQiKQ0KY29tLmRpYWxvZyg6ZGlhbG9nX25hbWUgPT4g IlZCU2NyaXB0IikuYnV0dG9uKDpuYW1lID0+ICJCdXR0b24iLCA6Y2FwdGlv biA9PiAiT0siKS5jbGljaw0KDQoNCg== --mimepart_4d2c507c6098_1dc2a7279f0364a Content-Type: application/octet-stream; name=wintir.rb Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=wintir.rb I1dpbnRpciBpcyBiYXNlZCBvbiB0aGUgZ3VpdGVzdCBhbmQgd2F0aXIgYXV0 b21hdGlvbg0KcmVxdWlyZSAiV2luMzJBUEkiDQpyZXF1aXJlICd3aW4zMm9s ZScNCiNyZXF1aXJlICJjZ3VpdGVzdCINCg0KDQptb2R1bGUgV2ludGlyDQog IG1vZHVsZSBHdWlUZXN0DQogICAgI0ZpbmQgV2luZG93DQogICAgRmluZFdp bmRvdyA9IFdpbjMyQVBJLm5ldygndXNlcjMyJywgJ0ZpbmRXaW5kb3cnLCBb IlAiLCAiUCJdLCAiTCIpDQogICAgI0ZpbmQgc3ViIHdpbmRvd3MNCiAgICBG aW5kV2luZG93RXggPSBXaW4zMkFQSS5uZXcoJ3VzZXIzMicsICdGaW5kV2lu ZG93RXgnLCBbJ1AnXSAqIDQsICdMJykNCiAgICAjR2V0IFNvbWUgRXh0cmEg RGV0YWlscw0KICAgIEdldENsaWVudFJlY3QgPSBXaW4zMkFQSS5uZXcoJ3Vz ZXIzMicsJ0dldENsaWVudFJlY3QnLCdMUCcsJ0knKQ0KICAgIEdldFdpbmRv d1JlY3QgPSBXaW4zMkFQSS5uZXcoJ3VzZXIzMicsJ0dldFdpbmRvd1JlY3Qn LCdMUCcsJ0knKQ0KICAgIA0KICAgIA0KICAgIGNsYXNzIFJlY3QNCiAgICAg ICMgVE9ETyAtIHJhdGhlciB0aGFuIGhhdmluZyBSZWN0IGtub3cgaG93IHRv IHVucGFjayB0aGUgYnVmZmVyLCB0aGUgY2FsbGVyIHNob3VsZA0KICAgICAg IyBkbyB0aGF0LCBhbmQgdGhlbiBwYXNzIHRoZSA0IHBhcmFtZXRlcnMuICBU aGlzIGRlY291cGxlcyBSZWN0IGZyb20ga25vd2xlZGdlIG9mDQogICAgICAj IGhvdyB0aGUgYnVmZmVyIGlzIHBhY2tlZC4NCiAgICAgIGRlZiBpbml0aWFs aXplKGJ1ZikNCiAgICAgICAgQGxlZnQsQHRvcCxAcmlnaHQsQGJvdHRvbSA9 IGJ1Zi51bnBhY2soImxsbGwiKQ0KICAgICAgICB3aWR0aA0KICAgICAgICBo ZWlnaHQNCiAgICAgICAgI3B1dHMgQGxlZnQsQHRvcCxAcmlnaHQsQGJvdHRv bQ0KICAgICAgZW5kDQogICAgICBhdHRyX2FjY2Vzc29yIDpsZWZ0LCA6dG9w LCA6cmlnaHQsIDpib3R0b20NCg0KICAgICAgZGVmIHdpZHRoDQogICAgICAg IEB3aWR0aCA9IEByaWdodCAtIEBsZWZ0DQogICAgICAgICNwdXRzIEByaWdo dCAtIEBsZWZ0DQogICAgICBlbmQNCiAgICAgIGF0dHJfYWNjZXNzb3IgOndp ZHRoDQoNCiAgICAgIGRlZiBoZWlnaHQNCiAgICAgICAgQGhlaWdodCA9IEBi b3R0b20gLSBAdG9wDQogICAgICAgICNwdXRzIEBib3R0b20gLSBAdG9wDQog ICAgICBlbmQNCiAgICAgIGF0dHJfYWNjZXNzb3IgOmhlaWdodA0KICAgIGVu ZA0KICAgIA0KICAgIGRlZiBhc3NpZ25fY29tIGhvdywgd2hhdA0KICAgICAg I0ZpbmQgd2luZG93J3MgaGFuZGxlIA0KICAgICAgY29tID0gRmluZFdpbmRv dy5jYWxsKGhvdywgd2hhdCkNCiAgICAgIHF1ZXJ5X3dpbmRvdyBjb20NCiAg ICAgIA0KICAgICAgcHV0cyBjb20NCiAgICAgIA0KICAgICAgcmV0dXJuIGNv bSAgICAgIA0KICAgIGVuZA0KICAgIA0KICAgIGRlZiBxdWVyeV93aW5kb3cg Y29tDQogICAgICBidWYgPSAiXDAiICogMTYNCiAgICAgIEdldFdpbmRvd1Jl Y3QuY2FsbChjb20sIGJ1ZikNCiAgICAgIEBSZWN0ID0gUmVjdC5uZXcoYnVm KQ0KICAgIGVuZA0KICAgICAgDQogIGVuZA0KZW5kDQoNCm1vZHVsZSBXaW50 aXINCiAgY2xhc3MgT2JqZWN0QXNzZXJ0DQogICAgDQogICAgU2VuZE1lc3Nh Z2UgPSBXaW4zMkFQSS5uZXcoInVzZXIzMiIsICJTZW5kTWVzc2FnZSIsIFsn TCddICogNCwgJ0wnKQ0KICAgIEZpbmRXaW5kb3dFeCA9IFdpbjMyQVBJLm5l dygndXNlcjMyJywgJ0ZpbmRXaW5kb3dFeCcsIFsnUCddICogNCwgJ0wnKQ0K ICAgIA0KICAgICNEb2VzIHRoZSBvYmplY3QgZXhpc3QNCiAgICBkZWYgb2Jq ZWN0X2V4aXN0cyhvYmopDQogICAgIA0KICAgICAgI3B1dHMgb2JqLmNvbQ0K ICAgICAgDQogICAgICBvYmpfaWQgPSBGaW5kV2luZG93RXguY2FsbChvYmou Y29tLDAsb2JqLm5hbWUudG9fcyxvYmouY2FwdGlvbi50b19zKSANCiAgICAg IEBvYmpfaWQgPSBvYmpfaWQNCiAgDQogICAgICByZXR1cm4gb2JqX2lkDQog DQogICAgZW5kDQogICAgYXR0cl9hY2Nlc3NvciA6bGVmdCwgOnRvcCwgOnJp Z2h0LCA6Ym90dG9tLCA6b2JqX2lkDQogICAgI09iamVjdCBWaXNpYmxlL0Vu YWJsZWQNCiAgICBkZWYgb2JqZWN0X3N0eWxlKG9iaikNCiAgICAgICNwdXRz IG9iag0KICAgIGVuZA0KICBlbmQNCmVuZA0KDQoNCm1vZHVsZSBXaW50aXIN CiAgDQogIGNsYXNzIERpYWxvZ1dpbmRvdw0KIA0KICAgIEZpbmRXaW5kb3dF eCA9IFdpbjMyQVBJLm5ldygndXNlcjMyJywgJ0ZpbmRXaW5kb3dFeCcsIFsn UCddICogNCwgJ0wnKQ0KICAgIEdldFdpbmRvd1RleHRBID0gV2luMzJBUEku bmV3KCd1c2VyMzInLCdHZXRXaW5kb3dUZXh0QScsJ0xQSScsJ0knKQ0KICAg IFNlbmRNZXNzYWdlQSA9IFdpbjMyQVBJLm5ldygndXNlcjMyJywnU2VuZE1l c3NhZ2VBJywnTElJUCcsJ0knKQ0KICAgIA0KICAgIGRlZiBpbml0aWFsaXpl KGNvbnRhaW5lciwgZGlhbG9nX25hbWUpDQogICAgICAjcHV0cyBjb250YWlu ZXINCiAgICAgIEBjb250YWluZXIgPSBjb250YWluZXINCiAgICAgIGdldF9k aWFsb2coZGlhbG9nX25hbWUpDQogICAgZW5kDQogICAgDQogICAgYXR0cl9h Y2Nlc3NvciA6Y29tDQogICAgDQogICAgZGVmIGdldF9kaWFsb2coZGlhbG9n X25hbWUpDQogICAgICANCiAgICAgICNjcmVhdGUgZGlhbG9nX3RpdGxlIHNw YWNlDQogICAgICBkaWFsb2dfdGl0bGUgPSAiIi5jZW50ZXIoMjU2KQ0KICAg ICAgDQogICAgICAjMzI3NzAgaXMgdGhlIG5hbWUgZm9yIGEgZGlhbG9nIC0g YnJpbGxpYW50IQ0KICAgICAgZF9od25kID0gRmluZFdpbmRvd0V4LmNhbGwo MCwgMCwgIiMzMjc3MCIsIDApDQogICAgICANCiAgICAgICNDb25maXJtIHRo ZSBkaWFsb2dfbmFtZSBpcyB0aGUgb25lIHdlJ3JlIGFmdGVyDQogICAgICBH ZXRXaW5kb3dUZXh0QS5jYWxsKGRfaHduZCwgZGlhbG9nX3RpdGxlLCAyMDAp DQogICAgICANCiAgICAgICNwdXRzIGRpYWxvZ19uYW1lDQogICAgICAjcHV0 cyBkX2h3bmQNCiAgICAgICNwdXRzIGRpYWxvZ190aXRsZS5yc3RyaXANCiAg ICAgIA0KICAgICAgDQogICAgICBAY29tID0gZF9od25kIA0KICAgICAgDQog ICAgZW5kDQogICAgDQogICAgZGVmIGNsb3NlDQogICAgICAgU2VuZE1lc3Nh Z2VBLmNhbGwoc2VsZi5jb20sIDE2LCAwLCAwKQ0KICAgIGVuZA0KICAgICAg DQogICAgZGVmIGNsaWNrX2J1dHRvbg0KICAgICAgI3B1dHMgImNsaWNrIHRo ZSBidXR0b24gdGhlbiINCiAgICBlbmQNCg0KCWRlZiBzdGF0aWNfdGV4dA0K CQlwdXRzIHNlbGYuY29tDQoJCXRfaHduZCA9IEZpbmRXaW5kb3dFeC5jYWxs KHNlbGYuY29tLCAwLCAnU3RhdGljJywgJycpCQ0KCQkgcHV0cyAiaWQgI3t0 X2h3bmR9Ig0KCWVuZA0KCQ0KDQogICAgYXR0cl9hY2Nlc3NvciA6bmFtZSwg OmF0dGFjaGVkX3RleHQsIDp6b3JkZXIsIDpjYXB0aW9uDQogICAgDQogICAg ZGVmIGJ1dHRvbihkZXNjcmliZSA9IG5pbCkNCiAgICAgIEBuYW1lPWRlc2Ny aWJlWzpuYW1lXQ0KICAgICAgQGF0dGFjaGVkX3RleHQgPSBkZXNjcmliZVs6 YXR0YWNoZWRfdGV4dF0NCiAgICAgIEB6b3JkZXIgPSBkZXNjcmliZVs6em9y ZGVyXQ0KICAgICAgQGNhcHRpb24gPSBkZXNjcmliZVs6Y2FwdGlvbl0NCiAg ICAgIA0KICAgICAgQnV0dG9uLm5ldyhzZWxmLCBkZXNjcmliZVs6Y2FwdGlv bl0sIGRlc2NyaWJlWzpuYW1lXSwgZGVzY3JpYmVbOmF0dGFjaGVkX3RleHRd LCBkZXNjcmliZVs6em9yZGVyXSkNCiAgICBlbmQNCiAgICANCiAgICBkZWYg Y29tYm9fbGlzdChkZXNjcmliZSA9IG5pbCkNCiAgICAgIEBuYW1lPWRlc2Ny aWJlWzpuYW1lXQ0KICAgICAgQGF0dGFjaGVkX3RleHQgPSBkZXNjcmliZVs6 YXR0YWNoZWRfdGV4dF0NCiAgICAgIEB6b3JkZXIgPSBkZXNjcmliZVs6em9y ZGVyXQ0KICAgICAgQGNhcHRpb24gPSBkZXNjcmliZVs6Y2FwdGlvbl0NCiAg ICAgIA0KICAgICAgQ29tYm9fTGlzdC5uZXcoc2VsZiwgZGVzY3JpYmVbOmNh cHRpb25dLCBkZXNjcmliZVs6bmFtZV0sIGRlc2NyaWJlWzphdHRhY2hlZF90 ZXh0XSwgZGVzY3JpYmVbOnpvcmRlcl0pDQogICAgIGVuZA0KICAgIA0KICAg IGRlZiBsaXN0X2JveChkZXNjcmliZT1uaWwpDQogICAgICBAbmFtZT1kZXNj cmliZVs6bmFtZV0NCiAgICAgIEBhdHRhY2hlZF90ZXh0ID0gZGVzY3JpYmVb OmF0dGFjaGVkX3RleHRdDQogICAgICBAem9yZGVyID0gZGVzY3JpYmVbOnpv cmRlcl0NCiAgICAgIEBjYXB0aW9uID0gZGVzY3JpYmVbOmNhcHRpb25dDQog ICAgICANCiAgICAgIExpc3RfQm94Lm5ldyhzZWxmLCBkZXNjcmliZVs6Y2Fw dGlvbl0sIGRlc2NyaWJlWzpuYW1lXSwgZGVzY3JpYmVbOmF0dGFjaGVkX3Rl eHRdLCBkZXNjcmliZVs6em9yZGVyXSkNCiAgICBlbmQNCiAgICANCiAgICBk ZWYgc3RhdGljKGRlc2NyaWJlID0gbmlsKQ0KICAgICAgQHN0YXRpYyA9IGRl c2NyaWJlDQogICAgICBAbmFtZT1kZXNjcmliZVs6bmFtZV0NCiAgICAgIEBh dHRhY2hlZF90ZXh0ID0gZGVzY3JpYmVbOmF0dGFjaGVkX3RleHRdDQogICAg ICBAem9yZGVyID0gZGVzY3JpYmVbOnpvcmRlcl0NCiAgICAgIEBjYXB0aW9u ID0gZGVzY3JpYmVbOmNhcHRpb25dDQogICAgICANCiAgICAgIFN0YXRpY19U ZXh0Lm5ldyhzZWxmLCBkZXNjcmliZVs6Y2FwdGlvbl0sIGRlc2NyaWJlWzpu YW1lXSwgZGVzY3JpYmVbOmF0dGFjaGVkX3RleHRdLCBkZXNjcmliZVs6em9y ZGVyXSkNCiAgICBlbmQNCiAgICANCiAgICBkZWYgdGFicyhkZXNjcmliZT1u aWwpDQogICAgICBAbmFtZT1kZXNjcmliZVs6bmFtZV0NCiAgICAgIEBhdHRh Y2hlZF90ZXh0ID0gZGVzY3JpYmVbOmF0dGFjaGVkX3RleHRdDQogICAgICBA em9yZGVyID0gZGVzY3JpYmVbOnpvcmRlcl0NCiAgICAgIEBjYXB0aW9uID0g ZGVzY3JpYmVbOmNhcHRpb25dDQogICAgICANCiAgICAgIFRhYkNvbnRyb2wu bmV3KHNlbGYsIGRlc2NyaWJlWzpjYXB0aW9uXSwgZGVzY3JpYmVbOm5hbWVd LCBkZXNjcmliZVs6YXR0YWNoZWRfdGV4dF0sIGRlc2NyaWJlWzp6b3JkZXJd KQ0KICAgIGVuZA0KICAgIA0KICBlbmQNCiAgDQogIGNsYXNzIERpYWxvZyA8 IERpYWxvZ1dpbmRvdw0KICAgIElOUFVUX1RZUEVTID0gWyJjYXB0aW9uIiwg ImJ1dHRvbiIsICJhdHRhY2hlZF90ZXh0IiwgInpvcmRlciJdDQogIGVuZA0K ICANCmVuZA0KDQojRmlsZU1lbnVJbnB1dCBDbGFzcw0KbW9kdWxlIFdpbnRp cg0KICBjbGFzcyBGaWxlTWVudUlucHV0DQogICAgDQogICAgRmluZFdpbmRv d0V4ID0gV2luMzJBUEkubmV3KCd1c2VyMzInLCAnRmluZFdpbmRvd0V4Jywg WydQJ10gKiA0LCAnTCcpDQogICAgU2VuZE1lc3NhZ2VBQiAgPSBXaW4zMkFQ SS5uZXcoJ3VzZXIzMicsICdTZW5kTWVzc2FnZScsIFsiTCIsICJMIiwgIlAi LCAiUCJdLCAiTCIpDQogICAgU2VuZE1lc3NhZ2VBID0gV2luMzJBUEkubmV3 KCd1c2VyMzInLCdTZW5kTWVzc2FnZUEnLCdMSUlQJywnSScpDQogICAgUG9z dE1lc3NhZ2VBID0gV2luMzJBUEkubmV3KCd1c2VyMzInLCdQb3N0TWVzc2Fn ZUEnLCdMSUlMJywnSScpDQogICAgR2V0TWVudSA9IFdpbjMyQVBJLm5ldygn dXNlcjMyJywnR2V0TWVudScsJ0wnLCdMJykNCiAgICBHZXRNZW51QSA9IFdp bjMyQVBJLm5ldygndXNlcjMyJywnR2V0TWVudScsJ0knLCAnSScpDQogICAg R2V0TWVudUl0ZW1Db3VudCA9IFdpbjMyQVBJLm5ldygndXNlcjMyJywnR2V0 TWVudUl0ZW1Db3VudCcsJ0wnLCdJJykNCiAgICBHZXRNZW51U3RyaW5nQSA9 IFdpbjMyQVBJLm5ldygndXNlcjMyJywnR2V0TWVudVN0cmluZ0EnLCdMSVBJ SScsJ0knKQ0KICAgIEdldE1lbnVTdHJpbmcgPSBXaW4zMkFQSS5uZXcoJ3Vz ZXIzMicsJ0dldE1lbnVTdHJpbmcnLCdMSVBJSScsJ0knKQ0KICAgIEdldFN1 Yk1lbnUgPSBXaW4zMkFQSS5uZXcoJ3VzZXIzMicsJ0dldFN1Yk1lbnUnLCdM SScsJ0wnKQ0KICAgIEdldE1lbnVJdGVtSUQgPSBXaW4zMkFQSS5uZXcoJ3Vz ZXIzMicsJ0dldE1lbnVJdGVtSUQnLCdMSScsJ0knKQ0KICAgDQogICAgDQog ICAgV01fU0VUVEVYVCAgPSAweDAwMEMNCiAgICANCiAgICBkZWYgaW5pdGlh bGl6ZShjb250YWluZXIsIG1lbnVfcGF0aCkNCiAgICAgIA0KICAgICAgI3B1 dHMgIGNvbnRhaW5lci5jb20NCiAgICAgIEBjb250YWluZXIgPSBjb250YWlu ZXINCiAgICAgIGdldF9hcHBsaWNhdGlvbl9tZW51KG1lbnVfcGF0aCkNCiAg ICAgICAgICAgDQogICAgZW5kDQogICAgDQogICAgYXR0cl9hY2Nlc3NvciA6 Y29udGFpbmVyDQogICAgDQogICAgZGVmIGNsaWNrDQogICAgICAjcHV0cyAi Y2xpY2siDQogICAgZW5kDQoNCiAgICBkZWYgZ2V0X2FwcGxpY2F0aW9uX21l bnUobWVudV9wYXRoKQ0KICAgICANCiAgICAgICNEZWxhcmUgbWVudSBpdGVt IGZhbHNlDQogICAgICB0b3BfbGV2ZWxfbWVudV9pdGVtID0gZmFsc2UNCiAg ICAgIHN1Yl9sZXZlbF9tZW51X2l0ZW0gPSBmYWxzZQ0KICAgICANCiAgICAg IG1pID0gbWVudV9wYXRoLnNwbGl0KCc+JykgICANCiAgICAgICAgICANCiAg ICAgICNHZXQgTWVudQ0KICAgICAgaF93bmRfbWVudSA9IEdldE1lbnVBLmNh bGwoY29udGFpbmVyLmNvbSkNCiAgICAgICNwdXRzIGhfd25kX21lbnUNCiAg ICAgDQogICAgICBtZW51X2NvdW50ID0gR2V0TWVudUl0ZW1Db3VudC5jYWxs KGhfd25kX21lbnUpDQogICAgICAjI3B1dHMgbWVudV9jb3VudA0KICAgICAN CiAgICAgIHRvcF9tZW51ID0gIiIuY2VudGVyKDI1NikNCiAgICAgIHN1Yl9u YW1lID0gIiIuY2VudGVyKDI1NikNCiAgICAgIHN1Yl9sX25hbWUgPSAiIi5j ZW50ZXIoMjU2KQ0KICAgICANCiAgICAgIGZvciBpIGluIDAuLihtZW51X2Nv dW50LTEpIGRvDQogICAgICAgDQogICAgICAgIEdldE1lbnVTdHJpbmcuY2Fs bChoX3duZF9tZW51LCBpLCB0b3BfbWVudSwgdG9wX21lbnUubGVuZ3RoLCAx MDI0KQ0KICAgICAgICB0b3BfbWVudV9pdGVtID0gdG9wX21lbnUucnN0cmlw DQogICAgICAgICMjcHV0cyB0b3BfbWVudV9pdGVtLnRvX3MNCiAgICAgICAg ICAgICAgIA0KICAgICAgICByZXBsYWNlX2Zyb20gPSAnJicNCiAgICAgICAg cmVwbGFjZV90byA9ICcnDQogICAgICAgIHRvcF9tZW51X2l0ZW0gPSB0b3Bf bWVudV9pdGVtLmdzdWIoLyN7cmVwbGFjZV9mcm9tfS8sIHJlcGxhY2VfdG8p DQogICAgICAgDQogICAgICAgIGlmKCAvI3ttaVswXX0vLm1hdGNoKHRvcF9t ZW51X2l0ZW0udG9fcykgKQ0KICAgICAgICAgICNib29sZWFuIGNoZWNrDQog ICAgICAgICAgIyNwdXRzICJGb3VuZCBpdCAje21pWzBdfSINCiAgICAgICAg ICAjI3B1dHMgdG9wX21lbnVfaXRlbQ0KICAgICAgICAgIHRvcF9sZXZlbF9t ZW51X2l0ZW0gPSB0cnVlDQogICAgICAgICANCiAgICAgICAgZW5kDQoNCiAg ICAgICAgaF92aWV3ID0gR2V0U3ViTWVudS5jYWxsKGhfd25kX21lbnUsIGkp DQogICAgICAgICMgICAgICAgI3B1dHMgaF92aWV3DQogICAgICAgDQogICAg ICAgIEdldE1lbnVTdHJpbmcuY2FsbChoX3ZpZXcsIGksIHN1Yl9uYW1lLCBz dWJfbmFtZS5sZW5ndGgsIDEwMjQpDQogICAgICAgICMgICAgICAgI3B1dHMg c3ViX25hbWUuc3RyaXANCiAgICAgICANCiAgICAgICAgbWVudV9jb3VudDEg PSBHZXRNZW51SXRlbUNvdW50LmNhbGwoaF92aWV3KQ0KICAgICAgICBmb3Ig aiBpbiAwLi4obWVudV9jb3VudDEtMSkgZG8NCiAgICAgICAgICBHZXRNZW51 U3RyaW5nLmNhbGwoaF92aWV3LCBqLCBzdWJfbF9uYW1lLCBzdWJfbF9uYW1l Lmxlbmd0aCwgMTAyNCkNCiAgICAgICANCiAgICAgICAgICBzdWJfbWVudV9p dGVtID0gc3ViX2xfbmFtZS5yc3RyaXANCiAgICAgICAgICAjI3B1dHMgc3Vi X21lbnVfaXRlbS50b19zDQogICAgICAgICANCiAgICAgICAgICAjI3B1dHMg c3ViX2xfbmFtZS5zdHJpcA0KICAgICAgICAgIG1lbnVfaXRlbSA9IEdldE1l bnVJdGVtSUQuY2FsbChoX3ZpZXcsIGopDQogICAgICAgICAgIyNwdXRzIG1l bnVfaXRlbQ0KICAgICAgICAgIHN1Yl9tZW51X2l0ZW0gPSBzdWJfbWVudV9p dGVtLmdzdWIoLyN7cmVwbGFjZV9mcm9tfS8sIHJlcGxhY2VfdG8pDQogICAg ICAgICAgIyNwdXRzIHN1Yl9tZW51X2l0ZW0udG9fcw0KICAgICAgICAgDQog ICAgICAgICAgaWYoIC8je21pWzFdfS8ubWF0Y2goc3ViX21lbnVfaXRlbS50 b19zKSApDQogICAgICAgICAgICAjYm9vbGVhbiBjaGVjaw0KICAgICAgICAg ICAgIyNwdXRzIHN1Yl9tZW51X2l0ZW0NCiAgICAgICAgICAgICMjcHV0cyAi Rm91bmQgaXQgI3ttaVsxXX0iDQogICAgICAgICAgICBzdWJfbGV2ZWxfbWVu dV9pdGVtID0gdHJ1ZQ0KICAgICAgICAgDQogICAgICAgICAgZW5kDQoNCiAg ICAgICAgICBpZiB0b3BfbGV2ZWxfbWVudV9pdGVtICYmIHN1Yl9sZXZlbF9t ZW51X2l0ZW0NCiAgICAgICAgICAgICMjcHV0cyBtZW51X2l0ZW0NCiAgICAg ICAgICAgICMjcHV0cyBoX3duZA0KICAgICAgICAgICAgDQogICAgICAgICAg ICAjVXNlIFBvc3RNZXNzYWdlIHNvIGFzIG5vdCB0byB3YWl0IGZvciBjb25m aXJtYXRpb24NCiAgICAgICAgICAgIFBvc3RNZXNzYWdlQS5jYWxsKEBjb250 YWluZXIuY29tLCAyNzMsIG1lbnVfaXRlbSwgMCkgDQogICAgICAgICAgICB0 b3BfbGV2ZWxfbWVudV9pdGVtID0gZmFsc2UgICAgICAgICAgIA0KICAgICAg ICAgICAgc3ViX2xldmVsX21lbnVfaXRlbSA9IGZhbHNlDQogICAgICAgICAg IA0KICAgICAgICAgICAgI3B1dHMgIkZvdW5kIG1lbnU6ICN7bWlbMF19ID4g I3ttaVsxXX0iDQogICAgICAgICAgZW5kDQogICAgICAgICANCiAgICAgICAg ICAjUmVzZXQgdGhlIGhvbGRpbmcgdmFyaWFibGUgdG8gYmxhbmsNCiAgICAg ICAgICAjb3Blbl9maWxlKHN1Yl9sX25hbWUuc3RyaXApDQogICAgICAgICAg c3ViX2xfbmFtZSA9ICIiLmNlbnRlcigyNTYpDQogICAgICAgIGVuZA0KDQog ICAgICAgICNSZXNldCB0aGUgaG9sZGluZyB2YXJpYWJsZSB0byBibGFuaw0K ICAgICAgICBzdWJfbmFtZSA9ICIiLmNlbnRlcigyNTYpDQogICAgICAgICNv cGVuX2ZpbGUoc3ViX2xfbmFtZS5zdHJpcCkNCiAgICAgIGVuZA0KDQogICAg ZW5kDQogICAgDQogIGVuZA0KICANCiAgY2xhc3MgRmlsZW1lbnUgPCBGaWxl TWVudUlucHV0DQogICAgSU5QVVRfVFlQRVMgPSBbImNhcHRpb24iLCAibmFt ZSIsICJhdHRhY2hlZF90ZXh0IiwgInpvcmRlciJdDQogIGVuZA0KZW5kDQoN CiNDb21ibyBCb3ggQ2xhc3MNCm1vZHVsZSBXaW50aXINCiAgY2xhc3MgQ29t Ym9saXN0DQogICAgDQogICAgRmluZFdpbmRvd0V4ID0gV2luMzJBUEkubmV3 KCd1c2VyMzInLCAnRmluZFdpbmRvd0V4JywgWydQJ10gKiA0LCAnTCcpDQog ICAgR2V0Q29tYm9Cb3hJbmZvID0gV2luMzJBUEkubmV3KCd1c2VyMzInLCdH ZXRDb21ib0JveEluZm8nLCdMUCcsJ0wnKQ0KICAgIFNlbmRNZXNzYWdlQSA9 IFdpbjMyQVBJLm5ldygndXNlcjMyJywnU2VuZE1lc3NhZ2VBJywnTElJUCcs J0knKQ0KICAgIEdldENsaWVudFJlY3QgPSBXaW4zMkFQSS5uZXcoJ3VzZXIz MicsJ0dldENsaWVudFJlY3QnLCdMUCcsJ0knKSAgICANCiAgICBHZXRXaW5k b3dSZWN0ID0gV2luMzJBUEkubmV3KCd1c2VyMzInLCdHZXRXaW5kb3dSZWN0 JywnTFAnLCdJJykNCiAgICANCiAgICAjTWVzc2FnZXMNCiAgICBDQl9TRUxF Q1RTVFJJTkcgPSAzMzMNCiAgICBDQl9HRVRDT1VOVCA9IDMyNg0KICAgIENC X0dFVERST1BQRURTVEFURSA9IDM0Mw0KICAgIENCX0dFVExCVEVYVCA9IDMy OA0KICAgIENCX0dFVExCVEVYVExFTiA9IDMyOSANCiAgICANCiAgICBpbmNs dWRlIFdpbnRpcjo6R3VpVGVzdCAgICANCiAgICANCiAgICBkZWYgaW5pdGlh bGl6ZShjb250YWluZXIsIGNhcHRpb24sIG5hbWUsIGF0dGFjaGVkX3RleHQs IHpvcmRlcikNCiAgICAgIGZpbmRfY29tYm8oY29udGFpbmVyKQ0KICAgICAg Y2hlY2tfYXR0YWNoZWRfdGV4dChzZWxmLmNiX2h3bmQsIGF0dGFjaGVkX3Rl eHQpDQogICAgICBjaGVja19hdHRhY2hlZF90ZXh0KGNvbnRhaW5lci5jb20s IGF0dGFjaGVkX3RleHQpDQogICAgICAgICAgIA0KICAgICAgI3B1dHMgY2Fw dGlvbg0KICAgIGVuZA0KICANCiAgICBkZWYgY2hlY2tfYXR0YWNoZWRfdGV4 dChvYmpfaHduZCwgYXR0YWNoZWRfdGV4dCkNCiAgICAgICNwdXRzIGF0dGFj aGVkX3RleHQNCiAgICAgIGJ1ZiA9ICJcMCIgKiAxNg0KICAgICAgR2V0Q2xp ZW50UmVjdC5jYWxsKG9ial9od25kLCBidWYpDQogICAgICBAUmVjdCA9IFJl Y3QubmV3KGJ1ZikgICAgICAgIA0KICAgIGVuZA0KICAgIA0KICAgIGRlZiBz ZWxlY3Rfc2VsZWN0aW9uKGNvbWJvX3NlbGVjdGlvbikNCiAgICAgIA0KICAg IGVuZA0KICAgIGF0dHJfYWNjZXNzb3IgOm5hbWUsIDphdHRhY2hlZF90ZXh0 LCA6em9yZGVyLCA6Y2FwdGlvbg0KICAgIA0KICAgIGRlZiBmaW5kX2NvbWJv KGNvbnRhaW5lcikNCiAgICAgIA0KICAgICAgY2JfaHduZCA9IEZpbmRXaW5k b3dFeC5jYWxsKGNvbnRhaW5lci5jb20sMCxjb250YWluZXIubmFtZS50b19z LGNvbnRhaW5lci5jYXB0aW9uLnRvX3MpDQogICAgICBAY2JfaHduZCA9IGNi X2h3bmQNCg0KICAgICAgI0dldHRpbmcgdGhlIENvbWJvSW5mbyBvbiBob2xk DQogICAgICAjYnVmID0gIlwwIiAqIDI1NQ0KICAgICAgI0dldENvbWJvQm94 SW5mby5jYWxsKGNfaHduZCwgYnVmKQ0KICAgICAgI0Bjb21ibyA9IENvbWJv SW5mby5uZXcoYnVmKQ0KICAgICAgI3B1dHMgY2JfaHduZA0KICAgICAgICAN CiAgICBlbmQNCiAgICBhdHRyX2FjY2Vzc29yIDpjYl9od25kDQogIA0KICAg IGRlZiBnZXRfY29tYm9fY291bnQNCiAgICAgIGNiX2NvdW50ID0gU2VuZE1l c3NhZ2VBLmNhbGwoc2VsZi5jYl9od25kLCAzMjYsIDAsIDApDQogICAgICBy ZXR1cm4gY2JfY291bnQNCiAgICBlbmQNCiAgICANCiAgICBkZWYgc2VsZWN0 X3N0cmluZyhzdHJpbmcpDQogICAgICAjUmV0dXJuIFBvc2l0aW9uIGJ5IGlu dGVnZXINCiAgICAgIGNiX3NlbGVjdHN0cmluZyA9IFNlbmRNZXNzYWdlQS5j YWxsKHNlbGYuY2JfaHduZCwgQ0JfU0VMRUNUU1RSSU5HLCAtMSwgc3RyaW5n KQ0KICAgICAgcmV0dXJuIGNiX3NlbGVjdHN0cmluZw0KICAgIGVuZA0KICAg IA0KICAgIGRlZiBnZXRfc3RhdGUNCiAgICAgICNSZXR1cm4gMT1UcnVlDQog ICAgICBjYl9nZXRkcm9wcGVkc3RhdGUgPSBTZW5kTWVzc2FnZUEuY2FsbChz ZWxmLmNiX2h3bmQsIENCX0dFVERST1BQRURTVEFURSwgMCwgMCkNCiAgICAg IHJldHVybiBjYl9nZXRkcm9wcGVkc3RhdGUNCiAgICBlbmQNCiAgICANCiAg ICAjVG9ETy4gRmFpbGluZw0KICAgIGRlZiBnZXRfY2JfdGV4dChwb3NpdGlv bikNCiAgICAgIGJ1ZiA9ICJcMCIgKiAxNg0KICAgICAgY2JfZ2V0bGJ0ZXh0 ID0gU2VuZE1lc3NhZ2VBLmNhbGwoc2VsZi5jYl9od25kLCBDQl9HRVRMQlRF WFQsIHBvc2l0aW9uLCBidWYpDQogICAgICBhID0gYnVmLnVucGFjaygibCIp DQogICAgICByZXR1cm4gY2JfZ2V0bGJ0ZXh0DQogICAgZW5kDQogICAgDQog ICAgZGVmIGdldF9jYl90ZXh0X2xlbihwb3NpdGlvbikNCiAgICAgIGJ1ZiA9 ICIiLmNlbnRlcigyNTUpDQogICAgICBjYl9nZXRsYnRleHRsZW4gPSBTZW5k TWVzc2FnZUEuY2FsbChzZWxmLmNiX2h3bmQsIENCX0dFVExCVEVYVExFTiwg cG9zaXRpb24sIGJ1ZikNCiAgICAgIHJldHVybiBjYl9nZXRsYnRleHRsZW4N CiAgICBlbmQNCiAgICANCiAgZW5kDQogIA0KICBjbGFzcyBDb21ib19MaXN0 IDwgQ29tYm9saXN0DQogICAgSU5QVVRfVFlQRVMgPSBbImNhcHRpb24iLCAi bmFtZSIsICJhdHRhY2hlZF90ZXh0IiwgInpvcmRlciJdDQogIGVuZCANCiAg DQplbmQNCg0KI1N0YXRpYyBUZXh0IENsYXNzDQptb2R1bGUgV2ludGlyDQog IGNsYXNzIFN0YXRpYw0KICAgIA0KICAgIEZpbmRXaW5kb3dFeCA9IFdpbjMy QVBJLm5ldygndXNlcjMyJywgJ0ZpbmRXaW5kb3dFeCcsIFsnUCddICogNCwg J0wnKQ0KICAgIEdldENsaWVudFJlY3QgPSBXaW4zMkFQSS5uZXcoJ3VzZXIz MicsJ0dldENsaWVudFJlY3QnLCdMUCcsJ0knKQ0KICAgIEdldFdpbmRvd1Jl Y3QgPSBXaW4zMkFQSS5uZXcoJ3VzZXIzMicsJ0dldFdpbmRvd1JlY3QnLCdM UCcsJ0knKQ0KICAgIA0KICAgIGluY2x1ZGUgV2ludGlyOjpHdWlUZXN0DQog ICAgDQogICAgZGVmIGluaXRpYWxpemUoY29udGFpbmVyLCBjYXB0aW9uLCBu YW1lLCBhdHRhY2hlZF90ZXh0LCB6b3JkZXIpDQogICAgICBAY29tID0gY29u dGFpbmVyLmNvbQ0KICAgICAgZmluZF9zdGF0aWNfdGV4dChjb250YWluZXIp DQogICAgZW5kDQogICAgDQogICAgZGVmIGZpbmRfc3RhdGljX3RleHQoY29u dGFpbmVyKQ0KICAgICAgc3RfaHduZCA9IEZpbmRXaW5kb3dFeC5jYWxsKGNv bnRhaW5lci5jb20sMCxjb250YWluZXIubmFtZS50b19zLGNvbnRhaW5lci5j YXB0aW9uLnRvX3MpDQogICAgICBnZXRfbG9jYXRpb25fYW5kX3NpemUoc3Rf aHduZCkNCiAgICAgICNwdXRzIHN0X2h3bmQgDQogICAgZW5kDQogICAgDQog ICAgZGVmIGdldF9sb2NhdGlvbl9hbmRfc2l6ZShvYmpfaHduZCkNCiAgICAg ICNHZXRXaW5kb3dSZWN0IGRldGFpbHMNCiAgICAgIGJ1ZiA9ICJcMCIgKiAx Ng0KICAgICAgR2V0V2luZG93UmVjdC5jYWxsKG9ial9od25kLCBidWYpDQog ICAgICBAV2luZG93UmVjdCA9IFJlY3QubmV3KGJ1ZikNCiAgICAgIA0KICAg ICAgI0dldENsaWVudFJlY3QgZGV0YWlscw0KICAgICAgYnVmID0gIlwwIiAq IDE2DQogICAgICBHZXRDbGllbnRSZWN0LmNhbGwob2JqX2h3bmQsIGJ1ZikN CiAgICAgIEBDbGllbnRSZWN0ID0gUmVjdC5uZXcoYnVmKQ0KICAgIGVuZA0K ICAgIA0KICBlbmQNCiAgDQogIGNsYXNzIFN0YXRpY19UZXh0IDwgU3RhdGlj DQogICAgSU5QVVRfVFlQRVMgPSBbImNhcHRpb24iLCAibmFtZSIsICJhdHRh Y2hlZF90ZXh0IiwgInpvcmRlciJdDQogIGVuZA0KZW5kDQoNCm1vZHVsZSBX aW50aXINCiAgY2xhc3MgVGFiQ29udHJvbA0KDQogICAgU2VuZE1lc3NhZ2VB ID0gV2luMzJBUEkubmV3KCd1c2VyMzInLCdTZW5kTWVzc2FnZUEnLCdMSUlQ JywnSScpDQogICAgRmluZFdpbmRvd0V4ID0gV2luMzJBUEkubmV3KCd1c2Vy MzInLCAnRmluZFdpbmRvd0V4JywgWydQJ10gKiA0LCAnTCcpDQogICAgDQog ICAgVENNX0dFVElURU1DT1VOVCA9IDQ4NjgNCiAgICBUQ01fR0VUQ1VSU0VM ID0gNDg3NQ0KICAgIFRDTV9TRVRDVVJTRUwgPSA0ODc2DQogICAgDQogICAg DQogICAgDQogICAgZGVmIGluaXRpYWxpemUoY29udGFpbmVyLCBjYXB0aW9u LCBuYW1lLCBhdHRhY2hlZF90ZXh0LCB6b3JkZXIpDQogICAgICBAY29tID0g Y29udGFpbmVyLmNvbQ0KICAgICAgDQogICAgICBmaW5kX3RhYl9jb250cm9s KGNvbnRhaW5lcikNCiAgICAgICNnZXRfY3VycmVudF90YWIoY29udGFpbmVy KQ0KICAgICAgI3B1dHMgY2FwdGlvbg0KICAgIGVuZA0KICAgIA0KICAgICNm aW5kIHRoZSB0YWIgY29udHJvbCBkZXNjcmliZWQNCiAgICBkZWYgZmluZF90 YWJfY29udHJvbChjb250YWluZXIpDQogICAgICANCiAgICAgIHRjX2h3bmQg PSBGaW5kV2luZG93RXguY2FsbChjb250YWluZXIuY29tLDAsY29udGFpbmVy Lm5hbWUudG9fcyxjb250YWluZXIuY2FwdGlvbi50b19zKQ0KICAgICAgQHRj X2h3bmQgPSB0Y19od25kDQogICAgICANCiAgICBlbmQNCiAgICANCiAgICBh dHRyX2FjY2Vzc29yIDp0Y19od25kDQogICAgDQogICAgZGVmIGdldF9jdXJy ZW50X3RhYg0KICAgICAgY3VyX3RhYiA9IFNlbmRNZXNzYWdlQS5jYWxsKHNl bGYudGNfaHduZCwgVENNX0dFVENVUlNFTCwgMCwgMCkNCiAgICAgICNwdXRz IGN1cl90YWINCiAgICAgIHJldHVybiBjdXJfdGFiDQogICAgZW5kDQoNCiAg ICBkZWYgc2V0X3RhYihpbmRleCkNCiAgICAgIFNlbmRNZXNzYWdlQS5jYWxs KHNlbGYudGNfaHduZCwgVENNX1NFVENVUlNFTCwgaW5kZXgsIDApDQogICAg ZW5kDQogICAgDQogICAgZGVmIGdldF90YWJfY291bnQNCiAgICAgIHRiX2Nv dW50ID0gU2VuZE1lc3NhZ2VBLmNhbGwoc2VsZi50Y19od25kLCBUQ01fR0VU SVRFTUNPVU5ULCAwLCAwKQ0KICAgICAgcmV0dXJuIHRiX2NvdW50DQogICAg ZW5kDQogICAgDQogICAgY2xhc3MgVGFiX0NvbnRyb2wgPCBUYWJDb250cm9s DQogICAgICBJTlBVVF9UWVBFUyA9IFsiY2FwdGlvbiIsICJuYW1lIiwgImF0 dGFjaGVkX3RleHQiLCAiem9yZGVyIl0NCiAgICBlbmQNCiAgICANCiAgZW5k DQplbmQNCg0KI0xpc3QgQm94IENsYXNzDQptb2R1bGUgV2ludGlyDQogIGNs YXNzIExpc3Rib3gNCiAgICANCiAgICBGaW5kV2luZG93RXggPSBXaW4zMkFQ SS5uZXcoJ3VzZXIzMicsICdGaW5kV2luZG93RXgnLCBbJ1AnXSAqIDQsICdM JykNCiAgICBHZXRMaXN0Qm94SW5mbyA9IFdpbjMyQVBJLm5ldygndXNlcjMy JywnR2V0TGlzdEJveEluZm8nLCdMUCcsICdMJykNCiAgICBTZW5kTWVzc2Fn ZUEgPSBXaW4zMkFQSS5uZXcoJ3VzZXIzMicsJ1NlbmRNZXNzYWdlQScsJ0xJ SVAnLCdJJykNCiAgICANCiAgICBkZWYgaW5pdGlhbGl6ZShjb250YWluZXIs IGNhcHRpb24sIG5hbWUsIGF0dGFjaGVkX3RleHQsIHpvcmRlcikNCiAgICAg IEBjb20gPSBjb250YWluZXIuY29tDQogICAgICANCiAgICAgIGZpbmRfbGlz dChjb250YWluZXIpDQogICAgICAjcHV0cyBjYXB0aW9uDQogICAgZW5kDQog IA0KICAgIGRlZiBzZWxlY3Rfc2VsZWN0aW9uKGNvbWJvX3NlbGVjdGlvbikN CiAgICAgIA0KICAgIGVuZA0KICAgIGF0dHJfYWNjZXNzb3IgOm5hbWUsIDph dHRhY2hlZF90ZXh0LCA6em9yZGVyLCA6Y2FwdGlvbg0KICAgIA0KICAgIGRl ZiBmaW5kX2xpc3QoY29udGFpbmVyKQ0KICAgICAgDQogICAgICBsYl9od25k ID0gRmluZFdpbmRvd0V4LmNhbGwoY29udGFpbmVyLmNvbSwwLGNvbnRhaW5l ci5uYW1lLnRvX3MsY29udGFpbmVyLmNhcHRpb24udG9fcykNCiAgICAgIEBs Yl9od25kID0gbGJfaHduZA0KICAgICAgDQogICAgICBub19sYl9pdGVtcyA9 IEdldExpc3RCb3hJbmZvLmNhbGwobGJfaHduZCwgY29udGFpbmVyLmNvbSkN CiAgICAgIEBub19sYl9pdGVtcyA9IG5vX2xiX2l0ZW1zDQogICAgICAjcHV0 cyBub19sYl9pdGVtcw0KICAgICAgDQogICAgZW5kDQogIA0KICAgIGRlZiBm aW5kX3N0cmluZ19pdGVtKHN0cmluZykNCiAgICAgIGxwX1Jlc3VsdCA9IFNl bmRNZXNzYWdlQS5jYWxsKHNlbGYubGJfaHduZCwgMzk5LCAtMSwgc3RyaW5n KQ0KICAgICAgI3B1dHMgbHBfUmVzdWx0DQogICAgZW5kDQogICAgDQogICAg ZGVmIHNlbGVjdF9saXN0X2JveF92YWx1ZSh2YWx1ZSkNCiAgICAgIFNlbmRN ZXNzYWdlQS5jYWxsKHNlbGYubGJfaHduZCwgMzkwLCB2YWx1ZSwgMCkNCiAg ICBlbmQNCiAgICBhdHRyX2FjY2Vzc29yIDpsYl9od25kLCA6bm9fbGJfaXRl bXMNCiAgICANCiAgZW5kDQogIA0KICBjbGFzcyBMaXN0X0JveCA8IExpc3Ri b3gNCiAgICBJTlBVVF9UWVBFUyA9IFsiY2FwdGlvbiIsICJuYW1lIiwgImF0 dGFjaGVkX3RleHQiLCAiem9yZGVyIl0NCiAgZW5kIA0KICANCmVuZA0KDQoj SW5wdXQgRWxlbWVudHMNCm1vZHVsZSBXaW50aXINCiAgDQogIGNsYXNzIElu cHV0RWxlbWVudCAgDQogICAgIA0KICAgIEZpbmRXaW5kb3dFeCA9IFdpbjMy QVBJLm5ldygndXNlcjMyJywgJ0ZpbmRXaW5kb3dFeCcsIFsnUCddICogNCwg J0wnKQ0KICAgIFNlbmRNZXNzYWdlQUIgID0gV2luMzJBUEkubmV3KCd1c2Vy MzInLCAnU2VuZE1lc3NhZ2UnLCBbIkwiLCAiTCIsICJQIiwgIlAiXSwgIkwi KQ0KICAgIFNlbmRNZXNzYWdlQSA9IFdpbjMyQVBJLm5ldygndXNlcjMyJywn U2VuZE1lc3NhZ2VBJywnTElJUCcsJ0knKQ0KICAgIFBvc3RNZXNzYWdlQSA9 IFdpbjMyQVBJLm5ldygndXNlcjMyJywnUG9zdE1lc3NhZ2VBJywnTElJTCcs J0knKQ0KICAgIEdldFdpbmRvd1JlY3QgPSBXaW4zMkFQSS5uZXcoJ3VzZXIz MicsJ0dldFdpbmRvd1JlY3QnLCdMUCcsJ0knKQ0KICAgIA0KICAgIFdNX1NF VFRFWFQgID0gMHgwMDBDDQogICAgIA0KICAgIA0KICAgICNGb3Igc2V0dGlu ZyBvYmplY3QgY29sb3IgLSB0ZW1wDQogICAgI2luY2x1ZGUgV2ludGlyOjpT ZXRPYmplY3RDb2xvdXINCiAgICANCiAgICANCiAgICBkZWYgaW50VmFsdWUg IA0KICAgICAgQHZhbHVlICANCiAgICBlbmQgIA0KICAgIGRlZiBpbml0aWFs aXplKGNvbnRhaW5lciwgY2FwdGlvbiwgbmFtZSwgYXR0YWNoZWRfdGV4dCwg em9yZGVyKQ0KICAgICAgI3NldF9jb250YWluZXIgY29udGFpbmVyDQogICAg ICANCiAgICAgIGlmIGlzX2NhcHRpb24oY2FwdGlvbikgPT0gdHJ1ZQ0KICAg ICAgICAjcHV0cyAibmFtZSBpcyBnb29kIg0KICAgICAgZW5kDQogICAgICAg DQogICAgICBpZiBpc19uYW1lKG5hbWUpID09IHRydWUNCiAgICAgICAgI3B1 dHMgIm5hbWUgaXMgZ29vZCINCiAgICAgIGVuZA0KICAgICAgDQogICAgICBp ZiBpc19hdHRhY2hlZF90ZXh0KGF0dGFjaGVkX3RleHQpID09IHRydWUNCiAg ICAgICAgI3B1dHMgImF0dGFjaGVkX3RleHQgaXMgZ29vZCINCiAgICAgIGVu ZA0KICAgICAgDQogICAgICBpZiBpc196b3JkZXIoem9yZGVyKSA9PSB0cnVl DQogICAgICAgICNwdXRzICJ6b3JkZXIgaXMgZ29vZCINCiAgICAgIGVuZA0K ICAgICANCiAgICAgICNzZXQgdGhlIHZhbHVlIG9mIHRoZSB0ZXh0IGJveCAt IE5vdGU6IE1pZ2h0IGhhdmUgdG8gdXNlIFBvc3RNZXNzYWdlICAgICAgDQog ICAgICBkZWYgc2V0KHZhbHVlKQ0KICAgICAgICANCiAgICAgICAgI3RlbXAg bG9jYXRpb24gZm9yIHNldHRpbmcgYmFja2dyb3VuZCBvYmplY3QgY29sb3IN CiAgICAgICAgY29sID0gV2ludGlyOjpTZXRPYmplY3RDb2xvdXIubmV3KHNl bGYub2JqX2lkKQ0KICAgICAgICBjb2wuY29sb3Jfb24oc2VsZi5vYmpfaWQp DQogICAgICAgIA0KICAgICAgICBTZW5kTWVzc2FnZUEuY2FsbChzZWxmLm9i al9pZCwgV01fU0VUVEVYVCwgMCwgdmFsdWUpDQogICAgICBlbmQNCiAgICAg IA0KICAgICAgZGVmIGNsb3NlDQogICAgICAgIFNlbmRNZXNzYWdlQS5jYWxs KHNlbGYub2JqX2lkLCAxNiwgMCwgMCkNCiAgICAgIGVuZA0KICAgICAgDQog ICAgICBkZWYgY2xpY2sNCiAgICAgICAgI3B1dHMgImNsaWNrICN7QG9ial9p ZH0iDQogICAgICAgIFBvc3RNZXNzYWdlQS5jYWxsKEBvYmpfaWQsIDI0NSwg MCwgMCkNCiAgICAgIGVuZA0KICAgICAgDQogICAgICBjb20gPSBPYmplY3RB c3NlcnQubmV3DQogICAgICBjb20ub2JqZWN0X2V4aXN0cyhjb250YWluZXIp DQogICAgICBAb2JqX2lkID1jb20ub2JqX2lkIA0KICANCiAgICAgICNzdXBl cihuaWwpDQogICAgZW5kDQogICANCiAgICBhdHRyX2FjY2Vzc29yIDpvYmpf aWQNCiAgICANCiAgICBkZWYgaXNfY2FwdGlvbihjYXB0aW9uKQ0KICAgICAg aWYgY2FwdGlvbiAhPSBuaWwgYW5kIGNhcHRpb24gIT0gIiINCiAgICAgICAg IyNwdXRzICJBIHJlYWwgbmFtZSAje25hbWV9Ig0KICAgICAgICByZXR1cm4g dHJ1ZQ0KICAgICAgZW5kDQogICAgICANCiAgICBlbmQNCiAgICAgDQogICAg ZGVmIGlzX25hbWUobmFtZSkNCiAgICAgIGlmIG5hbWUgIT0gbmlsIGFuZCBu YW1lICE9ICIiDQogICAgICAgIHJldHVybiB0cnVlDQogICAgICBlbmQNCiAg ICAgIA0KICAgIGVuZA0KICAgIGRlZiBpc19hdHRhY2hlZF90ZXh0KGF0dGFj aGVkX3RleHQpDQogICAgICBpZiBhdHRhY2hlZF90ZXh0ICE9IG5pbCBhbmQg YXR0YWNoZWRfdGV4dCAhPSAiIiANCiAgICAgICAgIyNwdXRzICJSZWFsIHRl eHQgI3thdHRhY2hlZF90ZXh0fSINCiAgICAgICAgDQogICAgICAgIGJ1ZiA9 ICJcMCIgKiAxNg0KICAgICAgICBHZXRXaW5kb3dSZWN0LmNhbGwoY29tLCBi dWYpDQogICAgICAgIEBSZWN0ID0gUmVjdC5uZXcoYnVmKSAgICAgICAgDQog ICAgICAgDQogICAgICAgIHJldHVybiB0cnVlDQogICAgICBlbmQNCiAgICBl bmQNCiAgICBkZWYgaXNfem9yZGVyKHpvcmRlcikNCiAgICAgIGlmIHpvcmRl ciAhPSBuaWwgDQogICAgICAgICMjcHV0cyAiWm9yZGVyIGlzICN7em9yZGVy fSINCiAgICAgICAgcmV0dXJuIHRydWUNCiAgICAgIGVuZA0KICAgICAgIA0K ICAgIGVuZA0KICAgICANCiAgZW5kDQogIA0KICBjbGFzcyBUZXh0RmllbGQg PCBJbnB1dEVsZW1lbnQNCiAgICBJTlBVVF9UWVBFUyA9IFsiY2FwdGlvbiIs ICJuYW1lIiwgImF0dGFjaGVkX3RleHQiLCAiem9yZGVyIl0NCiAgZW5kDQog IA0KICBjbGFzcyBCdXR0b24gPCBJbnB1dEVsZW1lbnQNCiAgICBJTlBVVF9U WVBFUyA9IFsiY2FwdGlvbiIsICJidXR0b24iLCAiYXR0YWNoZWRfdGV4dCIs ICJ6b3JkZXIiXQ0KICBlbmQNCiAgDQplbmQNCg0KI0NvbnRhaW5lciBDbGFz cw0KbW9kdWxlIFdpbnRpcg0KICBtb2R1bGUgQ29udGFpbmVyDQogICAgDQog ICAgU2VuZE1lc3NhZ2VBID0gV2luMzJBUEkubmV3KCd1c2VyMzInLCdTZW5k TWVzc2FnZUEnLCdMSUlQJywnSScpICAgIA0KICAgICAgIA0KICAgICN0ZXh0 X2ZpZWxkIChkZXNjcmliZSkgLSBEZXNjcmliZSBFZGl0IG9iamVjdHMgdXNp bmcNCiAgICAjDQogICAgIzpuYW1lLCB0aGUgcmVhbCBuYW1lIG9mIHRoZSBv YmplY3QNCiAgICAjIFVzYWdlIDpuYW1lID0+ICJ0eHRGaXJzdG5hbWUiDQog ICAgIyANCiAgICAjOmF0dGFjaGVkX3RleHQsIHRoZSB0ZXh0IGFib3ZlIG9y IHRvIHRoZSBsZWZ0IG9mIHRoZSBmaWVsZA0KICAgICMgVXNhZ2UgOmF0dGFj aGVkX3RleHQgPT4gIkZpcnN0bmFtZSINCiAgICAjIA0KICAgICN6b3JkZXIs IHRoZSBwb3NpdGlvbiBvZiB0aGUgZWRpdCBmaWVsZCBvbiB0aGUgZm9ybSwg c3RhcnRpbmcgZnJvbSB0b3AgbGVmdCAtPiBib3R0b20gcmlnaHQNCiAgICAj IFVzZWFnZSA6em9yZGVyID0+IDANCiAgICBkZWYgdGV4dF9maWVsZChkZXNj cmliZSA9IG5pbCkNCiAgICAgIEBuYW1lID0gZGVzY3JpYmVbOm5hbWVdDQog ICAgICBAYXR0YWNoZWRfdGV4dCA9IGRlc2NyaWJlWzphdHRhY2hlZF90ZXh0 XQ0KICAgICAgQHpvcmRlciA9IGRlc2NyaWJlWzp6b3JkZXJdDQogICAgICBA Y2FwdGlvbiA9IGRlc2NyaWJlWzpjYXB0aW9uXQ0KICAgICAgDQogICAgICBU ZXh0RmllbGQubmV3KHNlbGYsIGRlc2NyaWJlWzpjYXB0aW9uXSwgZGVzY3Jp YmVbOm5hbWVdLCBkZXNjcmliZVs6YXR0YWNoZWRfdGV4dF0sIGRlc2NyaWJl Wzp6b3JkZXJdICkNCiAgICBlbmQNCiAgICANCiAgICBhdHRyX2FjY2Vzc29y IDpuYW1lLCA6YXR0YWNoZWRfdGV4dCwgOnpvcmRlciwgOmNhcHRpb24NCiAg ICANCiAgICBkZWYgYnV0dG9uKGRlc2NyaWJlID0gbmlsKQ0KICAgICAgQG5h bWU9ZGVzY3JpYmVbOm5hbWVdDQogICAgICBAYXR0YWNoZWRfdGV4dCA9IGRl c2NyaWJlWzphdHRhY2hlZF90ZXh0XQ0KICAgICAgQHpvcmRlciA9IGRlc2Ny aWJlWzp6b3JkZXJdDQogICAgICBAY2FwdGlvbiA9IGRlc2NyaWJlWzpjYXB0 aW9uXQ0KICAgICAgDQogICAgICBCdXR0b24ubmV3KHNlbGYsIGRlc2NyaWJl WzpjYXB0aW9uXSwgZGVzY3JpYmVbOm5hbWVdLCBkZXNjcmliZVs6YXR0YWNo ZWRfdGV4dF0sIGRlc2NyaWJlWzp6b3JkZXJdKQ0KICAgIGVuZA0KICAgIA0K ICAgIGF0dHJfYWNjZXNzb3IgOm1lbnVfcGF0aA0KICAgIA0KICAgIGRlZiBj bG9zZQ0KICAgICAgIFNlbmRNZXNzYWdlQS5jYWxsKHNlbGYuY29tLCAxNiwg MCwgMCkNCiAgICBlbmQgICAgDQogICAgDQogICAgZGVmIGZpbGVfbWVudShk ZXNjcmliZSA9IG5pbCkNCiAgICAgIEBtZW51X3BhdGg9ZGVzY3JpYmUgICAg ICANCiAgICAgIEZpbGVtZW51Lm5ldyhzZWxmLCBkZXNjcmliZVs6bWVudV9w YXRoXSkNCiAgICBlbmQNCiAgICANCiAgICBhdHRyX2FjY2Vzc29yIDpkaWFs b2dfbmFtZQ0KICAgIA0KICAgIGRlZiBkaWFsb2coZGVzY3JpYmU9bmlsKQ0K ICAgICAgQGRpYWxvZ19uYW1lID0gZGVzY3JpYmUNCiAgICAgIERpYWxvZy5u ZXcoc2VsZiwgZGVzY3JpYmVbOmRpYWxvZ19uYW1lXSkNCiAgICBlbmQNCiAg ICANCiAgICBkZWYgY29tYm9fbGlzdChkZXNjcmliZSA9IG5pbCkNCiAgICAg IEBjb21ibz1kZXNjcmliZSAgICAgIA0KICAgICAgQ29tYm9saXN0Lm5ldyhz ZWxmLCBkZXNjcmliZVs6Y29tYm9dKQ0KICAgIGVuZA0KICAgIA0KICAgIGRl ZiBzdGF0aWMoZGVzY3JpYmUgPSBuaWwpDQogICAgICBAc3RhdGljID0gZGVz Y3JpYmUNCiAgICAgIFN0YXRpY19UZXh0Lm5ldyhzZWxmLCBkZXNjcmliZVs6 Y2FwdGlvbl0pDQogICAgZW5kDQogIGVuZCAgDQplbmQNCg0KbW9kdWxlIFdp bnRpcg0KDQogIGNsYXNzIENvbQ0KICAgICAgDQogICAgQ3JlYXRlUHJvY2Vz cyA9IFdpbjMyQVBJLm5ldygna2VybmVsMzInLCdDcmVhdGVQcm9jZXNzJywn UFBQUElMUFBQUCcsJ0knKQ0KICAgIFdhaXRGb3JJbnB1dElkbGUgPSBXaW4z MkFQSS5uZXcoJ3VzZXIzMicsJ1dhaXRGb3JJbnB1dElkbGUnLCdJSScsJ0kn KQ0KICAgIEdldERlc2t0b3BXaW5kb3cgPSBXaW4zMkFQSS5uZXcoJ3VzZXIz MicsJ0dldERlc2t0b3BXaW5kb3cnLCdWJywnTCcpDQogICAgR2V0V2luZG93 ID0gV2luMzJBUEkubmV3KCd1c2VyMzInLCdHZXRXaW5kb3cnLCdMSScsJ0wn KQ0KICAgIEdldFdpbmRvd1RocmVhZFByb2Nlc3NJZCA9IFdpbjMyQVBJLm5l dygndXNlcjMyJywnR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkJywgJ0xQJywg J0wnKQ0KICAgIEdldFBhcmVudCA9IFdpbjMyQVBJLm5ldygndXNlcjMyJywn R2V0UGFyZW50JywnTCcsJ0wnKQ0KICAgIEdldEZvcmVncm91bmRXaW5kb3cg PSBXaW4zMkFQSS5uZXcoJ3VzZXIzMicsJ0dldEZvcmVncm91bmRXaW5kb3cn LCAnVicsICdMJykNCiAgICAgIA0KICAgIGluY2x1ZGUgV2ludGlyOjpDb250 YWluZXINCiAgICBpbmNsdWRlIFdpbnRpcjo6R3VpVGVzdA0KDQogICAgZGVm IHBpZA0KICAgICAgcGlkID0gWzBdLnBhY2soJ0wnKQ0KICAgICAgaHduZCA9 IEdldEZvcmVncm91bmRXaW5kb3cuY2FsbA0KICAgICAgR2V0V2luZG93VGhy ZWFkUHJvY2Vzc0lkLmNhbGwoaHduZCwgcGlkKQ0KICAgICAgcGlkID0gcGlk LnVucGFjaygnTCcpWzBdDQogICAgZW5kDQogICAgDQoNCiAgICAgICANCiAg ICBkZWYgY3JlYXRlX2FwcGxpY2F0aW9uX3dpbmRvdyh3aGF0KQ0KICAgICAg Y3JlYXRlX3Byb2Nlc3MobmlsLCB3aGF0KQ0KICAgIGVuZA0KICAgICAgIA0K ICAgIGRlZiBjcmVhdGVfcHJvY2VzcyhscEFwcGxpY2F0aW9uTmFtZSwgbHBD b21tYW5kTGluZSwgbHBDdXJyZW50RGlyZWN0b3J5PW5pbCwNCiAgICAgIGR3 TWlsbGlzZWNvbmRzPTYwMDAwKQ0KICAgICAgbHBTdGFydHVwSW5mbyA9IFs2 OF0ucGFjaygiTCIpICsgIlwwIiAqIDY0DQogICAgICBscFByb2Nlc3NJbmZv cm1hdGlvbiAgPSBbMCwwLDAsMF0ucGFjaygnTExMTCcpDQogICAgICBDcmVh dGVQcm9jZXNzLmNhbGwobHBBcHBsaWNhdGlvbk5hbWUsIGxwQ29tbWFuZExp bmUsIG5pbCwgbmlsLCAxLCAwLCBuaWwsICBscEN1cnJlbnREaXJlY3Rvcnks IGxwU3RhcnR1cEluZm8sIGxwUHJvY2Vzc0luZm9ybWF0aW9uKQ0KICAgICAg aFByb2Nlc3MgPSBscFByb2Nlc3NJbmZvcm1hdGlvbls4LDRdLnVucGFjaygn TCcpLmZpcnN0DQogICAgICANCiAgICAgIGNvbSA9IDANCiAgICAgIHByb2Nl c3NfaWRfY291bnQgPSAwDQogICAgICAjTm90IGEgZ3JlYXQgcGxhbiBidXQg V2FpdEZvcklucHV0SWRsZSBpcyBmYWlsaW5nDQogICAgICB3aGlsZSBjb20g PT0gMCBvciBwcm9jZXNzX2lkX2NvdW50ICE9IDEwDQogICAgICAgIGNvbSA9 IGdldGh3bmRmcm9tcHJvY2Vzc2lkKGhQcm9jZXNzKQ0KICAgICAgICAjY291 bnRlciAtIHNvIHRoYXQgdGhpcyBpc24ndCBlbmRsZXNzDQogICAgICAgIHBy b2Nlc3NfaWRfY291bnQgPSBwcm9jZXNzX2lkX2NvdW50ICsgMQ0KICAgICAg ZW5kDQogICAgICAjcHV0cyBjb20NCiAgICAgIGNvbSA9IEdldEZvcmVncm91 bmRXaW5kb3cuY2FsbA0KICAgICAgDQogICAgICByZXQgPSB3YWl0Rm9ySW5w dXRJZGxlKGhQcm9jZXNzLCBkd01pbGxpc2Vjb25kcykNCiAgICAgICMjcHV0 cyByZXQNCiAgICAgICNpZiBkd01pbGxpc2Vjb25kcyAhPSAwIGFuZCAocmV0 ID0gd2FpdEZvcklucHV0SWRsZShoUHJvY2VzcywgZHdNaWxsaXNlY29uZHMp KSAhPSAwDQogICAgICAjICByYWlzZSAiY3JlYXRlUHJvY2Vzcygje2xwQ29t bWFuZExpbmV9LCN7bHBDdXJyZW50RGlyZWN0b3J5fSwje2R3TWlsbGlzZWNv bmRzfSk6IiArDQogICAgICAjICAgICIgd2FpdEZvcklucHV0SWRsZSByZXR1 cm5zICN7cmV0fSINCiAgICAgICNlbmQNCiAgICAgIEBjb20gPSBjb20NCiAg ICAgICANCiAgICBlbmQNCiAgICANCiAgICBHV19DSElMRCA9IDUNCiAgICBH V19IV05ETkVYVCA9IDINCiAgICANCiAgICBkZWYgZ2V0aHduZGZyb21wcm9j ZXNzaWQoaFByb2Nlc3MpDQogICAgDQogICAgICBoV25kID0gR2V0RGVza3Rv cFdpbmRvdy5jYWxsKCkNCiAgICAgIHdpbmRvd19mb3VuZCA9IGZhbHNlDQog ICAgICANCiAgICAgIGhXbmRQcm9jZXNzID0gWzBdLnBhY2soJ0wnKQ0KDQog ICAgICB3aGlsZSBub3Qgd2luZG93X2ZvdW5kIGFuZCBoV25kICE9IDANCiAg ICAgICAgI0dldCB0aGUgQ2hpbGQgV2luZG93DQogICAgICAgIHRtcCA9IGhX bmQNCiAgICAgICAgaFduZCA9IEdldFdpbmRvdy5jYWxsKGhXbmQsIEdXX0NI SUxEKQ0KICAgICAgICBpZiBoV25kICE9IDAgdGhlbg0KICAgICAgICAgIGRs ID0gR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkLmNhbGwoaFduZCwgaFduZFBy b2Nlc3MpDQogICAgICAgICAgaFduZFByb2Nlc3MgPSBoV25kUHJvY2Vzcy51 bnBhY2soJ0wnKVswXQ0KDQogICAgICAgICAgaWYgaFduZFByb2Nlc3MgPT0g aFByb2Nlc3MgdGhlbiANCiAgICAgICAgICAgIHdpbmRvd19mb3VuZCA9IHRy dWUNCiAgICAgICAgICAgICNwdXRzICJ3aW5kb3dfZm91bmQiDQogICAgICAg ICAgZW5kDQogICAgICAgICAgaFduZFByb2Nlc3MgPSBbMF0ucGFjaygnTCcp DQogICAgICAgIGVsc2UNCiAgICAgICAgICBoV25kID0gdG1wDQogICAgICAg ICAgaFduZCA9IEdldFdpbmRvdy5jYWxsKGhXbmQsIEdXX0hXTkRORVhUKQ0K ICAgICAgICAgIGlmIGhXbmQgIT0gMCB0aGVuIA0KICAgICAgICAgICAgZGwg PSBHZXRXaW5kb3dUaHJlYWRQcm9jZXNzSWQuY2FsbChoV25kLCBoV25kUHJv Y2VzcykNCiAgICAgICAgICAgIGhXbmRQcm9jZXNzID0gaFduZFByb2Nlc3Mu dW5wYWNrKCdMJylbMF0NCiAgICAgICAgICAgIGlmIGhXbmRQcm9jZXNzID09 IGhQcm9jZXNzIHRoZW4gDQogICAgICAgICAgICAgIHdpbmRvd19mb3VuZCA9 IHRydWUNCiAgICAgICAgICAgICAgI3B1dHMgIndpbmRvd19mb3VuZCINCiAg ICAgICAgICAgIGVuZA0KICAgICAgICAgICAgaFduZFByb2Nlc3MgPSBbMF0u cGFjaygnTCcpDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgaFduZCA9 IHRtcA0KICAgICAgICAgICAgaFduZCA9IEdldFBhcmVudC5jYWxsKGhXbmQp DQogICAgICAgICAgICBpZiBoV25kICE9IDAgdGhlbiANCiAgICAgICAgICAg ICAgYnJhbmNoX2ZvdW5kID0gZmFsc2UNCiAgICAgICAgICAgICAgd2hpbGUg bm90IGJyYW5jaF9mb3VuZCBhbmQgbm90IHdpbmRvd19mb3VuZCBhbmQgaFdu ZCAhPSAwDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAg ICAgICB0bXAgPSBoV25kDQogICAgICAgICAgICAgICAgaFduZCA9IEdldFdp bmRvdy5jYWxsKGhXbmQsIEdXX0hXTkRORVhUKQ0KICAgICAgICAgICAgICAg IGlmIGhXbmQgIT0gMCB0aGVuIA0KICAgICAgICAgICAgICAgICAgYnJhbmNo X2ZvdW5kID0gdHJ1ZQ0KICAgICAgICAgICAgICAgICAgZGwgPSBHZXRXaW5k b3dUaHJlYWRQcm9jZXNzSWQuY2FsbChoV25kLCBoV25kUHJvY2VzcykNCiAg ICAgICAgICAgICAgICAgIGhXbmRQcm9jZXNzID0gaFduZFByb2Nlc3MudW5w YWNrKCdMJylbMF0NCiAgICAgICAgICAgICAgICAgIGlmIGhXbmRQcm9jZXNz ID09IGhQcm9jZXNzIHRoZW4gDQogICAgICAgICAgICAgICAgICAgIHdpbmRv d19mb3VuZCA9IHRydWUNCiAgICAgICAgICAgICAgICAgICAgI3B1dHMgIndp bmRvd19mb3VuZCINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg DQogICAgICAgICAgICAgICAgICBlbmQNCiAgICAgICAgICAgICAgICAgIGhX bmRQcm9jZXNzID0gWzBdLnBhY2soJ0wnKQ0KICAgICAgICAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICAgICAgIGhXbmQgPSB0bXANCiAgICAgICAgICAg ICAgICAgIGhXbmQgPSBHZXRQYXJlbnQuY2FsbChoV25kKQ0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGVuZA0KICAg ICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIGVuZA0KICAgICAgICAgIGVu ZA0KICAgICAgICBlbmQNCiAgICAgIGVuZA0KICAgICAgDQogICAgICBAY29t ID0gaFduZA0KICAgICAgcmV0dXJuIGhXbmQNCiAgICAgIA0KICAgIGVuZA0K ICAgIA0KICAgIElORklOSVRFID0gMHhmZmZmZmZmZiAgICMgSW5maW5pdGUg dGltZW91dA0KICAgIGRlZiB3YWl0Rm9ySW5wdXRJZGxlKGhQcm9jZXNzLCBk d01pbGxpc2Vjb25kcz1JTkZJTklURSkNCiAgICAgIFdhaXRGb3JJbnB1dElk bGUuY2FsbChoUHJvY2VzcywgZHdNaWxsaXNlY29uZHMpDQogICAgZW5kDQog ICAgICAgDQogICAgYXR0cl9hY2Nlc3NvciA6b2JqX2NsYXNzLCA6bmFtZSwg OmNvbQ0KDQogICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucw0KICAgICAgI3B1 dHMgImluaXQgb3B0Ig0KICAgIGVuZA0KDQogICAgZGVmIF9hdHRhY2hfaW5p dCBkZXNjcmliZQ0KICAgICAgQG9ial9jbGFzcyA9IGRlc2NyaWJlWzpvYmpf Y2xhc3NdDQogICAgICBAbmFtZSA9IGRlc2NyaWJlWzpuYW1lXQ0KICAgICAN CiAgICAgIGF0dGFjaF9jb21fd2luZG93IEBvYmpfY2xhc3MsIEBuYW1lDQog ICAgICBpbml0aWFsaXplX29wdGlvbnMNCiAgICAgIHdhaXQNCiAgICAgICAg IA0KICAgIGVuZA0KDQogICAgZGVmIHNlbGYuY3JlYXRlIGRlc2NyaWJlDQoN CiAgICAgIEBscEFwcGxpY2F0aW9uTmFtZSA9IGRlc2NyaWJlWzpuYW1lXQ0K ICAgICAgQGxwQ29tbWFuZExpbmV0ID0gZGVzY3JpYmVbOmNvbW1hbmRfbGlu ZV0NCg0KICAgICAgY29tID0gbmV3IGRlc2NyaWJlDQogICAgICBjb20uX25l d193aW5kb3dfaW5pdCBAbHBBcHBsaWNhdGlvbk5hbWUNCiAgICAgIGNvbQ0K ICAgIGVuZA0KDQogICAgZGVmIHNlbGYuYXR0YWNoIGRlc2NyaWJlDQogICAg ICAjQXR0YWNoIHRoZSBob3csIHdoYXQgdmFyaWFudHMNCiAgICAgIGNvbSA9 IG5ldyB0cnVlDQogICAgICBjb20uX2F0dGFjaF9pbml0KGRlc2NyaWJlKQ0K ICAgICAgY29tDQogICAgZW5kDQoNCiAgICBkZWYgaW5pdGlhbGl6ZSBkZXNj cmliZQ0KICAgICAgI3B1dHMgZGVzY3JpYmUNCiAgICAgICMgX25ld193aW5k b3dfaW5pdCBkZXNjcmliZVs6bmFtZV0NCiAgICBlbmQNCg0KICAgIGF0dHJf YWNjZXNzb3IgOm5hbWUsIDpjb21tYW5kX2xpbmUNCg0KICAgIGRlZiBfbmV3 X3dpbmRvd19pbml0IHdoYXQNCiAgICAgIGNyZWF0ZV9wcm9jZXNzKG5pbCwg d2hhdCkNCiAgICBlbmQNCg0KICAgIGRlZiBzZWxmLl9maW5kKGhvdywgd2hh dCkNCiAgICAgIGllVGVtcCA9ICIiDQogICAgICByZXR1cm4gaWVUZW1wDQog ICAgZW5kIA0KDQogICAgZGVmIHdhaXQobm9fc2xlZXA9ZmFsc2UpDQogICAg ICAjcHV0cyAid2FpdCINCiAgICBlbmQNCg0KICAgIGRlZiBsb2cod2hhdCkN CiAgICAgICNwdXRzICJsb2ciDQogICAgICBAbG9nZ2VyLmRlYnVnKHdoYXQp IGlmIEBsb2dnZXINCiAgICBlbmQgDQoNCiAgICBkZWYgYXR0YWNoX2NvbV93 aW5kb3cgaG93LCB3aGF0IA0KICAgICAgbG9nICJTZWVraW5nIFdpbmRvdyB3 aXRoICN7aG93fTogI3t3aGF0fSINCiAgICAgICNwdXRzICJhdHRhY2ggY29t IHdpbmRvdyINCiAgICAgIGNvbVRlbXAgPSBuaWwNCiAgICAgICNiZWdpbg0K ICAgICAgIyAgV2ludGlyOjp1bnRpbF93aXRoX3RpbWVvdXQgZG8NCiAgICAg ICAgICAgIA0KICAgICAgY29tVGVtcCA9IGFzc2lnbl9jb20oaG93LCB3aGF0 KQ0KICAgICAgIyAgZW5kDQogICAgICAjcmVzY3VlIFRpbWVPdXRFeGNlcHRp b24NCiAgICAgICMgIHJhaXNlIE5vTWF0Y2hpbmdXaW5kb3dGb3VuZEV4Y2Vw dGlvbiwNCiAgICAgICMgICAgICAgICAgICJVbmFibGUgdG8gbG9jYXRlIGEg d2luZG93IHdpdGggI3tob3d9IG9mICN7d2hhdH0iDQogICAgICAjZW5kDQog ICAgICBAY29tID0gY29tVGVtcA0KICAgICAgI3JldHVybiBAY29tDQogICAg ZW5kDQogICAgcHJpdmF0ZSA6YXR0YWNoX2NvbV93aW5kb3cgDQoNCiAgZW5k DQogICANCmVuZA0KDQoNCiNDb21ib0luZm8gQ2xhc3MgLSBOZWVkcyBmdXJ0 aGVyIGludmVzdGlnYXRpb24NCm1vZHVsZSBXaW50aXINCiAgDQogIGNsYXNz IENvbWJvSW5mbw0KICANCiAgICAgIGRlZiBpbml0aWFsaXplKGJ1ZikNCiAg ICAgICAgQGNiU2l6ZSxAcmNJdGVtLEBzdGF0ZUJ1dHRvbixAaHduZENvbWJv LEBod25kSXRlbSxAaHduZExpc3QgPSBidWYudW5wYWNrKCJJUFBJSUkiKQ0K ICAgICAgICAjcHV0cyBAY2JTaXplDQogICAgICBlbmQNCiAgICAgIGF0dHJf YWNjZXNzb3IgOmNiU2l6ZSw6cmNJdGVtLDpyY0l0ZW0sOnN0YXRlQnV0dG9u LDpod25kQ29tYm8sOmh3bmRJdGVtLDpod25kTGlzdA0KDQogIGVuZA0KICAN CmVuZA0KDQptb2R1bGUgV2ludGlyDQogIGNsYXNzIFNldE9iamVjdENvbG91 cg0KICAgIA0KICAgIFNlbmRNZXNzYWdlQSA9IFdpbjMyQVBJLm5ldygndXNl cjMyJywnU2VuZE1lc3NhZ2VBJywnTElJUCcsJ0knKQ0KIyAgIFNldEJrQ29s b3IgPSBXaW4zMkFQSS5uZXcoJ3VzZXIzMicsICdTZXRCa0NvbG9yJywgJ0xJ JywnTCcpDQogICAgR2V0V2luZG93REMgPSBXaW4zMkFQSS5uZXcoJ3VzZXIz MicsJ0dldFdpbmRvd0RDJywnTCcsJ0wnKQ0KICAgIFNldEZvcmVncm91bmRX aW5kb3cgPSBXaW4zMkFQSS5uZXcoJ3VzZXIzMicsJ1NldEZvcmVncm91bmRX aW5kb3cnLCdMJywnSScpDQogICAgR2V0REMgPSBXaW4zMkFQSS5uZXcoJ3Vz ZXIzMicsJ0dldERDJywnTCcsJ0wnKQ0KICAgIA0KICAgIA0KICAgIEVNX1NF VEJLR05EQ09MT1IgPSAweDA0NDMNCiAgICBTRVRfQ09MT1JfWUVMTE9XID0g MHhERkZGQTUNCiAgICANCiAgICBkZWYgaW5pdGlhbGl6ZShjb20pDQogICAg ICAjVG9EbyBjaGVjayB0aGUgb2JqZWN0IHR5cGUgZm9yIGNvcnJlY3QgY29s b3IgY2hhbmdlDQogICAgICANCiAgICAgICNwdXRzIGNvbQ0KICAgIGVuZA0K ICANCiAgICAjVHVybiB0aGUgYmFja2dyb3VuZCBvZiB0aGUgb2JqZWN0IGNv bG9yIG9uDQogICAgZGVmIGNvbG9yX29uKGNvbSkNCiAgICAgICN5ZWxsb3cN CiAgICAgIA0KICAgICAgY29sb3Jfb24gPSB0cnVlDQogICAgICBjb2xvcl9v biA9IFNlbmRNZXNzYWdlQS5jYWxsKGNvbSwgRU1fU0VUQktHTkRDT0xPUiwg MCwgU0VUX0NPTE9SX1lFTExPVykNCiAgICAgIHJldHVybiBjb2xvcl9vbiAg ICAgDQogICAgZW5kDQogIA0KICAgICNQcm90ZWN0IGZyb20gdXNlciBzZXR0 aW5nIGJhY2tncm91bmQgb2JqZWN0cyBjb2xvciBzdGF0dXMNCiAgICAjcHJp dmF0ZSA6Y29sb3Jfb24NCiAgICANCiAgICAjVHVybiB0aGUgYmFja2dyb3Vu ZCBvZiB0aGUgY29sb3Igb2ZmDQogICAgZGVmIGNvbG9yX29mZg0KICAgIGVu ZA0KICAgIA0KICAgICNHZXQgdGhlIGN1cnJlbnQgY29sb3Igb2YgdGhlIG9i amVjdHMgYmFja2dyb3VuZA0KICAgIGRlZiBnZXRfb2JqZWN0X2JrX2NvbG9y KGNvbSkNCiAgICAgIA0KICAgICAgI1NldHRpbmcgdGhlIHdpbmRvdyB0byBm b2N1cyBjYWxsIHRvIHBpeGVsL2NvbG9yDQogICAgICBTZXRGb3JlZ3JvdW5k V2luZG93LmNhbGwoY29tKQ0KICAgICAgDQogICAgICAjR2V0IHRoZSBEQw0K ICAgICAgaGRjX3NvdXJjZSA9IEdldERDLmNhbGwoY29tKQ0KICAgICAgI3B1 dHMgaGRjX3NvdXJjZQ0KICAgIA0KICAgIGVuZA0KICAgIA0KICAgICNQcm90 ZWN0IGZyb20gdXNlciBzZXR0aW5nIGJhY2tncm91bmQgb2JqZWN0cyBjb2xv ciBzdGF0dXMNCiAgICAjcHJpdmF0ZSA6Y29sb3Jfb2ZmDQogICAgDQogIGVu ZA0KZW5k --mimepart_4d2c507c6098_1dc2a7279f0364a--