LyoKICogV2luZU1pbmUKICogUG9saXNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgSm9zaHVhIFRoaWVsZW4KICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDQgSmFjZWsgQ2FiYW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJXaW5lTWluZSIKICAgICBJRFNfTk9CT0RZLCAgIkFub25pbSIKICAgICBJRFNfQUJPVVQsICAgIkNvcHlyaWdodCAyMDAwIEpvc2h1YSBUaGllbGVuIgp9CgpNRU5VX1dJTkVNSU5FIE1FTlUgRElTQ0FSREFCTEUKewogICAgUE9QVVAgIiZPcGNqZSIgewogICAgICAgIE1FTlVJVEVNICImTm93YVx0RjIiLCAgICAgICAgIElETV9ORVcKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlpuYWN6bmlraSIsICAgICAgICBJRE1fTUFSS1EKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlBvY3q5dGt1arljeSIsICAgICBJRE1fQkVHSU5ORVIKICAgICAgICBNRU5VSVRFTSAiWiZhYXdhbnNvd2FueSIsICAgICBJRE1fQURWQU5DRUQKICAgICAgICBNRU5VSVRFTSAiJkVrc3BlcnQiLCAgICAgICAgICBJRE1fRVhQRVJUCiAgICAgICAgTUVOVUlURU0gIiZVv3l0a293bmlrYSIsICAgICAgSURNX0NVU1RPTQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJXJnlqnGNpZVx0QWx0K1giLCAgIElETV9FWElUCiAgICB9CiAgICBQT1BVUCAiJkluZm8iIHsKICAgICAgICBNRU5VSVRFTSAiJk5hamxlcHN6ZSBXeW5pa2kiLCBJRE1fVElNRVMKICAgICAgICBNRU5VSVRFTSAiJk8gUHJvZ3JhbWllIiwgICAgICBJRE1fQUJPVVQKICAgIH0KfQoKRExHX1RJTUVTIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAxNzAsIDgwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIk5hamxlcHN6ZSBXeW5pa2kiCnsKICAgIEdST1VQQk9YICAgICAgICAiTmFqbGVwc3plIFd5bmlraSIsIC0xLCAgMTAsICAxMCwgMTUwLCAgNDUKICAgIExURVhUICAgICAgICAgICAiUG9jerl0a3VquWN5IiwgICAgICAtMSwgIDIwLCAgMjAsICA1MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIlphYXdhbnNvd2FueSIsICAgICAgLTEsICAyMCwgIDMwLCAgNTAsICAgOAogICAgTFRFWFQgICAgICAgICAgICJFa3NwZXJ0IiwgICAgICAgIC0xLCAgMjAsICA0MCwgIDUwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUxLCAgODAsICAyMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUyLCAgODAsICAzMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUzLCAgODAsICA0MCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUxLCAgMTAwLCAgMjAsICA1NSwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIiIsICAgICAgICAgICAgIElEQ19OQU1FMiwgIDEwMCwgIDMwLCAgNTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTMsICAxMDAsICA0MCwgIDU1LCAgIDgKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgICAgICAgICAgICBJRE9LLCAgNjAsICA2MCwgIDUwLCAgMTUKfQoKRExHX0NPTkdSQVRTIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTYwLCA2MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJHcmF0dWxhY2plISIKewogICAgTFRFWFQgICAgICAgICAgICJQb2RhaiBzd29qZSBpbWnqIiwgLTEsICAxMCwgIDEwLCAxNTAsICAxMAogICAgRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRENfRURJVE5BTUUsICAyNSwgIDIwLCAxMTAsICAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgICAgICAgICAgICAgICAgICAgIElET0ssICA2MCwgIDQwLCAgNDAsICAxNQp9CgpETEdfQ1VTVE9NIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTAwLCAxMDAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiVXN0YXdpZW5pYSBVv3l0a293bmlrYSIKewogICAgTFRFWFQgICAgICAgICAgICJXaWVyc3plIiwgICAtMSwgICA1LCAgIDUsICAzMCwgIDEwCiAgICBMVEVYVCAgICAgICAgICAgIktvbHVtbnkiLCAgIC0xLCAgIDUsICAzNSwgIDMwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiTWlueSIsICAtMSwgICA1LCAgNjUsICAzMCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgSURDX0VESVRST1dTLCAgIDUsICAxNSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgIElEQ19FRElUQ09MUywgICA1LCAgNDUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIEVESVRURVhUICAgICAgICAgICAgIElEQ19FRElUTUlORVMsICAgNSwgIDc1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgIElET0ssICAgICAgNDAsICAzMCwgIDUwLCAgMTUKICAgIFBVU0hCVVRUT04gICAgICAiQW51bHVqIiwgSURDQU5DRUwsICA0MCwgIDUwLCAgNTAsICAxNQp9Cg==