LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ29weXJpZ2h0IChDKSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiBhbmQgaXRzIGFmZmlsaWF0ZXMKClRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgb3duZWQgYW5kIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwKSW50ZXJuYXRpb25hbCBMdGQuIGFuZC9vciBpdHMgYWZmaWxpYXRlcyAoIk1hcnZlbGwiKSB1bmRlciB0aGUgZm9sbG93aW5nCmFsdGVybmF0aXZlIGxpY2Vuc2luZyB0ZXJtcy4gIE9uY2UgeW91IGhhdmUgbWFkZSBhbiBlbGVjdGlvbiB0byBkaXN0cmlidXRlIHRoZQpGaWxlIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWx0ZXJuYXRpdmVzLCBwbGVhc2UgKGkpIGRlbGV0ZSB0aGlzCmludHJvZHVjdG9yeSBzdGF0ZW1lbnQgcmVnYXJkaW5nIGxpY2Vuc2UgYWx0ZXJuYXRpdmVzLCAoaWkpIGRlbGV0ZSB0aGUgdHdvCmxpY2Vuc2UgYWx0ZXJuYXRpdmVzIHRoYXQgeW91IGhhdmUgbm90IGVsZWN0ZWQgdG8gdXNlIGFuZCAoaWlpKSBwcmVzZXJ2ZSB0aGUKTWFydmVsbCBjb3B5cmlnaHQgbm90aWNlIGFib3ZlLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKTWFydmVsbCBDb21tZXJjaWFsIExpY2Vuc2UgT3B0aW9uCgpJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFydmVsbCBhbmQgeW91IGhhdmUgZW50ZXJlZCBpbnRvIGEgY29tbWVyY2lhbApsaWNlbnNlIGFncmVlbWVudCAoYSAiQ29tbWVyY2lhbCBMaWNlbnNlIikgd2l0aCBNYXJ2ZWxsLCB0aGUgRmlsZSBpcyBsaWNlbnNlZAp0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBhcHBsaWNhYmxlIENvbW1lcmNpYWwgTGljZW5zZS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk1hcnZlbGwgR1BMIExpY2Vuc2UgT3B0aW9uCgpJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFydmVsbCwgeW91IG1heSBvcHQgdG8gdXNlLCByZWRpc3RyaWJ1dGUgYW5kL29yCm1vZGlmeSB0aGlzIEZpbGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR2VuZXJhbApQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MSAodGhlICJHUEwgTGljZW5zZSIpLCBhIGNvcHkgb2Ygd2hpY2ggaXMKYXZhaWxhYmxlIGFsb25nIHdpdGggdGhlIEZpbGUgaW4gdGhlIGxpY2Vuc2UudHh0IGZpbGUgb3IgYnkgd3JpdGluZyB0byB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IG9yCm9uIHRoZSB3b3JsZHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgoKVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUgSU1QTElFRApXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRVhQUkVTU0xZCkRJU0NMQUlNRUQuICBUaGUgR1BMIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IHRoaXMgd2FycmFudHkKZGlzY2xhaW1lci4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKTWFydmVsbCBCU0QgTGljZW5zZSBPcHRpb24KCklmIHlvdSByZWNlaXZlZCB0aGlzIEZpbGUgZnJvbSBNYXJ2ZWxsLCB5b3UgbWF5IG9wdCB0byB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IKbW9kaWZ5IHRoaXMgRmlsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyB0ZXJtcy4KUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgoKICAgICogICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCgkgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KCiAgICAqICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICAqICAgTmVpdGhlciB0aGUgbmFtZSBvZiBNYXJ2ZWxsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKICAgICAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CiAgICAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORApBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTClNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogbXZEcmFtSWZCYXNpY0FzbS5zCioKKiBERVNDUklQVElPTjoKKiAgICAgICBNZW1vcnkgZnVsbCBkZXRlY3Rpb24gYW5kIGJlc3QgdGltaW5nIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBpbgoqICAgICAgIEMgY29kZS4gQyBydW50aW1lIGVudmlyb25tZW50IHJlcXVpcmVzIGEgc3RhY2suIFRoaXMgbW9kdWxlIEFQSQoqICAgICAgIGluaXRpYWxpemUgRFJBTSBpbnRlcmZhY2UgY2hpcCBzZWxlY3QgMCBmb3IgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IKKiAgICAgICB0aGUgdXNlIG9mIHN0YWNrLgoqICAgICAgIFRoZSBtb2R1bGUgQVBJIGFzc3VtZXMgRFJBTSBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gSTJDIEVFUFJPTSByZXNpZGUKKiAgICAgICBpbiBhIGdpdmVuIEkyQyBhZGRyZXNzIE1WX0JPQVJEX0RJTU0wX0kyQ19BRERSLiBUaGUgSTJDIEVFUFJPTQoqICAgICAgIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGlzIGFzc3VtZWQgdG8gYmUgb3JnZW56aWVkIGluIGNvbW1vbiBEUkFNCiogICAgICAgdmVuZG9yIFNQRCBzdHJ1Y3R1cmUuCiogICAgICAgTk9URTogREZDREwgdmFsdWVzIGFyZSBhc3N1bWVkIHRvIGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8KKiAgICAgICB0aGlzIG1vZHVsZSBBUEkgYWN0aXZpdHkuCioKKgoqIERFUEVOREVOQ0lFUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBpbmNsdWRlcyAqLwojZGVmaW5lIE1WX0FTTUxBTkdVQUdFCiNpbmNsdWRlICJtdk9zQXNtLmgiCiNpbmNsdWRlICJtdlN5c0h3Q29uZmlnLmgiCiNpbmNsdWRlICJtdkRyYW1JZlJlZ3MuaCIKI2luY2x1ZGUgIm12RHJhbUlmQ29uZmlnLmgiCiNpbmNsdWRlICJtdkNwdUlmUmVncy5oIgojaW5jbHVkZSAicGV4L212UGV4UmVncy5oIgojaW5jbHVkZSAicGNpL212UGNpUmVncy5oIgojaW5jbHVkZSAibXZDdHJsRW52U3BlYy5oIgojaW5jbHVkZSAibXZDdHJsRW52QXNtLmgiCiNpbmNsdWRlICJjcHUvbXZDcHVBcm0uaCIKI2luY2x1ZGUgIm12Q29tbW9uLmgiCgovKiBkZWZpbmVzICAqLwoKLyogbG9jYWxzICAgKi8KLmRhdGEKLmdsb2JsIF9tdkRyYW1JZkNvbmZpZwoKLnRleHQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogX212RHJhbUlmQ29uZmlnIC0gQmFzaWMgRFJBTSBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24uCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGUgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBmb2xsb3dpbmcgRFJBTSBwYXJhbWV0ZXJzIHVzaW5nIHRoZQoqICAgICAgIHZhbHVlcyBwcmVwYXJlZCBieSBtdkRyYW1JZkRldGVjdCByb3V0aW5lLiBWYWx1ZXMgYXJlIGxvY2F0ZWQKKiAgICAgICBpbiBwcmVkZWZpbmVkIHJlZ2lzdGVycy4KKgoqIElOUFVUOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVQ6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTjoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpfbXZEcmFtSWZDb25maWc6CgogICAgICAgIC8qIFNhdmUgcmVnaXN0ZXIgb24gc3RhY2sgKi8KCWNtcAlzcCwgIzAKCWJlcQlub19zdGFja19zCnNhdmVfb25fc3RhY2s6CiAgICAgICAgc3RtZGIJc3AhLCB7cjEsIHIyLCByMywgcjQsIHI3LCByMTF9Cm5vX3N0YWNrX3M6CgoJLyogMSkgV3JpdGUgdG8gU0RSQU0gY29uaWd1cmF0aW9uIHJlZ2lzdGVyICovCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBEUkFNX0JVRl9SRUcxKQogICAgICAgIGxkciAgICAgcjQsIFtyMV0KICAgICAgICBsZHIgICAgIHIxLCA9KElOVEVSX1JFR1NfQkFTRSArIFNEUkFNX0NPTkZJR19SRUcpCiAgICAgICAgc3RyICAgICByNCwgW3IxXQoKCS8qIDIpIFdyaXRlIER1bml0IGNvbnRyb2wgbG93IHJlZ2lzdGVyICovCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBEUkFNX0JVRl9SRUczKQogICAgICAgIGxkciAgICAgcjQsIFtyMV0KICAgICAgICBsZHIgICAgIHIxLCA9KElOVEVSX1JFR1NfQkFTRSArIFNEUkFNX0RVTklUX0NUUkxfUkVHKQogICAgICAgIHN0ciAgICAgcjQsIFtyMV0KCiAgICAgICAgLyogMykgV3JpdGUgU0RSQU0gYWRkcmVzcyBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBEUkFNX0JVRl9SRUc0KQogICAgICAgIGxkciAgICAgcjQsIFtyMV0KICAgICAgICBsZHIgICAgIHIxLCA9KElOVEVSX1JFR1NfQkFTRSArIFNEUkFNX0FERFJfQ1RSTF9SRUcpCiAgICAgICAgc3RyICAgICByNCwgW3IxXQoKICAgICAgICAvKiA0KSBXcml0ZSBTRFJBTSBiYW5rIDAgc2l6ZSByZWdpc3RlciAqLwogICAgICAgIGxkciAgICAgcjEsID0oSU5URVJfUkVHU19CQVNFICsgRFJBTV9CVUZfUkVHMCkKICAgICAgICBsZHIgICAgIHI0LCBbcjFdCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBTRFJBTV9TSVpFX1JFRygwKSkKICAgICAgICBzdHIgICAgIHI0LCBbcjFdCgogICAgICAgIC8qIDUpIFdyaXRlIFNEUkFNIG9wZW4gcGFnZXMgY29udHJvbCByZWdpc3RlciAqLwogICAgICAgIGxkciAgICAgcjEsID0oSU5URVJfUkVHU19CQVNFICsgU0RSQU1fT1BFTl9QQUdFX0NUUkxfUkVHKQogICAgICAgIGxkciAgICAgcjQsID1TRFJBTV9PUEVOX1BBR0VTX0NUUkxfUkVHX0RWCiAgICAgICAgc3RyICAgICByNCwgW3IxXQoKICAgICAgICAvKiA2KSBXcml0ZSBTRFJBTSB0aW1pbmcgTG93IHJlZ2lzdGVyICovCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBEUkFNX0JVRl9SRUc1KQogICAgICAgIGxkciAgICAgcjQsIFtyMV0KICAgICAgICBsZHIgICAgIHIxLCA9KElOVEVSX1JFR1NfQkFTRSArIFNEUkFNX1RJTUlOR19DVFJMX0xPV19SRUcpCiAgICAgICAgc3RyICAgICByNCwgW3IxXQoKICAgICAgICAvKiA3KSBXcml0ZSBTRFJBTSB0aW1pbmcgSGlnaCByZWdpc3RlciAqLwogICAgICAgIGxkciAgICAgcjEsID0oSU5URVJfUkVHU19CQVNFICsgRFJBTV9CVUZfUkVHNikKICAgICAgICBsZHIgICAgIHI0LCBbcjFdCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBTRFJBTV9USU1JTkdfQ1RSTF9ISUdIX1JFRykKICAgICAgICBzdHIgICAgIHI0LCBbcjFdCgogICAgICAgIC8qIDgpIFdyaXRlIFNEUkFNIG1vZGUgcmVnaXN0ZXIgKi8KICAgICAgICAvKiBUaGUgQ1BVIG11c3Qgbm90IGF0dGVtcHQgdG8gY2hhbmdlIHRoZSBTRFJBTSBNb2RlIHJlZ2lzdGVyIHNldHRpbmcgKi8KICAgICAgICAvKiBwcmlvciB0byBEUkFNIGNvbnRyb2xsZXIgY29tcGxldGlvbiBvZiB0aGUgRFJBTSBpbml0aWFsaXphdGlvbiAgICAgKi8KICAgICAgICAvKiBzZXF1ZW5jZS4gVG8gZ3VhcmFudGVlIHRoaXMgcmVzdHJpY3Rpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgICAgKi8KICAgICAgICAvKiB0aGUgQ1BVIHNldHMgdGhlIFNEUkFNIE9wZXJhdGlvbiByZWdpc3RlciB0byBOT1AgY29tbWFuZCwgcGVyZm9ybXMgKi8KICAgICAgICAvKiByZWFkIHBvbGxpbmcgdW50aWwgdGhlIHJlZ2lzdGVyIGlzIGJhY2sgaW4gTm9ybWFsIG9wZXJhdGlvbiB2YWx1ZSwgKi8KICAgICAgICAvKiBhbmQgdGhlbiBzZXRzIFNEUkFNIE1vZGUgcmVnaXN0ZXIgdG8gaXSScyBuZXcgdmFsdWUuICAgICAgICAgICAgICAgKi8KCgkvKiA4LjEgd3JpdGUgJ25vcCcgdG8gU0RSQU0gb3BlcmF0aW9uICovCiAgICAgICAgbW92ICAgICByNCwgIzB4NSAgICAgICAgICAgICAgICAgLyogJ05PUCcgY29tbWFuZCAgICAgICAgICAgICAgKi8KICAgICAgICBNVl9SRUdfV1JJVEVfQVNNKHI0LCByMSwgU0RSQU1fT1BFUkFUSU9OX1JFRykKCiAgICAgICAgLyogOC4yIHBvbGwgU0RSQU0gb3BlcmF0aW9uLiBNYWtlIHN1cmUgaXRzIGJhY2sgdG8gbm9ybWFsIG9wZXJhdGlvbiAgICovCl9zZHJhbU9wUG9sbDE6CiAgICAgICAgbGRyICAgICByNCwgW3IxXQogICAgICAgIGNtcCAgICAgcjQsICMwICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnMCcgPSBOb3JtYWwgU0RSQU0gTW9kZSAgICAqLwogICAgICAgIGJuZSAgICAgX3NkcmFtT3BQb2xsMQoKICAgICAgICAvKiA4LjMgTm93IGl0cyBzYWZlIHRvIHdyaXRlIG5ldyB2YWx1ZSB0byBTRFJBTSBNb2RlIHJlZ2lzdGVyICAgICAgICAgKi8KICAgICAgICBsZHIgICAgIHIxLCA9KElOVEVSX1JFR1NfQkFTRSArIERSQU1fQlVGX1JFRzIpCiAgICAgICAgbGRyICAgICByNCwgW3IxXQogICAgICAgIGxkciAgICAgcjEsID0oSU5URVJfUkVHU19CQVNFICsgU0RSQU1fTU9ERV9SRUcpCiAgICAgICAgc3RyICAgICByNCwgW3IxXQoKICAgICAgICAvKiA4LjQgTWFrZSB0aGUgRHVuaXQgd3JpdGUgdGhlIERSQU0gaXRzIG5ldyBtb2RlICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICBtb3YgICAgIHI0LCAjMHgzICAgICAgICAgICAgICAgICAvKiBNb2RlIFJlZ2lzdGVyIFNldCBjb21tYW5kICAqLwogICAgICAgIE1WX1JFR19XUklURV9BU00gKHI0LCByMSwgU0RSQU1fT1BFUkFUSU9OX1JFRykKCiAgICAgICAgLyogOC41IHBvbGwgU0RSQU0gb3BlcmF0aW9uLiBNYWtlIHN1cmUgaXRzIGJhY2sgdG8gbm9ybWFsIG9wZXJhdGlvbiAgICovCl9zZHJhbU9wUG9sbDI6CiAgICAgICAgbGRyICAgICByNCwgW3IxXQogICAgICAgIGNtcCAgICAgcjQsICMwICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAnMCcgPSBOb3JtYWwgU0RSQU0gTW9kZSAgICAqLwogICAgICAgIGJuZSAgICAgX3NkcmFtT3BQb2xsMgoKI2lmbmRlZiBEQl9GUEdBCiAgICAgICAgLyogQ29uZmlnIEREUjIgcmVnaXN0ZXJzIChFeHRlbmRlZCBtb2RlLCBPRFRzIGFuZCBwYWQgY2FsaWJyYXRpb24pICAgICovCiAgICAgICAgTVZfUkVHX1JFQURfQVNNIChyNCwgcjEsIFNEUkFNX0NPTkZJR19SRUcpCiAgICAgICAgdHN0ICAgICByNCwgI1NEUkFNX0RUWVBFX0REUjIKICAgICAgICBiZXEgICAgIF9leHRNb2RlT0RURW5kCiNlbmRpZiAvKiBEQl9GUEdBICovCgogICAgICAgIC8qIDkpIFdyaXRlIFNEUkFNIEV4dGVuZGVkIG1vZGUgcmVnaXN0ZXIgVGhpcyBvcGVyYXRpb24gc2hvdWxkIGJlICAgICAqLwogICAgICAgIC8qICAgIGRvbmUgZm9yIGVhY2ggbWVtb3J5IGJhbmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgIC8qIHdyaXRlICdub3AnIHRvIFNEUkFNIG9wZXJhdGlvbiAqLwogICAgICAgIG1vdiAgICAgcjQsICMweDUgICAgICAgICAgICAgICAgIC8qICdOT1AnIGNvbW1hbmQgICAgICAgICAgICAgICovCiAgICAgICAgTVZfUkVHX1dSSVRFX0FTTSAocjQsIHIxLCBTRFJBTV9PUEVSQVRJT05fUkVHKQoKICAgICAgICAvKiBwb2xsIFNEUkFNIG9wZXJhdGlvbi4gTWFrZSBzdXJlIGl0cyBiYWNrIHRvIG5vcm1hbCBvcGVyYXRpb24gICAqLwpfc2RyYW1PcFBvbGwzOgogICAgICAgIGxkciAgICAgcjQsIFtyMV0KICAgICAgICBjbXAgICAgIHI0LCAjMCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJzAnID0gTm9ybWFsIFNEUkFNIE1vZGUgICAgKi8KICAgICAgICBibmUgICAgIF9zZHJhbU9wUG9sbDMKCiAgICAgICAgLyogTm93IGl0cyBzYWZlIHRvIHdyaXRlIG5ldyB2YWx1ZSB0byBTRFJBTSBFeHRlbmRlZCBNb2RlIHJlZ2lzdGVyICAgICovCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBEUkFNX0JVRl9SRUcxMCkKICAgICAgICBsZHIgICAgIHI0LCBbcjFdCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBTRFJBTV9FWFRFTkRFRF9NT0RFX1JFRykKICAgICAgICBzdHIgICAgIHI0LCBbcjFdCgogICAgICAgIC8qIEdvIG92ZXIgZWFjaCBvZiB0aGUgQmFua3MgKi8KICAgICAgICBsZHIgICAgIHIzLCA9MCAgICAgICAgICAvKiByMyA9IERSQU0gYmFuayBOdW0gKi8KCmV4dE1vZGVMb29wOgogICAgICAgIC8qIFNldCB0aGUgU0RSQU0gT3BlcmF0aW9uIENvbnRyb2wgdG8gZWFjaCBvZiB0aGUgRFJBTSBiYW5rcyAgICAgICAgICAqLwogICAgICAgIG1vdiAgICAgcjIsIHIzICAgLyogRG8gbm90IHN3YXAgdGhlIGJhbmsgY291bnRlciB2YWx1ZSAqLwogICAgICAgIE1WX1JFR19XUklURV9BU00gKHIyLCByMSwgU0RSQU1fT1BFUkFUSU9OX0NUUkxfUkVHKQoKICAgICAgICAvKiBNYWtlIHRoZSBEdW5pdCB3cml0ZSB0aGUgRFJBTSBpdHMgbmV3IG1vZGUgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgIG1vdiAgICAgcjQsICMweDQgICAgICAgIC8qIEV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIgU2V0IGNvbW1hbmQgICovCiAgICAgICAgTVZfUkVHX1dSSVRFX0FTTSAocjQsIHIxLCBTRFJBTV9PUEVSQVRJT05fUkVHKQoKICAgICAgICAvKiBwb2xsIFNEUkFNIG9wZXJhdGlvbi4gTWFrZSBzdXJlIGl0cyBiYWNrIHRvIG5vcm1hbCBvcGVyYXRpb24gICAqLwpfc2RyYW1PcFBvbGw0OgogICAgICAgIGxkciAgICAgcjQsIFtyMV0KICAgICAgICBjbXAgICAgIHI0LCAjMCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJzAnID0gTm9ybWFsIFNEUkFNIE1vZGUgICAgKi8KICAgICAgICBibmUgICAgIF9zZHJhbU9wUG9sbDQKI2lmbmRlZiBEQl9GUEdBCiAgICAgICAgYWRkICAgICByMywgcjMsICMxCiAgICAgICAgY21wICAgICByMywgIzQgICAgICAgICAvKiA0ID0gTnVtYmVyIG9mIGJhbmtzICovCiAgICAgICAgYm5lICAgICBleHRNb2RlTG9vcAoKZXh0TW9kZUVuZDoKICAgICAgICAvKiBDb25maWcgRERSMiBPbiBEaWUgVGVybWluYXRpb24gKE9EVCkgcmVnaXN0ZXJzICovCiAgICAgICAgLyogV3JpdGUgU0RSQU0gRERSMiBPRFQgY29udHJvbCBsb3cgcmVnaXN0ZXIgKi8KICAgICAgICBsZHIgICAgIHIxLCA9KElOVEVSX1JFR1NfQkFTRSArIERSQU1fQlVGX1JFRzcpCiAgICAgICAgbGRyICAgICByNCwgW3IxXQogICAgICAgIGxkciAgICAgcjEsID0oSU5URVJfUkVHU19CQVNFICsgRERSMl9TRFJBTV9PRFRfQ1RSTF9MT1dfUkVHKQogICAgICAgIHN0ciAgICAgcjQsIFtyMV0KCiAgICAgICAgLyogV3JpdGUgU0RSQU0gRERSMiBPRFQgY29udHJvbCBoaWdoIHJlZ2lzdGVyICovCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBEUkFNX0JVRl9SRUc4KQogICAgICAgIGxkciAgICAgcjQsIFtyMV0KICAgICAgICBsZHIgICAgIHIxLCA9KElOVEVSX1JFR1NfQkFTRSArIEREUjJfU0RSQU1fT0RUX0NUUkxfSElHSF9SRUcpCiAgICAgICAgc3RyICAgICByNCwgW3IxXQoKICAgICAgICAvKiBXcml0ZSBTRFJBTSBERFIyIER1bml0IE9EVCBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgICAgbGRyICAgICByMSwgPShJTlRFUl9SRUdTX0JBU0UgKyBEUkFNX0JVRl9SRUc5KQogICAgICAgIGxkciAgICAgcjQsIFtyMV0KICAgICAgICBsZHIgICAgIHIxLCA9KElOVEVSX1JFR1NfQkFTRSArIEREUjJfRFVOSVRfT0RUX0NPTlRST0xfUkVHKQogICAgICAgIHN0ciAgICAgcjQsIFtyMV0KCiNlbmRpZiAvKiBEQl9GUEdBICovCl9leHRNb2RlT0RURW5kOgojaWZuZGVmIERCX0ZQR0EKICAgICAgICAvKiBJbXBsZW1lbnQgR3VpZGVsaW5lIChHTCMgTUVNLTIpIFBfQ0FMIEF1dG9tYXRpYyBDYWxpYnJhdGlvbiAgKi8KICAgICAgICAvKiBEb2VzIE5vdCBXb3JrIGZvciBBZGRyZXNzL0NvbnRyb2wgYW5kIERhdGEgUGFkcy4gICAgICAgICAgICAgKi8KICAgICAgICAvKiBSZWxldmFudCBmb3I6IDg4RjUxODEtQTEvQjAgYW5kIDg4RjUyODEtQTAgICAgICAgICAgICAgICAgICAgKi8KCgkvKiBSZWFkIGRldmljZSBJRCAgKi8KCU1WX0NUUkxfTU9ERUxfR0VUX0FTTShyMywgcjEpOwogICAgICAgIC8qIFJlYWQgZGV2aWNlIHJldmlzaW9uICovCglNVl9DVFJMX1JFVl9HRVRfQVNNKHIyLCByMSk7CgoJLyogQ29udGludWUgaWYgT3Jpb25OICovCiAgICAgICAgbGRyICAgICByMSwgPU1WXzUxODBfREVWX0lECiAgICAgICAgY21wICAgICByMywgcjEKICAgICAgICBibmUgICAgIDFmCiAgICAgICAgYiAgICAgZ2xNZW0yRW5kCjE6CiAgICAgICAgLyogQ29udGludWUgaWYgT3Jpb24xIGFuZCBkZXZpY2UgcmV2aXNpb24gQjEgKi8KICAgICAgICBsZHIgICAgIHIxLCA9TVZfNTE4MV9ERVZfSUQKICAgICAgICBjbXAgICAgIHIzLCByMQogICAgICAgIGJuZSAgICAgMWYKCiAgICAgICAgY21wICAgICByMiwgI01WXzUxODFfQjFfUkVWCiAgICAgICAgYmdlICAgICBnbE1lbTJFbmQKICAgICAgICBiICAgICAgIGdsTWVtMlN0YXJ0CjE6CgogICAgICAgIC8qIE9yaW9uIE5BUyAqLwogICAgICAgIGxkciAgICAgcjEsID1NVl81MTgyX0RFVl9JRAogICAgICAgIGNtcCAgICAgcjMsIHIxCiAgICAgICAgYmVxICAgICBnbE1lbTJTdGFydAoKICAgICAgICAvKiBPcmlvbiBOQVMgKi8KICAgICAgICBsZHIgICAgIHIxLCA9TVZfNTA4Ml9ERVZfSUQKICAgICAgICBjbXAgICAgIHIzLCByMQogICAgICAgIGJlcSAgICAgZ2xNZW0yU3RhcnQKCiAgICAgICAgLyogT3Jpb24gU2hhcmsgKi8KICAgICAgICBsZHIgICAgIHIxLCA9TVZfODY2MF9ERVZfSUQKICAgICAgICBjbXAgICAgIHIzLCByMQogICAgICAgIGJlcSAgICAgZ2xNZW0yU3RhcnQKCgliCWdsTWVtMkVuZAoKZ2xNZW0yU3RhcnQ6CgogICAgICAgIC8qIEREUiBTRFJBTSBBZGRyZXNzL0NvbnRyb2wgUGFkcyBDYWxpYnJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgIE1WX1JFR19SRUFEX0FTTSAocjMsIHIxLCBTRFJBTV9BRERSX0NUUkxfUEFEU19DQUxfUkVHKQoKICAgICAgICAvKiBTZXQgQml0IFszMV0gdG8gbWFrZSB0aGUgcmVnaXN0ZXIgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICBvcnIgICByMiwgcjMsICNTRFJBTV9XUl9FTgoKICAgICAgICBNVl9SRUdfV1JJVEVfQVNNIChyMiwgcjEsIFNEUkFNX0FERFJfQ1RSTF9QQURTX0NBTF9SRUcpCgogICAgICAgIGJpYyAgIHIzLCByMywgI1NEUkFNX1dSX0VOICAgICAgLyogTWFrZSByZWdpc3RlciByZWFkLW9ubHkgICAgICAqLwogICAgICAgIGJpYyAgIHIzLCByMywgI1NEUkFNX1RVTkVfRU4gICAgLyogRGlzYWJsZSBhdXRvIGNhbGlicmF0aW9uICAgICAqLwogICAgICAgIGJpYyAgIHIzLCByMywgI1NEUkFNX0RSVk5fTUFTSyAgLyogQ2xlYXIgcjFbNTowXTxEcnZOPiAgICAgICAgICAqLwogICAgICAgIGJpYyAgIHIzLCByMywgI1NEUkFNX0RSVlBfTUFTSyAgLyogQ2xlYXIgcjFbMTE6Nl08RHJ2UD4gICAgICAgICAqLwoKICAgICAgICAvKiBHZXQgdGhlIGZpbmFsIE4gbG9ja2VkIHZhbHVlIG9mIGRyaXZpbmcgc3RyZW5ndGggWzIyOjE3XSAgICAgKi8KICAgICAgICBtb3YgICByMSwgcjMKICAgICAgICBtb3YgICByMSwgcjEsIExTTCAjOQogICAgICAgIG1vdiAgIHIxLCByMSwgTFNSICMyNiAgICAvKiByMVs1OjBdPERydk4+ICA9IHIzWzIyOjE3XTxMb2NrTj4gICAqLwogICAgICAgIG9yciAgIHIxLCByMSwgcjEsIExTTCAjNiAvKiByMVsxMTo2XTxEcnZQPiA9IHIxWzU6MF08RHJ2Tj4gICAgICAqLwoKICAgICAgICAvKiBXcml0ZSB0byBib3RoIDxEcnZOPiBiaXRzIFs1OjBdIGFuZCA8RHJ2UD4gYml0cyBbMTE6Nl0gICAgICAgKi8KICAgICAgICBvcnIgICByMywgcjMsIHIxCgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHIzLCByMSwgU0RSQU1fQUREUl9DVFJMX1BBRFNfQ0FMX1JFRykKCgogICAgICAgIC8qIEREUiBTRFJBTSBEYXRhIFBhZHMgQ2FsaWJyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgCSovCiAgICAgICAgTVZfUkVHX1JFQURfQVNNIChyMywgcjEsIFNEUkFNX0RBVEFfUEFEU19DQUxfUkVHKQoKICAgICAgICAvKiBTZXQgQml0IFszMV0gdG8gbWFrZSB0aGUgcmVnaXN0ZXIgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICBvcnIgICByMiwgcjMsICNTRFJBTV9XUl9FTgoKICAgICAgICBNVl9SRUdfV1JJVEVfQVNNIChyMiwgcjEsIFNEUkFNX0RBVEFfUEFEU19DQUxfUkVHKQoKICAgICAgICBiaWMgICByMywgcjMsICNTRFJBTV9XUl9FTiAgICAgIC8qIE1ha2UgcmVnaXN0ZXIgcmVhZC1vbmx5ICAgICAgKi8KICAgICAgICBiaWMgICByMywgcjMsICNTRFJBTV9UVU5FX0VOICAgIC8qIERpc2FibGUgYXV0byBjYWxpYnJhdGlvbiAgICAgKi8KICAgICAgICBiaWMgICByMywgcjMsICNTRFJBTV9EUlZOX01BU0sgIC8qIENsZWFyIHIxWzU6MF08RHJ2Tj4gICAgICAgICAgKi8KICAgICAgICBiaWMgICByMywgcjMsICNTRFJBTV9EUlZQX01BU0sgIC8qIENsZWFyIHIxWzExOjZdPERydlA+ICAgICAgICAgKi8KCiAgICAgICAgLyogR2V0IHRoZSBmaW5hbCBOIGxvY2tlZCB2YWx1ZSBvZiBkcml2aW5nIHN0cmVuZ3RoIFsyMjoxN10gICAgICovCiAgICAgICAgbW92ICAgcjEsIHIzCiAgICAgICAgbW92ICAgcjEsIHIxLCBMU0wgIzkKICAgICAgICBtb3YgICByMSwgcjEsIExTUiAjMjYKICAgICAgICBvcnIgICByMSwgcjEsIHIxLCBMU0wgIzYgLyogcjFbNTowXSA9IHIzWzIyOjE3XTxMb2NrTj4gICovCgogICAgICAgIC8qIFdyaXRlIHRvIGJvdGggPERydk4+IGJpdHMgWzU6MF0gYW5kIDxEcnZQPiBiaXRzIFsxMTo2XSAgICAgICAqLwogICAgICAgIG9yciAgIHIzLCByMywgcjEKCiAgICAgICAgTVZfUkVHX1dSSVRFX0FTTSAocjMsIHIxLCBTRFJBTV9EQVRBX1BBRFNfQ0FMX1JFRykKCmdsTWVtMkVuZDoKCgogICAgICAgIC8qIEltcGxlbWVudCBHdWlkZWxpbmUgKEdMIyBNRU0tMykgRHJpdmUgU3RyZW5ndGggVmFsdWUgICAgICAgICAqLwogICAgICAgIC8qIFJlbGV2YW50IGZvcjogODhGNTE4MS1BMS9CMC9CMSwgODhGNTI4MS1BMC9CMC9DL0QsIDg4RjUxODIsICAqLwoJLyogODhGNTA4MiwgODhGNTE4MUwsIDg4RjYwODIvTCwgODhGNjE4MywgODhGNjE4M0wgKi8KCiAgICAgICAgLyogR2V0IFNEUkFNIENvbmZpZyB2YWx1ZSAqLwogICAgICAgIE1WX1JFR19SRUFEX0FTTSAocjIsIHIxLCBTRFJBTV9DT05GSUdfUkVHKQoKICAgICAgICAvKiBHZXQgRElNTSB0eXBlICovCiAgICAgICAgdHN0ICAgICByMiwgI1NEUkFNX0RUWVBFX0REUjIKICAgICAgICBiZXEgICAgIGRkcjFTdHJlbmd0aFZhbAoKZGRyMlN0cmVuZ3RoVmFsOgogICAgICAgIGxkciAgICAgcjQsID1ERFIyX0FERFJfQ1RSTF9QQURfU1RSRU5HVEhfVFlQSUNBTF9EVgogICAgICAgIGxkciAgICAgcjIsID1ERFIyX0RBVEFfUEFEX1NUUkVOR1RIX1RZUElDQUxfRFYKICAgICAgICBiICAgICAgIHNldERydlN0cmVuZ3RoCmRkcjFTdHJlbmd0aFZhbDoKICAgICAgICBsZHIgICAgIHI0LCA9RERSMV9BRERSX0NUUkxfUEFEX1NUUkVOR1RIX1RZUElDQUxfRFYKICAgICAgICBsZHIgICAgIHIyLCA9RERSMV9EQVRBX1BBRF9TVFJFTkdUSF9UWVBJQ0FMX0RWCgpzZXREcnZTdHJlbmd0aDoKICAgICAgICAvKiBERFIgU0RSQU0gQWRkcmVzcy9Db250cm9sIFBhZHMgQ2FsaWJyYXRpb24gICAgICAgICAgICAgICAgICAgKi8KICAgICAgICBNVl9SRUdfUkVBRF9BU00gKHIzLCByMSwgU0RSQU1fQUREUl9DVFJMX1BBRFNfQ0FMX1JFRykKCiAgICAgICAgb3JyICAgcjMsIHIzLCAjU0RSQU1fV1JfRU4gICAgICAvKiBNYWtlIHJlZ2lzdGVyIHdyaXRlYWJsZSAgICAgICovCgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHIzLCByMSwgU0RSQU1fQUREUl9DVFJMX1BBRFNfQ0FMX1JFRykKICAgICAgICBIVE9MTChyMyxyMSkKCiAgICAgICAgYmljICAgcjMsIHIzLCAjU0RSQU1fV1JfRU4gICAgICAvKiBNYWtlIHJlZ2lzdGVyIHJlYWQtb25seSAgICAgICovCiAgICAgICAgYmljICAgcjMsIHIzLCAjU0RSQU1fUFJFX0RSSVZFUl9TVFJFTkdUSF9NQVNLCiAgICAgICAgb3JyICAgcjMsIHI0LCByMyAgICAgICAgICAgICAgICAvKiBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgRERSICAgICovCgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHIzLCByMSwgU0RSQU1fQUREUl9DVFJMX1BBRFNfQ0FMX1JFRykKCgogICAgICAgIC8qIEREUiBTRFJBTSBEYXRhIFBhZHMgQ2FsaWJyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICovCiAgICAgICAgTVZfUkVHX1JFQURfQVNNIChyMywgcjEsIFNEUkFNX0RBVEFfUEFEU19DQUxfUkVHKQoKICAgICAgICBvcnIgICByMywgcjMsICNTRFJBTV9XUl9FTiAgICAgIC8qIE1ha2UgcmVnaXN0ZXIgd3JpdGVhYmxlICAgICAgKi8KCiAgICAgICAgTVZfUkVHX1dSSVRFX0FTTSAocjMsIHIxLCBTRFJBTV9EQVRBX1BBRFNfQ0FMX1JFRykKICAgICAgICBIVE9MTChyMyxyMSkKCiAgICAgICAgYmljICAgcjMsIHIzLCAjU0RSQU1fV1JfRU4gICAgICAvKiBNYWtlIHJlZ2lzdGVyIHJlYWQtb25seSAgICAgICovCiAgICAgICAgYmljICAgcjMsIHIzLCAjU0RSQU1fUFJFX0RSSVZFUl9TVFJFTkdUSF9NQVNLCiAgICAgICAgb3JyICAgcjMsIHIyLCByMyAgICAgICAgICAgICAgICAvKiBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgRERSICAgICovCgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHIzLCByMSwgU0RSQU1fREFUQV9QQURTX0NBTF9SRUcpCgojaWYgIWRlZmluZWQoTVZfODhXODY2MCkgJiYgIWRlZmluZWQoTVZfODhGNjE4MykgJiYgIWRlZmluZWQoTVZfODhGNjE4M0wpCiAgICAgICAgLyogSW1wbGVtZW50IEd1aWRlbGluZSAoR0wjIE1FTS00KSBEUVMgUmVmZXJlbmNlIERlbGF5IFR1bmluZyAgICovCiAgICAgICAgLyogUmVsZXZhbnQgZm9yOiA4OEY1MTgxLUExL0IwL0IxIGFuZCA4OEY1MjgxLUEwL0IwL0MvRCwgODhGNTE4MiAqLwoJLyogODhGNTA4MiwgODhGNTE4MUwsIDg4RjYwODIvTCAqLwogICAgICAgICAgICAgICAgCgkvKiBDYWxjIHRoZSBhYnNvbHV0ZSBhZGRyZXNzIG9mIHRoZSBfY3B1QVJNRERSQ0xLW10gaW4gdGhlIGJvb3QgZmxhc2ggKi8KCWxkciAgICAgcjcsID0gX2NwdUFSTUREUkNMSwoJbGRyCXI0LCA9X3N0YXJ0CglzdWIgICAgIHI3LCByNywgcjQKCWFkZAlyNywgcjcsICNDRkdfTU9OSVRPUl9CQVNFCgogICAgICAgIC8qIEdldCB0aGUgInNhbXBsZSBvbiByZXNldCIgcmVnaXN0ZXIgZm9yIHRoZSBERFIgZnJlcXVhbmN5ICAgICAqLwogICAgICAgIE1WX1JFR19SRUFEX0FTTSAocjQsIHIxLCBNUFBfU0FNUExFX0FUX1JFU0VUKQogICAgICAgIGxkciAgICAgcjEsID1NU0FSX0FSTUREUkNMQ0tfTUFTSwogICAgICAgIGFuZCAgICAgcjEsIHI0LCByMQojaWYgMCAvKiBZT1RBTSBUTyBCRSBGSVggKi8KCW1vdiAgICByMSwgcjEsIExTUiAjTVNBUl9BUk1ERFJDTENLX09GRlMKI2VuZGlmCgoJLyogUmVhZCBkZXZpY2UgSUQgICovCglNVl9DVFJMX01PREVMX0dFVF9BU00ocjMsIHIyKTsKCiAgICAgICAgLyogQ29udGludWUgaWYgVEM5MCAqLwogICAgICAgIGxkciAgICAgcjIsID1NVl8xMjgxX0RFVl9JRAogICAgICAgIGNtcCAgICAgcjMsIHIyCiAgICAgICAgYmVxICAgICBhcm1DbGtNc2IKCiAgICAgICAgLyogQ29udGludWUgaWYgT3Jpb24yICovCiAgICAgICAgbGRyICAgICByMiwgPU1WXzUyODFfREVWX0lECiAgICAgICAgY21wICAgICByMywgcjIKI2lmIDAgLyogWU9UQU0gVE8gQkUgRklYICovCiAgICAgICAgYm5lICAgICAxZgojZW5kaWYKCmFybUNsa01zYjoKI2lmIDAgLyogWU9UQU0gVE8gQkUgRklYICovCgl0c3QgICAgcjQsICNNU0FSX0FSTUREUkNMQ0tfSF9NQVNLCiAgICAgICAgYmVxICAgIDFmCiAgICAgICAgb3JyICAgIHIxLCByMSwgI0JJVDQKMToKCWxkciAgICByNCwgPU1WX0NQVV9BUk1fQ0xLX0VMTV9TSVpFCgltdWwgICAgcjEsIHI0LCByMQoJYWRkICAgIHI3LCByNywgcjEKCWFkZCAgICByNywgcjcsICNNVl9DUFVfQVJNX0NMS19ERFJfT0ZGCglsZHIgICAgcjEsIFtyN10KI2VuZGlmCgogICAgICAgIC8qIEdldCBTRFJBTSBDb25maWcgdmFsdWUgKi8KICAgICAgICBNVl9SRUdfUkVBRF9BU00gKHIyLCByNCwgU0RSQU1fQ09ORklHX1JFRykKCiAgICAgICAgLyogR2V0IERJTU0gdHlwZSAqLwogICAgICAgIHRzdCAgICAgcjIsICNTRFJBTV9EVFlQRV9ERFIyCiAgICAgICAgYmVxICAgICBkZHIxRnRkbGxWYWwKCmRkcjJGdGRsbFZhbDoKICAgICAgICBsZHIgICAgIHIyLCA9TVZfNTI4MV9ERVZfSUQKICAgICAgICBjbXAgICAgIHIzLCByMgoJYm5lCTJmCiAgICAJTVZfQ1RSTF9SRVZfR0VUX0FTTShyMywgcjIpCiAgICAgICAgY21wICAgICByMywgI01WXzUyODFfRDBfUkVWCiAgICAgICAgYmVxICAgICBvcmluMl9kMF9kZHIyX2Z0ZGxsX3ZhbAogICAgICAgIGNtcCAgICAgcjMsICNNVl81MjgxX0QxX1JFVgogICAgICAgIGJlcSAgICAgb3JpbjJfZDFfZGRyMl9mdGRsbF92YWwKICAgICAgICBjbXAgICAgIHIzLCAjTVZfNTI4MV9EMl9SRVYKICAgICAgICBiZXEgICAgIG9yaW4yX2QxX2RkcjJfZnRkbGxfdmFsCgliCWRkcjJfZGVmYXVsdF92YWwKCi8qIFNldCBPcmlvbiAyIEQxIGZ0ZGxsIHZhbHVlcyBmb3IgRERSMiAqLwpvcmluMl9kMV9kZHIyX2Z0ZGxsX3ZhbDoKCWxkciAgICByNCwgPUZURExMX0REUjJfMjUwTUhaXzUyODFfRDEKCWxkciAgICByNywgPV8yNTBNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjJfMjAwTUhaXzUyODFfRDEKCWxkciAgICByNywgPV8yMDBNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjJfMTY2TUhaXzUyODFfRDAKCWxkciAgICByNywgPV8xNjZNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCgliCWRkcjJfZGVmYXVsdF92YWwKCi8qIFNldCBPcmlvbiAyIEQwIGZ0ZGxsIHZhbHVlcyBmb3IgRERSMiAqLwpvcmluMl9kMF9kZHIyX2Z0ZGxsX3ZhbDoKCWxkciAgICByNCwgPUZURExMX0REUjJfMjUwTUhaXzUyODFfRDAKCWxkciAgICByNywgPV8yNTBNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjJfMjAwTUhaXzUyODFfRDAKCWxkciAgICByNywgPV8yMDBNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjJfMTY2TUhaXzUyODFfRDAKCWxkciAgICByNywgPV8xNjZNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCgliICAgICAgIGRkcjJfZGVmYXVsdF92YWwKMjoKICAgICAgICBsZHIgICAgIHIyLCA9TVZfNTE4Ml9ERVZfSUQKICAgICAgICBjbXAgICAgIHIzLCByMgoJYm5lCTNmCgovKiBTZXQgT3Jpb24gbmFzIGZ0ZGxsIHZhbHVlcyBmb3IgRERSMiAqLwpvcmluX25hc19mdGRsbF92YWw6CiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjJfMTY2TUhaXzUxODIKCWxkciAgICByNywgPV8xNjZNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCgovKiBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIG90aGVyIGRldmljZXMgKi8KMzoKZGRyMl9kZWZhdWx0X3ZhbDoKICAgICAgICBsZHIgICAgcjQsID1GVERMTF9ERFIyXzI1ME1IWgoJbGRyICAgIHI3LCA9XzI1ME1IegogICAgICAgIGNtcCAgICByMSwgcjcKICAgICAgICBiZXEgICAgc2V0RnRkbGxSZWcKICAgICAgICBsZHIgICAgIHI0LCA9RlRETExfRERSMl8yMDBNSFoKCWxkciAgICByNywgPV8yMDBNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjJfMTY2TUhaCglsZHIgICAgcjcsID1fMTY2TUh6CiAgICAgICAgY21wICAgIHIxLCByNwogICAgICAgIGJlcSAgICBzZXRGdGRsbFJlZwogICAgICAgIGxkciAgICAgcjQsID1GVERMTF9ERFIyXzEzM01IWgoJbGRyICAgIHI3LCA9XzEzM01IegogICAgICAgIGNtcCAgICByMSwgcjcKICAgICAgICBiZXEgICAgc2V0RnRkbGxSZWcKICAgICAgICBsZHIgICAgcjQsID0wCiAgICAgICAgYiAgICAgICBzZXRGdGRsbFJlZwoKZGRyMUZ0ZGxsVmFsOgogICAgICAgIGxkciAgICAgcjIsID1NVl81MjgxX0RFVl9JRAogICAgICAgIGNtcCAgICAgcjMsIHIyCglibmUJMmYKICAgIAlNVl9DVFJMX1JFVl9HRVRfQVNNKHIzLCByMikKICAgICAgICBjbXAgICAgIHIzLCAjTVZfNTI4MV9EMF9SRVYKICAgICAgICBiZ2UgICAgIG9yaW4yX2RkcjFfZnRkbGxfdmFsCgliCWRkcjFfZGVmYXVsdF92YWwKCi8qIFNldCBPcmlvbiAyIEQwIGFuZCBhYm92ZSBmdGRsbCB2YWx1ZXMgZm9yIEREUjEgKi8Kb3JpbjJfZGRyMV9mdGRsbF92YWw6CiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjFfMjAwTUhaXzUyODFfRDAKCWxkciAgICByNywgPV8yMDBNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjFfMTY2TUhaXzUyODFfRDAKCWxkciAgICByNywgPV8xNjZNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCgliICAgICAgIGRkcjFfZGVmYXVsdF92YWwKMjoKICAgICAgICBsZHIgICAgIHIyLCA9TVZfNTE4MV9ERVZfSUQKICAgICAgICBjbXAgICAgIHIzLCByMgoJYm5lCTNmCiAgICAJTVZfQ1RSTF9SRVZfR0VUX0FTTShyMywgcjIpCiAgICAgICAgY21wICAgICByMywgI01WXzUxODFfQjFfUkVWCiAgICAgICAgYmdlICAgICBvcmluMV9kZHIxX2Z0ZGxsX3ZhbAoJYglkZHIxX2RlZmF1bHRfdmFsCgovKiBTZXQgT3Jpb24gMSBmdGRsbCB2YWx1ZXMgZm9yIEREUjEgKi8Kb3JpbjFfZGRyMV9mdGRsbF92YWw6CiAgICAgICAgbGRyICAgICByNCwgPUZURExMX0REUjFfMTY2TUhaXzUxODFfQjEKCWxkciAgICByNywgPV8xNjZNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCjM6CmRkcjFfZGVmYXVsdF92YWw6CiAgICAgICAgbGRyICAgIHI0LCA9RlRETExfRERSMV8xMzNNSFoKCWxkciAgICByNywgPV8xMzNNSHoKICAgICAgICBjbXAgICAgcjEsIHI3CiAgICAgICAgYmVxICAgIHNldEZ0ZGxsUmVnCgogICAgICAgIGxkciAgICByNCwgPUZURExMX0REUjFfMTY2TUhaCglsZHIgICAgcjcsID1fMTY2TUh6CiAgICAgICAgY21wICAgIHIxLCByNwogICAgICAgIGJlcSAgICBzZXRGdGRsbFJlZwoKICAgICAgICBsZHIgICAgcjQsID1GVERMTF9ERFIxXzIwME1IWgoJbGRyICAgIHI3LCA9XzIwME1IegogICAgICAgIGNtcCAgICByMSwgcjcKICAgICAgICBiZXEgICAgc2V0RnRkbGxSZWcKCiAgICAgICAgbGRyICAgIHI0LCA9MAoKc2V0RnRkbGxSZWc6CgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHI0LCByMSwgU0RSQU1fRlRETExfQ09ORklHX1JFRykKICAgICAgICBIVE9MTChyNCxyMSkKICAgICAgICBiaWMgICByNCwgcjQsICMxCiAgICAgICAgTVZfUkVHX1dSSVRFX0FTTSAocjQsIHIxLCBTRFJBTV9GVERMTF9DT05GSUdfUkVHKQoKI2VuZGlmIC8qICFkZWZpbmVkKE1WXzg4Vzg2NjApICYmICFkZWZpbmVkKE1WXzg4RjYxODMpICYmICFkZWZpbmVkKE1WXzg4RjYxODNMKSAqLwojZW5kaWYgLyogREJfRlBHQSAqLwoKcmVzdG9yZVRtcFJlZ3M6CiAgICAgICAgLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIHdlIHVzZWQgdG8gc2F2ZSB0aGUgRERSIGRldGVjdCB2YWx1ZXMgKi8KCiAgICAgICAgbGRyICAgICByNCwgPURSQU1fQlVGX1JFRzBfRFYKICAgICAgICBNVl9SRUdfV1JJVEVfQVNNIChyNCwgcjEsIERSQU1fQlVGX1JFRzApCgogICAgICAgIGxkciAgICAgcjQsID1EUkFNX0JVRl9SRUcxX0RWCiAgICAgICAgTVZfUkVHX1dSSVRFX0FTTSAocjQsIHIxLCBEUkFNX0JVRl9SRUcxKQoKICAgICAgICBsZHIgICAgIHI0LCA9RFJBTV9CVUZfUkVHMl9EVgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHI0LCByMSwgRFJBTV9CVUZfUkVHMikKCiAgICAgICAgbGRyICAgICByNCwgPURSQU1fQlVGX1JFRzNfRFYKICAgICAgICBNVl9SRUdfV1JJVEVfQVNNIChyNCwgcjEsIERSQU1fQlVGX1JFRzMpCgogICAgICAgIGxkciAgICAgcjQsID1EUkFNX0JVRl9SRUc0X0RWCiAgICAgICAgTVZfUkVHX1dSSVRFX0FTTSAocjQsIHIxLCBEUkFNX0JVRl9SRUc0KQoKICAgICAgICBsZHIgICAgIHI0LCA9RFJBTV9CVUZfUkVHNV9EVgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHI0LCByMSwgRFJBTV9CVUZfUkVHNSkKCiAgICAgICAgbGRyICAgICByNCwgPURSQU1fQlVGX1JFRzZfRFYKICAgICAgICBNVl9SRUdfV1JJVEVfQVNNIChyNCwgcjEsIERSQU1fQlVGX1JFRzYpCgogICAgICAgIGxkciAgICAgcjQsID1EUkFNX0JVRl9SRUc3X0RWCiAgICAgICAgTVZfUkVHX1dSSVRFX0FTTSAocjQsIHIxLCBEUkFNX0JVRl9SRUc3KQoKICAgICAgICBsZHIgICAgIHI0LCA9RFJBTV9CVUZfUkVHOF9EVgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHI0LCByMSwgRFJBTV9CVUZfUkVHOCkKCiAgICAgICAgbGRyICAgICByNCwgPURSQU1fQlVGX1JFRzlfRFYKICAgICAgICBNVl9SRUdfV1JJVEVfQVNNIChyNCwgcjEsIERSQU1fQlVGX1JFRzkpCgogICAgICAgIGxkciAgICAgcjQsID1EUkFNX0JVRl9SRUcxMF9EVgogICAgICAgIE1WX1JFR19XUklURV9BU00gKHI0LCByMSwgRFJBTV9CVUZfUkVHMTApCgoKICAgICAgICAvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLwogICAgICAgIC8qIFNhdmUgcmVnaXN0ZXIgb24gc3RhY2sgKi8KCWNtcAlzcCwgIzAKCWJlcQlub19zdGFja19sCmxvYWRfZnJvbV9zdGFjazoKICAgICAgICBsZG1pYQlzcCEsIHtyMSwgcjIsIHIzLCByNCwgcjcsIHIxMX0Kbm9fc3RhY2tfbDoKCiAgICAgICAgbW92ICAgICBwYywgbHIKCg==