LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIFdpbmVNaW5lCiAqIEN6ZWNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgSm9zaHVhIFRoaWVsZW4KICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDQgRGF2aWQgS3JlZGJhCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfQ1pFQ0gsIFNVQkxBTkdfREVGQVVMVAoKLyogQ3plY2ggc3RyaW5ncyBpbiBDUDEyNTAgKi8KClNUUklOR1RBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgIldpbmVNaW5lIgogICAgIElEU19OT0JPRFksICAiTmlrZG8iCn0KCk1FTlVfV0lORU1JTkUgTUVOVSBESVNDQVJEQUJMRQp7CiAgICBQT1BVUCAiTiZhc3RhdmVu7SIgewogICAgICAgIE1FTlVJVEVNICImTm924Vx0RjIiLCAgICAgICBJRE1fTkVXCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZPem5h6G92YXQgbmVyb3pob2RudXTpIiwgSURNX01BUktRCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZaYejhdGXobu1rIiwgICAgICBJRE1fQkVHSU5ORVIKICAgICAgICBNRU5VSVRFTSAiJlBva3Jv6Gls/SIsICAgICAgSURNX0FEVkFOQ0VECiAgICAgICAgTUVOVUlURU0gIiZFeHBlcnQiLCAgICAgICAgSURNX0VYUEVSVAogICAgICAgIE1FTlVJVEVNICImRGxlIGxpYm9zdGkiLCAgICAgICAgSURNX0NVU1RPTQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImS29uZWNcdEFsdCtLIiwgICBJRE1fRVhJVAogICAgfQogICAgUE9QVVAgIiZJbmZvcm1hY2UiIHsKICAgICAgICBNRU5VSVRFTSAiTmUmamxlcJrtIOhhc3kiLCAgICBJRE1fVElNRVMKICAgICAgICBNRU5VSVRFTSAiJk8gYXBsaWthY2kiLCAgICAgICAgIElETV9BQk9VVAogICAgfQp9CgpETEdfVElNRVMgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE2MCwgODAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiTmVqbGVwmu0g6GFzeSIKewogICAgR1JPVVBCT1ggICAgICAgICJOZWpsZXCa7SDoYXN5IiwgSURJR05PUkUsICAxMCwgIDEwLCAxNDAsICA0NQogICAgTFRFWFQgICAgICAgICAgICJaYejhdGXobu1rIiwgICAgICBJRElHTk9SRSwgIDIwLCAgMjAsICA0MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIlBva3Jv6Gls/SIsICAgICAgSURJR05PUkUsICAyMCwgIDMwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICJFeHBlcnQiLCAgICAgICAgSURJR05PUkUsICAyMCwgIDQwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTEsICA3MCwgIDIwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTIsICA3MCwgIDMwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTMsICA3MCwgIDQwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTEsICA5MCwgIDIwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTIsICA5MCwgIDMwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTMsICA5MCwgIDQwLCAgNTUsICAgOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgICAgICAgICAgIElET0ssICA1NSwgIDYwLCAgNTAsICAxNQp9CgpETEdfQ09OR1JBVFMgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxNjAsIDYwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIkdyYXR1bHVqZW1lICEiCnsKICAgIExURVhUICAgICAgICAgICAiUHJvc+1tLCB6YWRlanRlIHN26SBqbelubyIsIElESUdOT1JFLCAgMTAsICAxMCwgMTUwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURDX0VESVROQU1FLCAgMjUsICAyMCwgMTEwLCAgMTIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgICAgICAgICAgICAgICAgICAgICBJRE9LLCAgNjAsICA0MCwgIDQwLCAgMTUKfQoKRExHX0NVU1RPTSBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDEwMCwgMTAwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIlZsYXN0bu0gaHJhIgp7CiAgICBMVEVYVCAgICAgICAgICAgItjhZGt5IiwgICBJRElHTk9SRSwgICA1LCAgIDUsICAzMCwgIDEwCiAgICBMVEVYVCAgICAgICAgICAgIlNsb3VwY2UiLCAgIElESUdOT1JFLCAgIDUsICAzNSwgIDMwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiTWlueSIsICBJRElHTk9SRSwgICA1LCAgNjUsICAzMCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgSURDX0VESVRST1dTLCAgIDUsICAxNSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgIElEQ19FRElUQ09MUywgICA1LCAgNDUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIEVESVRURVhUICAgICAgICAgICAgIElEQ19FRElUTUlORVMsICAgNSwgIDc1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgIElET0ssICAgICAgNDAsICAzMCwgIDUwLCAgMTUKICAgIFBVU0hCVVRUT04gICAgICAiU3Rvcm5vIiwgSURDQU5DRUwsICA0MCwgIDUwLCAgNTAsICAxNQp9CgpETEdfQUJPVVQgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxNjAsIDgwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIk8gYXBsaWthY2kiCnsKICAgIExURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaW5lbWluZSIsIElESUdOT1JFLCAgMTAsICAxMCwgIDUwLCAgMTAKICAgIExURVhUICAgICAgICAgIkNvcHlyaWdodCAyMDAwLCBKb3NodWEgVGhpZWxlbiIsIElESUdOT1JFLCAgMzUsICAyNSwgMTE1LCAgMTAKICAgIExURVhUICAgICAgICAgICAgICAgICAiTGljZW5vduFuIHBvZCBMR1BMIiwgSURJR05PUkUsICAzNSwgIDM1LCAxMTUsICAxMAogICAgSUNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldJTkVNSU5FIiwgSURJR05PUkUsICAxMCwgIDI1LCAgMjAsICAyMAogICAgREVGUFVTSEJVVFRPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9LIiwgSURPSywgICAgICA1MCwgIDYwLCAgNjAsICAxNQp9Cg==