LyoKICogS29yZWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDggTWlrb2xhaiBaYWxld3NraQogKiBDb3B5cmlnaHQgMjAwOSBZdW5Tb25nIEh3YW5nCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJyZXNvdXJjZS5oIgoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKSURNX0RFQlVHX1BPUFVQIE1FTlUKQkVHSU4KICAgIFBPUFVQICIiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICK18Ln2sdcoJkQpIiwgSURfREVCVUcKICAgIEVORApFTkQKCklERF9DUkFTSF9ETEcgRElBTE9HRVggMTAwLCAxMDAsIDI3MywgMTc1ClNUWUxFIERTX1NFVEZPTlQgfCBEU19NT0RBTEZSQU1FIHwgRFNfRklYRURTWVMgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIsfBt86x17elIL+ht68iCkZPTlQgOCwgIlRhaG9tYSIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiIixJRENfU1RBVElDX0JHLDAsMCwyNzMsNTIsV1NfQk9SREVSLDAKICAgIExURVhUICAgICAgICAgICAiwMwgx8G3zrHXt6UgJXMgwLogvcmwosfRILmuwaa/oSDB97jpx9i8rSDBvrfhuKYgx8q/5LfOIMfVtM+02S4gXAogICAgICAgICAgICAgICAgICAgICAgv+y4rrTCICC60sbtwLsgs6LDxLXluLAgsMW/oSC068fPv6kgwK+wqMC7IMelx9S0z7TZLiIsCiAgICAgICAgICAgICAgICAgICAgSURDX1NUQVRJQ19UWFQxLDI3LDEwLDIyNCwzMAogICAgTFRFWFQgICAgICAgICAgICLHwbfOsde3pcDHILmuwaazqiBXaW5kwMcgsOHH1MC4t84gwKfH2CC537v9x9IgvPYgwNa9wLTPtNkuIFwKCbTnvcXAuiC9x8fgx9Egx8G3zrHXt6W/oSC068fPv6kgIGh0dHA6Ly9hcHBkYi53aW5laHEub3JnIMDHIMbBwLsgyK7AziDH0iC89iDA1r3AtM+02S4gXAogICAgICAgICAgICAgICAgICAgIC5cblxuXAogICAgICAgICAgICAgICAgICAgILi4vuAgwMwgua7BprChIMCptbW/7L+hvK20wiDBuMDnx8/B9iC+yrDtLCC+xsH3ILn2sde3ziC6uLDttcfB9iC+yr7SwLi46SBcCgkJICAgICwgtOe9xcC6IGh0dHA6Ly9idWdzLndpbmVocS5vcme/oSC59rHXt84guriw7cfSILz2IMDWvcC0z7TZLiIsSURDX1NUQVRJQ19UWFQyLDI3LDYwLDIyNCwxMDAKICAgIERFRlBVU0hCVVRUT04gICAitN2x4iIsIElET0ssIDIwNSwgMTUxLCA2MCwgMTYsIFdTX1RBQlNUT1AKRU5ECgpTVFJJTkdUQUJMRQpCRUdJTgogICAgSURTX0FVVE9fQ0FQVElPTiAgICAgIldpbmUgx8G3zrHXt6Ugw+a1uSIKICAgIElEU19JTlZBTElEX1BBUkFNUyAgICKzu7rOIL+ht68gLb/Dudm4o8H2IL7KwLoguMWws7qvvPawoSC16b7uv8giCiAgICBJRFNfVU5JREVOVElGSUVEICAgICAiKL7LvPYgvvjAvSkiCkVORAo=