LyoKICogV2luZUZpbGUKICogQ3plY2ggTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMjAwMCBNYXJ0aW4gRnVjaHMKICogQ29weXJpZ2h0IDIwMDIgU3RldmVuIEVkd2FyZHMKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkCiAqIENvcHlyaWdodCAyMDA0IERhdmlkIEtyZWRiYQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCi8qIE1lbnUgKi8KCklETV9XSU5FRklMRSBNRU5VIEZJWEVEIElNUFVSRQp7CiAgICBQT1BVUCAiJlNvdWJvciIgIHsKICAgICAgICBNRU5VSVRFTSAiJk90ZXb47XRcdEVudGVyIiwgICAgICAgICAgICAgSURfQUNUSVZBVEUKICAgICAgICBNRU5VSVRFTSAiJlD4ZXN1bm91dC4uLlx0RjciLCAgICAgICAgICAgSURfRklMRV9NT1ZFCiAgICAgICAgTUVOVUlURU0gIiZLb3Dtcm92YXQuLi5cdEY4IiwgICAgICAgICAgIElEX0ZJTEVfQ09QWQogICAgICAgIE1FTlVJVEVNICImVmUgc2NocuFuY2UuLi5cdEY5IiwgICAgICAgICAxMTgKICAgICAgICBNRU5VSVRFTSAiJlNtYXphdFx0RGVsIiwgICAgICAgICAgICAgICAgSURfRklMRV9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiUPgmZWptZW5vdmF0Li4uIiwgICAgICAgICAgICAgMTA5CiAgICAgICAgTUVOVUlURU0gIlYmbGFzdG5vc3RpLi4uXHRBbHQrRW50ZXIiLCAgIElEX0VESVRfUFJPUEVSVElFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImS29tcHJlc2UuLi4iLCAgICAgICAgICAgICAgICAxMTkKICAgICAgICBNRU5VSVRFTSAiJkRla29tcHJlc2UuLi4iLCAgICAgICAgICAgICAgMTIwCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZTcHVzdGl0Li4uIiwgICAgICAgICAgICAgICAgIElEX0VYRUNVVEUKICAgICAgICBNRU5VSVRFTSAiJlRpc2tub3V0Li4uIiwgICAgICAgICAgICAgICAgMTAyCiAgICAgICAgTUVOVUlURU0gIkFzb2Npb3ZhdC4uLiIsICAgICAgICAgICAgICAgIDEwMwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJWJnl0dm/4aXQgYWRyZXPh+C4uLiIsICAgICAgICAxMTEKICAgICAgICBNRU5VSVRFTSAiJkhsZWRhdC4uLiIsICAgICAgICAgICAgICAgICAgMTA0CiAgICAgICAgTUVOVUlURU0gIiZadm9saXQgdm91Ym9yeS4uLiIsICAgICAgICAgIDExNgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIksmb25lY1x0QWx0K1giLCAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZWxzZQogICAgICAgIE1FTlVJVEVNICJLJm9uZWMiLCAgICAgICAgICAgICAgICAgICAgICBJRF9GSUxFX0VYSVQKI2VuZGlmCiAgICB9CgogICAgUE9QVVAgIiZEaXNrIiAgewogICAgICAgIE1FTlVJVEVNICImS29w7XJvdmF0IGRpc2suLi4iLCAgICAgICAgICAyMDEKICAgICAgICBNRU5VSVRFTSAiJkptZW5vdmthIGRpc2suLi4iLCAgICAgICAgICAgMjAyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZGb3Jt4XRvdmF0IGRpc2suLi4iLCAgICAgICAgIElEX0ZPUk1BVF9ESVNLCiNpZmRlZiBfV0lOOTUKICAgICAgICBNRU5VSVRFTSAiJlZ5dHZv+Gl0IHN5c3RlbW92/SBkaXNrLi4uIiwgLTEgIC8qVE9ETyovCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJQ+Glwb2ppdCAmc+2db3bpIHph+O16ZW7tIiwgICBJRF9DT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSAiJk9kcG9qaXQgJnPtnW926SB6YfjtemVu7SIsICAgSURfRElTQ09OTkVDVF9ORVRXT1JLX0RSSVZFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNk7WxldCBqYWtvLi4uIiwgICAgICAgICAgICAgIDI1NAogICAgICAgIE1FTlVJVEVNICImT2RzdHJhbml0IHNk7Wxlbu0uLi4iLCAgICAgICAyNTUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlp2b2xpdCB6YfjtemVu7S4uLiIsICAgICAgICAgMjUxCiAgICB9CgogICAgUE9QVVAgIiZBZHJlc+H4ZSIgIHsKICAgICAgICBNRU5VSVRFTSAiJkRhbJrtIPpyb3Zl8lx0KyIsICAgICAgICAgICAgMzAxCiAgICAgICAgTUVOVUlURU0gIlJvemJhbGl0ICZzdHJvbVx0KiIsICAgICAgICAgIDMwMgogICAgICAgIE1FTlVJVEVNICJSb3piYWxpdCAmdpplXHRTdHJnKyoiLCAgICAgICAzMDMKICAgICAgICBNRU5VSVRFTSAiU2JhbGl0ICZzdHJvbVx0LSIsICAgICAgICAgICAgMzA0CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZPem5h6Gl0IHBvdG9ta3kiLCAgICAgICAgICAgIDUwNQogICAgfQoKICAgIFBPUFVQICImWm9icmF6ZW7tIiAgewogICAgICAgIE1FTlVJVEVNICImU3Ryb20gYSBhZHJlc+H4ZSIsICAgICAgICAgICA0MTMKICAgICAgICBNRU5VSVRFTSAiJkplbiBzdHJvbSIsICAgICAgICAgICAgICAgICAgNDExCiAgICAgICAgTUVOVUlURU0gIkplbiAmYWRyZXPh+GUiLCAgICAgICAgICAgICAgIDQxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUm96ZOxsaXQiLCAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZKbelubyIsICAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfTkFNRQogICAgICAgIE1FTlVJVEVNICImRGV0YWlseSB2mmVjaCBzb3Vib3L5IiwgICAgICBJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIsjhJnN0Zehu6SBkZXRhaWx5Li4uIiwgICAgICAgIElEX1ZJRVdfU0VMRUNURURfQVRUUklCVVRFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImVPjtZGl0IHBvZGxlIGpt6W5hIiwgICAgICAgICBJRF9WSUVXX1NPUlRfTkFNRQogICAgICAgIE1FTlVJVEVNICJU+O1kaXQgJnBvZGxlIHR5cHUiLCAgICAgICAgICBJRF9WSUVXX1NPUlRfVFlQRQogICAgICAgIE1FTlVJVEVNICJU+O1kaXQgcG9kbGUgJnZlbGlrb3N0aSIsICAgICBJRF9WSUVXX1NPUlRfU0laRQogICAgICAgIE1FTlVJVEVNICJU+O1kaXQgcG9kbGUgJmRhdGEiLCAgICAgICAgICBJRF9WSUVXX1NPUlRfREFURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJU+O1kaXQgcG9kbGUgJi4uLiIsICAgICAgICAgICBJRF9WSUVXX0ZJTFRFUgogICAgfQoKICAgIFBPUFVQICImTmFzdGF2ZW7tIiAgewogICAgICAgIE1FTlVJVEVNICImUG90dnJ6b3bhbu0uLi4iLCAgICAgICAgICAgICA1MDEKICAgICAgICBNRU5VSVRFTSAiJlDtc21vLi4uIiwgICAgICAgICAgICAgICAgICAgSURfU0VMRUNUX0ZPTlQKICAgICAgICBNRU5VSVRFTSAiVXByYXZpdCBwYW5lbCAmbuFzdHJvavkuLi4iLCAgNTEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZQYW5lbCBu4XN0cm9q+SIsICAgICAgICAgICAgIElEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJlBhbmVsIHph+O1lbu0iLCAgICAgICAgICAgICAgSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJlN0YXZvdv0g+OFkZWsiLCAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICImQ2VsYeEgb2JyYXpvdmthXHRDdHJsK1NoaWZ0K1MiLCBJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZNaW5pbWFsaXpvdmF0IHD4aSBzcHWadOxu7SIsIDUwNAogICAgICAgIE1FTlVJVEVNICImVWxvnml0IG5hc3RhdmVu7SBw+GkgdnlwbnV07SIsNTExCiAgICB9CgoKICAgIFBPUFVQICImWmFiZXpwZehlbu0iICB7CiAgICAgICAgTUVOVUlURU0gIiZQ+O1zdHVwLi4uIiwgICAgICAgICAgICAgICAgIDYwNQogICAgICAgIE1FTlVJVEVNICImTG9nb3bhbu0uLi4iLCAgICAgICAgICAgICAgICA2MDYKICAgICAgICBNRU5VSVRFTSAiJlZsYXN0bu1rLi4uIiwgICAgICAgICAgICAgICAgNjA3CiAgICB9CgogICAgUE9QVVAgIiZPa25vIiAgewogICAgICAgIE1FTlVJVEVNICJOb3bpICZva25vIiwgICAgICAgICAgICAgICAgICBJRF9XSU5ET1dfTkVXCiAgICAgICAgTUVOVUlURU0gIkthc2vhZG924W7tXHRDdHJsK0Y1IiwgICAgICAgIElEX1dJTkRPV19DQVNDQURFCiAgICAgICAgTUVOVUlURU0gIlVzcG/44WRhdCAmaG9yaXpvbnThbG7sIiwgICAgIElEX1dJTkRPV19USUxFX0hPUloKICAgICAgICBNRU5VSVRFTSAiVXNwb/jhZGF0ICZ2ZXJ0aWvhbG7sXHRDdHJsK0Y0IixJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiWmFyb3ZuYXQgYXV0b21hdGlja3kiLCAgICAgICAgSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgogICAgICAgIE1FTlVJVEVNICJaYXJvdm5hdCAmc3ltYm9seSIsICAgICAgICAgICBJRF9XSU5ET1dfQVJSQU5HRQogICAgICAgIE1FTlVJVEVNICImQWt0dWFsaXpvdmF0XHRGNSIsICAgICAgICAgICBJRF9SRUZSRVNICiAgICB9CgogICAgUE9QVVAgIiY/IiAgewogICAgICAgIE1FTlVJVEVNICImVOltYXRhIG7hcG927GR5XHRGMSIsICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIkhsZWThbu0gdiAmbuFwb3bsZOwuLi5cdEYxIiwgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJkphayBwb3We7XZhdCBu4XBvduxkdVx0RjEiLCAgSURfSEVMUF9VU0lORwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImSW5mb3JtYWNlIG8gV2luZWZpbGUuLi4iLCAgICBJRF9BQk9VVAojaWZkZWYgX19XSU5FX18KICAgICAgICBNRU5VSVRFTSAiSW5mb3JtYWNlIG8gJldpbmUuLi4iLCAgICAgICAgSURfQUJPVVRfV0lORQojZW5kaWYKICAgIH0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlNwdXN0aXQiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJlD47WthejoiLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKICAgIENPTlRST0wgICAgICAgICAiSmFrbyAmU3ltYm9sIiwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIlpydZppdCIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImUG9tb2MiLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9CgpJRERfU0VMRUNUX0RFU1RJTkFUSU9OIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlp2b2x0ZSBj7WwiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJkNlc3RhOiIsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKICAgIEVESVRURVhUICAgICAgICAyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIlpydZppdCIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImUHJvY2jhemV0IiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0ZPTlRfU0VMX0RMR19OQU1FICAgIkFwbGlrb3bhbu0gbmFzdGF2ZW7tIHDtc21hIgogICAgSURTX0ZPTlRfU0VMX0VSUk9SICAgICAgIkNoeWJhIHD4aSB2b2xi7CBub3bpaG8gcO1zbWEuIgp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfV0lORUZJTEUgICAgICAgICAgICAiV2luZWZpbGUiCiAgICBJRFNfRVJST1IgICAgICAgICAgICAgICAiQ2h5YmEiCiAgICBJRFNfUk9PVF9GUyAgICAgICAgICAgICAicm9vdCBmcyIKICAgIElEU19VTklYRlMgICAgICAgICAgICAgICJ1bml4ZnMiCiAgICBJRFNfREVTS1RPUCAgICAgICAgICAgICAiUGxvY2hhIgogICAgSURTX1NIRUxMICAgICAgICAgICAgICAgIlD47Wthem92/SD44WRlayIKICAgIElEU19USVRMRUZNVCAgICAgICAgICAgICIlcyAtICVzIgogICAgSURTX05PX0lNUEwgICAgICAgICAgICAgIlphdO1tIG5laW1wbGVtZW50b3bhbm8iCiAgICBJRFNfV0lORSAgICAgICAgICAgICAgICAiV0lORSIKICAgIElEU19XSU5FX0ZJTEUgICAgICAgICAgICJXaW5lIEZpbGUiCn0KClNUUklOR1RBQkxFCnsKICAgIElEU19DT0xfTkFNRSAgICAgICAgICAgICJKbelubyIKICAgIElEU19DT0xfU0laRSAgICAgICAgICAgICJWZWxpa29zdCIKICAgIElEU19DT0xfQ0RBVEUgICAgICAgICAgICJEYXR1bSB2eXR2b/hlbu0iCiAgICBJRFNfQ09MX0FEQVRFICAgICAgICAgICAiRGF0dW0gcG9zbGVkbu1obyBw+O1zdHVwdSIKICAgIElEU19DT0xfTURBVEUgICAgICAgICAgICJEYXR1bSBwb3NsZWRu7SBtb2RpZmlrYWNlIgogICAgSURTX0NPTF9JRFggICAgICAgICAgICAgIkluZGV4L0lub2RlIgogICAgSURTX0NPTF9MSU5LUyAgICAgICAgICAgIkxpbmt5IgogICAgSURTX0NPTF9BVFRSICAgICAgICAgICAgIkF0cmlidXR5IgogICAgSURTX0NPTF9TRUMgICAgICAgICAgICAgIlphYmV6cGXoZW7tIgp9Cg==