LyoKICogQ29weXJpZ2h0IDE5OTkgRXJpYyBLb2hsCiAqCiAqIEN6ZWNoIHJlc291cmNlcyBmb3IgY29tY3RsMzIKICogQ29weXJpZ2h0IDIwMDQgRGF2aWQgS3JlZGJhCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfQ1pFQ0gsIFNVQkxBTkdfREVGQVVMVAoKSUREX1BST1BTSEVFVCBESUFMT0cgRElTQ0FSREFCTEUgMCwgMCwgMjIwLCAxNDAKU1RZTEUgRFNfQ09OVEVYVEhFTFAgfCBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1ZJU0lCTEUKQ0FQVElPTiAiVmxhc3Rub3N0aSAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICJPSyIsICAgICBJRE9LLDQsMTIyLDUwLDE0LCBXU19UQUJTVE9QIHwgV1NfR1JPVVAKICBQVVNIQlVUVE9OICAgICJTdG9ybm8iLCBJRENBTkNFTCw1OCwxMjIsNTAsMTQKICBQVVNIQlVUVE9OICAgICImUG91vu10IiwgSURDX0FQUExZX0JVVFRPTiwxMTIsMTIyLDUwLDE0LFdTX0RJU0FCTEVECiAgUFVTSEJVVFRPTiAgICAiTuFwb3bsZGEiLCAgIElESEVMUCwxNjYsMTIyLDUwLDE0LFdTX1RBQlNUT1B8V1NfR1JPVVAKICBDT05UUk9MICAgICAgICJUYWIiLCAgICBJRENfVEFCQ09OVFJPTCwiU3lzVGFiQ29udHJvbDMyIixXU19DTElQU0lCTElOR1N8V1NfR1JPVVB8V1NfVEFCU1RPUHxUQ1NfTVVMVElMSU5FLDQsNCwyMTIsMTE0CkVORAoKCklERF9XSVpBUkQgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI5MCwgMTU5ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRQpDQVBUSU9OICJQcvl2b2RjZSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIERFRlBVU0hCVVRUT04gIkRva29u6Gl0IiwgIElEQ19GSU5JU0hfQlVUVE9OLDEyMSwxMzgsNTAsMTQKICBERUZQVVNIQlVUVE9OICImRGFsue0gPiIsIElEQ19ORVhUX0JVVFRPTiwxMjEsMTM4LDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiPCAmWnDsdCIsIElEQ19CQUNLX0JVVFRPTiw3MSwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICJTdG9ybm8iLCAgSURDQU5DRUwsMTc4LDEzOCw1MCwxNAogIFBVU0hCVVRUT04gICAgIk7hcG927GRhIiwgICAgSURIRUxQLDIzNSwxMzgsNTAsMTQsV1NfR1JPVVAKICBMVEVYVCAgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FLDcsMTI5LDI3OCwxLFNTX1NVTktFTgogIENPTlRST0wgICAgICAgIlRhYiIsICAgICBJRENfVEFCQ09OVFJPTCwiU3lzVGFiQ29udHJvbDMyIixXU19DTElQU0lCTElOR1MgfCBXU19ESVNBQkxFRCw3LDcsMjU4LDUKICBMVEVYVAkgICAgICAgICIiLCAgICAgICAgSURDX1NVTktFTl9MSU5FSEVBREVSLDAsMzUsMjkwLDEsU1NfTEVGVCB8IFNTX1NVTktFTiB8IFdTX0NISUxEIHwgV1NfVklTSUJMRQpFTkQKCgpJRERfVEJDVVNUT01JWkUgRElBTE9HIERJU0NBUkRBQkxFIDEwLCAyMCwgMzU3LCAxMjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk5hc3RhdmVu7SBwYW5lbHUiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBERUZQVVNIQlVUVE9OICImWmF2+O10IiwgICAgIElEQ0FOQ0VMLDMwOCw2LDQ0LDE0CiAgUFVTSEJVVFRPTiAgICAiJlb9Y2hveu0iLCAgICAgSURDX1JFU0VUX0JUTiwzMDgsMjMsNDQsMTQKICBQVVNIQlVUVE9OICAgICImTuFwb3bsZGEiLCAgICAgIElEQ19IRUxQX0JUTiwzMDgsNDAsNDQsMTQKICBQVVNIQlVUVE9OICAgICJOYWhvciZ1IiwgICBJRENfTU9WRVVQX0JUTiwzMDgsNzQsNDQsMTQKICBQVVNIQlVUVE9OICAgICImRG9s+SIsIElEQ19NT1ZFRE5fQlROLDMwOCw5MSw0NCwxNAogIExURVhUICAgICAgICAgIkQmb3N0dXBu4SB0bGHo7XRrYToiLCAtMSw0LDUsODQsMTAKICBMSVNUQk9YICAgICAgIElEQ19BVkFJTEJUTl9MQk9YLDQsMTcsMTIwLDEwMCwgTEJTX05PVElGWSB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBXU19UQUJTVE9QCiAgUFVTSEJVVFRPTiAgICAiUPhpZCZhdCAtPiIsICAgIElET0ssIDEzMSwgNDIsIDQ0LCAxNAogIFBVU0hCVVRUT04gICAgIjwtIE9kZWImcmF0IiwgSURDX1JFTU9WRV9CVE4sMTMxLDYyLDQ0LDE0CiAgTFRFWFQgICAgICAgICAiJlRsYejtdGthIHBhbmVsdToiLCAtMSwxODIsNSw3OCwxMAogIExJU1RCT1ggICAgICAgSURDX1RPT0xCQVJCVE5fTEJPWCwgMTgyLDE3LDEyMCwxMDAsTEJTX05PVElGWSB8IExCU19PV05FUkRSQVdGSVhFRCB8IExCU19IQVNTVFJJTkdTIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBMQlNfRElTQUJMRU5PU0NST0xMIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgfCBXU19UQUJTVE9QCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURTX0NMT1NFICAgICJaYXb47XQiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElETV9UT0RBWSAgICAiRG5lczoiCiAgICBJRE1fR09UT0RBWSAgIkpkaSBuYSBkbmW5ZWsiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19TRVBBUkFUT1IgIk9kZOxsb3Zh6CIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSEtZX05PTkUgIq7hZG79Igp9Cg==