LyoKICogIE5vdGVwYWQgKER1dGNoIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAyMDAzIEhhbnMgTGVpZGVra2VyCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfRFVUQ0gsIFNVQkxBTkdfTkVVVFJBTAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZCZXN0YW5kIiB7CiAgTUVOVUlURU0gIiZOaWV1dyIsCQkgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiJk9wZW5lbi4uLlx0Q3RybCtPIiwJICAgICBDTURfT1BFTgogIE1FTlVJVEVNICJPJnBzbGFhblx0Q3RybCtTIiwJICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJPcHMmbGFhbiBhbHMuLi4iLAkgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZmRydWtrZW4uLi5cdEN0cmwrUCIsCSAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlBhZ2luYS1pbiZzdGVsbGluZy4uLiIsICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJQcmludGVyaW5zdGVsbGluZ2VuLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFmc2x1aXRlbiIsICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICJCZSZ3ZXJrZW4iIHsKICBNRU5VSVRFTSAiJk9uZ2VkYWFuIG1ha2VuXHRDdHJsK1oiLCAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJLJm5pcHBlblx0Q3RybCtYIiwgICAgICAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiJktvcGnrcmVuXHRDdHJsK0MiLCAgICAgICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImUGxha2tlblx0Q3RybCtWIiwgICAgICAgICAgIENNRF9QQVNURQogIE1FTlVJVEVNICImVmVyd2lqZGVyZW5cdERlbCIsICAgICAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFsbGVzIHNlbGVjdGVyZW5cdEN0cmwrQSIsICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICJUaWpkLyZkYXR1bVx0RjUiLCAgICAgICAgICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQSZ1dG9tYXRpc2NoZSB0ZXJ1Z2xvb3AiLCAgICBDTURfV1JBUAogIE1FTlVJVEVNICImTGV0dGVydHlwZSBpbnN0ZWxsZW4uLi4iLCAgIENNRF9GT05UCiB9ClBPUFVQICImWm9la2VuIiB7CiAgTUVOVUlURU0gIiZab2VrZW4uLi5cdEN0cmwrWiIsICAgICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJlZvbGdlbmRlIHpvZWtlblx0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImSGVscCIgewogIE1FTlVJVEVNICImSGVscC1vbmRlcndlcnBlbiIsICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImWm9la2VuLi4uIiwgICAgICAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkh1bHAgYmlqIEhlbHAiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICJJbmYmbyIgewogICBNRU5VSVRFTSAiJkxpY2VudGllLi4uIiwgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJkdFRU4gR0FSQU5USUUuLi4iLCAgICBDTURfTk9fV0FSUkFOVFkKICAgTUVOVUlURU0gIiZPdmVyIFdpbmUuLi4iLCAgICAgICAgQ01EX0FCT1VUX1dJTkUKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiUGFnaW5hLWluc3RlbGxpbmciCnsKTFRFWFQgICAgIiZLb3B0ZWtzdDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlZvZXR0ZWtzdDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIiZNYXJnZXMgKG1pbGxpbWV0ZXIpOiIsICAweDE0NCwgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICJMaSZua3M6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCb3ZlbjoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUmVjaHRzOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJk9uZGVyOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgIElET0ssICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXJlbiIsIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGVscCIsICAgICBJREhFTFAsICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlBhZ2luYSAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLbGFkYmxvayIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZPVVQiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXQUFSU0NIVVdJTkciClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hdGllIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihuYWFtbG9vcykiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSBiZXN0YW5kZW4gKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICJUZWtzdGJlc3RhbmRlbiAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhldCBiZXN0YW5kICclcycgaXMgdGUgZ3Jvb3Qgdm9vciBLbGFkYmxvay5cbiBcCkdlYnJ1aWsgZWVuIGFuZGVyZSBlZGl0b3IuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVSBoZWVmdCBnZWVuIHRla3N0IGluZ2V2b2VyZC4gXApcblR5cGUgdXcgdGVrc3QgZW4gcHJvYmVlciBoZXQgbm9nbWFhbHMiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIZXQgYmVzdGFuZCAnJXMnXG5iZXN0YWF0IG5pZXRcblxuIFwKV2lsdCB1IGVlbiBuaWV1dyBiZXN0YW5kIG1ha2VuPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhldCBiZXN0YW5kICclcydcbmlzIGdld2lqemlnZFxuXG4gXApXaWx0IHUgZGUgd2lqemlnaW5nZW4gb3BzbGFhbj8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGthbiBuaWV0IHdvcmRlbiBnZXZvbmRlbi4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAgICAgICAgICJPbnZvbGRvZW5kZSBnZWhldWdlbi4gXApcblNsdWl0IGVlbiBvZiBtZWVyIGFwcGxpY2F0aWVzIG9tIGRlIGhvZXZlZWxoZWlkIFxuYmVzY2hpa2JhYXIgZ2VoZXVnZW4gdGUgdmVyZ3JvdGVuLiIKCn0K