LyoKICogU3BhbmlzaCByZXNvdXJjZXMgZm9yIFNFVFVQQVBJCiAqCiAqIENvcHlyaWdodCAyMDAzIEpvc+kgTWFudWVsIEZlcnJlciBPcnRpegogKiBDb3B5cmlnaHQgMjAxMCBKb3PpIFJvc3RhZ25vCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJzZXR1cGFwaV9wcml2YXRlLmgiCgpMQU5HVUFHRSBMQU5HX1NQQU5JU0gsIFNVQkxBTkdfTkVVVFJBTAoKU1RSSU5HVEFCTEUKewogICAgICAgIElEU19QUk9NUFRESVNLICAgIkVsIGFyY2hpdm8gJyVzJyBlbiAlcyBlcyBuZWNlc2FyaW8iCiAgICAgICAgSURTX1VOS05PV04gICAgICAiRGVzY29ub2NpZG8iCiAgICAgICAgSURTX0NPUFlGUk9NICAgICAiQ29waWFyIGFyY2hpdm9zIGRlc2RlOiIKICAgICAgICBJRFNfSU5GTyAgICAgICAgICJFc2NyaWJhIGxhIHJ1dGEgZW4gZG9uZGUgc2UgZW5jdWVudHJhIGVsIGFyY2hpdm8sIHkgbHVlZ28gaGFnYSBjbGljIGVuIE9LLiIKfQoKQ09QWUZJTEVETEdPUkQgRElBTE9HIDIwLCAyMCwgMjA4LCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX1NFVEZPTlQgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OCkNBUFRJT04gIkNvcGlhbmRvIGFyY2hpdm9zLi4uIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCglQVVNIQlVUVE9OICJDYW5jZWxhciIsIElEQ0FOQ0VMLCA3OSwgODQsIDUwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJTFRFWFQgIk9yaWdlbjoiLCAtMSwgNywgNywgNzcsIDExLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUAoJTFRFWFQgIiIsIFNPVVJDRVNUUk9SRCwgNywgMTgsIDE5NCwgMTEsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglMVEVYVCAiRGVzdGlubzoiLCAtMSwgNywgMzAsIDc3LCAxMSwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKCUxURVhUICIiLCBERVNUU1RST1JELCA3LCA0MSwgMTk0LCAyMiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKCUNPTlRST0wgIiIsIFBST0dSRVNTT1JELCAic2V0dXB4X3Byb2dyZXNzIiwgNywgNjMsIDE5NCwgMTMsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKRU5ECgpJRFBST01QVEZPUkRJU0sgRElBTE9HIDAsIDAsIDI1MCwgMTIwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBcmNoaXZvcyBuZWNlc2FyaW9zIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCglMVEVYVCAiSW5zZXJ0ZSBlbCBkaXNjbyBkZSBpbnN0YWxhY2nzbiBkZWwgZmFicmljYW50ZSwgeSBhIGNvbnRpbnVhY2nzblxuY29tcHJ1ZWJlIHF1ZSBsYSB1bmlkYWQgc2VsZWNjaW9uYWRhIGFiYWpvIHNlYSBjb3JyZWN0YSIsIElEQ19GSUxFTkVFREVELCAxMCwgMTAsIDE3NSwgMjIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglMVEVYVCAiIiwgSURDX0lORk8sIDEwLCA1MCwgMTc1LCAyMiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKCUxURVhUICJDb3BpYXIgYXJjaGl2b3MgZGVsIGZhYnJpY2FudGUgZGVzZGU6IiwgSURDX0NPUFlGUk9NLCAxMCwgOTAsIDE3NSwgMTEsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglDT05UUk9MICIiLCBJRENfUEFUSCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAxMCwgMTAwLCAxNzUsIDE0CglQVVNIQlVUVE9OICJPSyIsIElET0ssIDE5NSwgMTAsIDUwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiQ2FuY2VsYXIiLCBJRENBTkNFTCwgMTk1LCAzMCwgNTAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICJCdXNjYXIuLi4iLCBJRENfUlVORExHX0JST1dTRSwgMTk1LCAxMDAsIDUwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUApFTkQK