LyoKICogY29tY3RsIChVa3JhaW5pYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwNCBJbHlhIEtvcm5peWtvCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfVUtSQUlOSUFOLCBTVUJMQU5HX0RFRkFVTFQKCklERF9QUk9QU0hFRVQgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDIyMCwgMTQwClNUWUxFIERTX0NPTlRFWFRIRUxQIHwgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19WSVNJQkxFCkNBUFRJT04gIsLr4PHy6OLu8fKzIOTr/yAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICJPSyIsICAgICBJRE9LLDQsMTIyLDUwLDE0LCBXU19UQUJTVE9QIHwgV1NfR1JPVVAKICBQVVNIQlVUVE9OICAgICImwrPk7LPt4CIsIElEQ0FOQ0VMLDU4LDEyMiw1MCwxNAogIFBVU0hCVVRUT04gICAgIibH4PHy7vHz4uDy6CIsIElEQ19BUFBMWV9CVVRUT04sMTEyLDEyMiw1MCwxNCxXU19ESVNBQkxFRAogIFBVU0hCVVRUT04gICAgIibE7uKz5OrgIiwgICBJREhFTFAsMTY2LDEyMiw1MCwxNCxXU19UQUJTVE9QfFdTX0dST1VQCiAgQ09OVFJPTCAgICAgICAiVGFiIiwgICAgSURDX1RBQkNPTlRST0wsIlN5c1RhYkNvbnRyb2wzMiIsV1NfQ0xJUFNJQkxJTkdTfFdTX0dST1VQfFdTX1RBQlNUT1B8VENTX01VTFRJTElORSw0LDQsMjEyLDExNApFTkQKCgpJRERfV0laQVJEIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAyOTAsIDE1OQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1ZJU0lCTEUKQ0FQVElPTiAizODx8uXwIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgUFVTSEJVVFRPTiAgICAiPCAmzeDn4OQiLCBJRENfQkFDS19CVVRUT04sNzEsMTM4LDUwLDE0CiAgREVGUFVTSEJVVFRPTiAiJsTg67MgPiIsIElEQ19ORVhUX0JVVFRPTiwxMjEsMTM4LDUwLDE0CiAgREVGUFVTSEJVVFRPTiAiJsfg4uXw+Ojy6CIsICBJRENfRklOSVNIX0JVVFRPTiwxMjEsMTM4LDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiJsKz5Oyz7eAiLCAgSURDQU5DRUwsMTc4LDEzOCw1MCwxNAogIFBVU0hCVVRUT04gICAgIibE7uKz5OrgIiwgICAgSURIRUxQLDIzNSwxMzgsNTAsMTQsV1NfR1JPVVAKICBMVEVYVCAgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FLDcsMTI5LDI3OCwxLFNTX1NVTktFTgogIENPTlRST0wgICAgICAgIlRhYiIsICAgICBJRENfVEFCQ09OVFJPTCwiU3lzVGFiQ29udHJvbDMyIixXU19DTElQU0lCTElOR1MgfCBXU19ESVNBQkxFRCw3LDcsMjU4LDUKICBMVEVYVAkgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FSEVBREVSLDAsMzUsMjkwLDEsU1NfTEVGVCB8IFNTX1NVTktFTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRQpFTkQKCgpJRERfVEJDVVNUT01JWkUgRElBTE9HIERJU0NBUkRBQkxFIDEwLCAyMCwgMzU3LCAxMjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIs3g8fLw7unq4CDv4O3l67Mgs+3x8vDz7OXt8rPiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgREVGUFVTSEJVVFRPTiAiJsfg6vDo8ugiLCAgICAgSURDQU5DRUwsMzA4LDYsNDQsMTQKICBQVVNIQlVUVE9OICAgICIm0ero7fPy6CIsICAgICBJRENfUkVTRVRfQlROLDMwOCwyMyw0NCwxNAogIFBVU0hCVVRUT04gICAgIibE7uKz5OrgIiwgICAgICBJRENfSEVMUF9CVE4sMzA4LDQwLDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiz+Xw5fHz7fPy6CDiJuPu8PMiLCAgIElEQ19NT1ZFVVBfQlROLDMwOCw3NCw0NCwxNAogIFBVU0hCVVRUT04gICAgIs/l8OXx8+3z8ugg5O4m7ejn8yIsIElEQ19NT1ZFRE5fQlROLDMwOCw5MSw0NCwxNAogIExURVhUICAgICAgICAgIs3gJv/i7bMg6u3u7+roOiIsIC0xLDQsNSw4NCwxMAogIExJU1RCT1ggICAgICAgSURDX0FWQUlMQlROX0xCT1gsNCwxNywxMjAsMTAwLCBMQlNfTk9USUZZIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCB8IFdTX1RBQlNUT1AKICBQVVNIQlVUVE9OICAgICImxO7k4PLoIC0+IiwgICAgSURPSywgMTMxLCA0MiwgNDQsIDE0CiAgUFVTSEJVVFRPTiAgICAiPC0gJs/w6OHw4PLoIiwgSURDX1JFTU9WRV9CVE4sMTMxLDYyLDQ0LDE0CiAgTFRFWFQgICAgICAgICAiJsrt7u/q6CDv4O3l67Mgs+3x8vDz7OXt8rPiOiIsIC0xLDE4Miw1LDc4LDEwCiAgTElTVEJPWCAgICAgICBJRENfVE9PTEJBUkJUTl9MQk9YLCAxODIsMTcsMTIwLDEwMCxMQlNfTk9USUZZIHwgTEJTX09XTkVSRFJBV0ZJWEVEIHwgTEJTX0hBU1NUUklOR1MgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IExCU19ESVNBQkxFTk9TQ1JPTEwgfCBXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCB8IFdTX1RBQlNUT1AKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfQ0xPU0UgICAgIsfg6vDo8ugiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElETV9UT0RBWSAgICAi0fzu4+7k7bM6IgogICAgSURNX0dPVE9EQVkgICLP7vLu9+3gIOTg8uAiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19TRVBBUkFUT1IgItDu5+Sz6/zt6OoiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIEhLWV9OT05FICLN5ezgIgp9Cg==