LyoKICogIE5vdGVwYWQgKEh1bmdhcmlhbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1cgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQKICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlCiAqICBDb3B5cmlnaHQgMjAwMiBab2x5IE5hZ3kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJkbhamwiIHsKICBNRU5VSVRFTSAi2iZqXHRDdHJsK04iLCAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICJNZWcmbnlpdOFzLi4uXHRDdHJsK08iLCAgICAgICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImTWVudOlzXHRDdHJsK1MiLCAgICAgICAgICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJNZW506XMgbeEmc2vpbnQuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImT2xkYWxiZeFsbO104XMuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJOeW9tJnRhdOFzXHRDdHJsK1AiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJOeW9tdGF08yAmYmXhbGztdOFzLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJktpbOlw6XMiLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiUyZ6ZXJrZXN6dOlzIiB7CiAgTUVOVUlURU0gIiZWaXNzemF2b27hc1x0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIktpduEmZ+FzXHRDdHJsK1giLCAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiJk3hc29s4XNcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImQmVpbGxlc3p06XNcdEN0cmwrViIsICAgIENNRF9QQVNURQogIE1FTlVJVEVNICJU9nImbOlzXHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkF6IPZzc3plcyBraWplbPZs6XNlIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJklk9S9k4XR1bVx0RjUiLCAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZIb3Nzevogc29yb2sgdPZyZGVs6XNlIiwgIENNRF9XUkFQCiB9ClBPUFVQICImS2VyZXPpcyIgewogIE1FTlVJVEVNICImS2VyZXPpcy4uLiIsICAgICAgICAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIkv2dmUmdGtlevUga2VyZXPpc2VcdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJlP6Z/MiIHsKICBNRU5VSVRFTSAiJlTpbWFr9nL2ayIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJktlcmVz6XMuLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZIYXN6buFsYXQiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICJJbmYmb3Jt4WNp8y4uLiIgewogICBNRU5VSVRFTSAiJkxpY2VuYyIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIiZTRU1NSSBHQVJBTkNJQSIsICAgICBDTURfTk9fV0FSUkFOVFkKICAgTUVOVUlURU0gIiZXaW5lIG7pdmplZ3kiLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1CkxBTkdVQUdFIExBTkdfSFVOR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiT2xkYWxiZeFsbO104XMiCnsKTFRFWFQgICAgIiZGZWps6WM6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkzhYmzpYzoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk1hcmfzazoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZCYWw6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZGZWxz9ToiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCovICAgIDB4MTRBLCAgICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkpvYmI6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZBbHPzOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIk3pZ3NlIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImU/pn8yIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfSFVOR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImbiIgICAgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIk9sZGFsc3rhbTogJnMuIiAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgICAgICAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgICAgICAgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSmVneXpldHT2bWIiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJISUJBIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklHWUVMTUVaVEVUyVMiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm3hY2nzIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihu6XZ0ZWxlbikiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWluZGVuIGbhamwgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAiU3r2dmVnZuFqbG9rICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBm4WpsIHT6bCBuYWd5IG3pcmV0+y5cbiBcCkvpcmVtIGhhc3pu4Wxqb24gbeFzaWsgc3r2dmVnc3plcmtlc3p09SBwcm9ncmFtb3QuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSBzevZ2ZWcgbmVtIHRhcnRhbG1heiBrYXJha3RlcnQhIFwKXG5L6XJlbSBn6XBlbGplbiBiZSBu6Wjhbnkga2FyYWt0ZXJ0IOlzIHBy82LhbGphIPpqcmEhIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSBtZWdhZG90dCAnJXMnXG5m4WpsIG5lbSBs6XRlemlrIVxuXG4gXApL7XbhbiBs6XRyZWhvem5pIPpqIGbhamx0PyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZuFqbFxubfNkb3N1bHRcblxuIFwKU3plcmV0bukgbWVudGVuaSBhIHbhbHRveuFzb2thdD8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgbmVtIHRhbOFsaGF08yEiClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiTmluY3MgZWxlZ2VuZPUgc3phYmFkIG1lbfNyaWEhXApcblrhcmpvbiBiZSBu6WjhbnkgYWxrYWxtYXrhc3QsIGV6emVsIG72dmVsdmUgYSBzemFiYWQgbWVt83JpYSBt6XJldOl0XAohIgoKfQo=