LyoKICogUHJvZ3JhbSBNYW5hZ2VyCiAqIFBvcnR1Z3Vlc2UgTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMTk5OSBHdXN0YXZvIEp1bmlvciBBbHZlcyA8YWx2ZXNAY29ycmVpb25ldC5jb20uYnI+CiAqIENvcHlyaWdodCAyMDAzIE1hcmNlbG8gRHVhcnRlCiAqIENvcHlyaWdodCAyMDA0IEFt6XJpY28gSm9z6SBNZWxvCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTgoKLyogTWVudSAqLwpNQUlOX01FTlUgTUVOVSAKewogUE9QVVAgIiZBcnF1aXZvIiB7CiAgIE1FTlVJVEVNICImTm92by4uLiIsICAgICAgICAgICAgICBQTV9ORVcKICAgTUVOVUlURU0gIkEmYnJpclx0RW50ZXIiLCAgICAgICAgICAgICBQTV9PUEVOCiAgIE1FTlVJVEVNICImTW92ZXIuLi5cdEY3IiwgICAgICAgICAgICAgUE1fTU9WRSwgICAgICBHUkFZRUQKICAgTUVOVUlURU0gIiZDb3BpYXIuLi5cdEY4IiwgICAgICAgICAgICAgUE1fQ09QWSwgICAgICBHUkFZRUQKICAgTUVOVUlURU0gIiZFeGNsdWlyXHRFbnRmIiwgICAgICAgICAgIFBNX0RFTEVURQogICBNRU5VSVRFTSAiJkF0cmlidXRvcy4uLlx0QWx0K0VudGVyIiwgICAgICAgUE1fQVRUUklCVVRFUwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZFeGVjdXRhci4uLiIsICAgICAgICAgIFBNX0VYRUNVVEUKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICJTYWkmciBkbyBXaW5kb3dzLi4uIiwgICAgICAgICAgICAgUE1fRVhJVAogfQogUE9QVVAgIiZPcOf1ZXMiIHsKICAgTUVOVUlURU0gIiZBdXRvIG9yZ2FuaXphciIsICBQTV9BVVRPX0FSUkFOR0UKICAgTUVOVUlURU0gIiZNaW5pbWl6YXIgbmEgZXhlY3Xn428iLCAgICBQTV9NSU5fT05fUlVOCiAgIE1FTlVJVEVNICImU2FsdmFyIGFsdGVyYef1ZXMgYW8gc2FpciIsIFBNX1NBVkVfU0VUVElOR1MKIH0KIFBPUFVQICImSmFuZWxhcyIgewogICBNRU5VSVRFTSAiJkNhc2NhdGFcdFNoaWZ0K0Y1IiwgICAgICAgUE1fT1ZFUkxBUAogICBNRU5VSVRFTSAiJkxhZG8gYSBsYWRvIFx0U2hpZnQrRjQiLCAgUE1fU0lERV9CWV9TSURFCiAgIE1FTlVJVEVNICImT3JnYW5pemFyIO1jb25lcyIsICAgICAgIFBNX0FSUkFOR0UKIH0KIApQT1BVUCAiQWomdWRhIiB7CiAgIE1FTlVJVEVNICImQ29udGX6ZG8iLCAgICAgICAgIFBNX0NPTlRFTlRTCiAgIE1FTlVJVEVNICImUGVzcXVpc2EuLi4iLCAgICAgICAgICAgUE1fU0VBUkNICiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkFqdWRhIGRhIGFqdWRhIiwgICAgIFBNX0hFTFBPTkhFTFAKICAgTUVOVUlURU0gIiZUdXRvcmlhbCIsICAgICAgICAgUE1fVFVUT1JJQUwKICAgTUVOVUlURU0gU0VQQVJBVE9SCgogICBQT1BVUCAiJkluZm9ybWHn9WVzLi4uIiB7CiAgICAgTUVOVUlURU0gIiZMaWNlbudhIiwgICAgICAgIFBNX0xJQ0VOU0UKICAgICBNRU5VSVRFTSAiJlNFTSBHQVJBTlRJQSIsICAgIFBNX05PX1dBUlJBTlRZCiAgICAgTUVOVUlURU0gIiZTb2JyZSBvIFdJTkUiLCAgICAgUE1fQUJPVVRfV0lORQogICB9CiB9Cn0KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgovKiBNZW51ICovCk1BSU5fTUVOVSBNRU5VIAp7CiBQT1BVUCAiJkZpY2hlaXJvIiB7CiAgIE1FTlVJVEVNICImTm92by4uLiIsICAgICAgICAgICAgICBQTV9ORVcKICAgTUVOVUlURU0gIkEmYnJpclx0RW50ZXIiLCAgICAgICAgICAgICBQTV9PUEVOCiAgIE1FTlVJVEVNICImTW92ZXIuLi5cdEY3IiwgICAgICAgICAgICAgUE1fTU9WRSwgICAgICBHUkFZRUQKICAgTUVOVUlURU0gIiZDb3BpYXIuLi5cdEY4IiwgICAgICAgICAgICAgUE1fQ09QWSwgICAgICBHUkFZRUQKICAgTUVOVUlURU0gIiZFeGNsdWlyXHRFbnRmIiwgICAgICAgICAgIFBNX0RFTEVURQogICBNRU5VSVRFTSAiJkF0cmlidXRvcy4uLlx0QWx0K0VudGVyIiwgICAgICAgUE1fQVRUUklCVVRFUwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZFeGVjdXRhci4uLiIsICAgICAgICAgIFBNX0VYRUNVVEUKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICJTYWkmciBkbyBXaW5kb3dzLi4uIiwgICAgICAgICAgICAgUE1fRVhJVAogfQogUE9QVVAgIiZPcOf1ZXMiIHsKICAgTUVOVUlURU0gIiZBdXRvIG9yZ2FuaXphciIsICBQTV9BVVRPX0FSUkFOR0UKICAgTUVOVUlURU0gIiZNaW5pbWl6YXIgbmEgZXhlY3Xn428iLCAgICBQTV9NSU5fT05fUlVOCiAgIE1FTlVJVEVNICImR3JhdmFyIGFsdGVyYef1ZXMgYW8gc2FpciIsIFBNX1NBVkVfU0VUVElOR1MKIH0KIFBPUFVQICImSmFuZWxhcyIgewogICBNRU5VSVRFTSAiJkNhc2NhdGFcdFNoaWZ0K0Y1IiwgICAgICAgUE1fT1ZFUkxBUAogICBNRU5VSVRFTSAiJkxhZG8gYSBsYWRvIFx0U2hpZnQrRjQiLCAgUE1fU0lERV9CWV9TSURFCiAgIE1FTlVJVEVNICImT3JnYW5pemFyIO1jb25lcyIsICAgICAgIFBNX0FSUkFOR0UKIH0KIApQT1BVUCAiQWomdWRhIiB7CiAgIE1FTlVJVEVNICImQ29udGX6ZG8iLCAgICAgICAgIFBNX0NPTlRFTlRTCiAgIE1FTlVJVEVNICImUGVzcXVpc2EuLi4iLCAgICAgICAgICAgUE1fU0VBUkNICiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkFqdWRhIGRhIGFqdWRhIiwgICAgIFBNX0hFTFBPTkhFTFAKICAgTUVOVUlURU0gIiZUdXRvcmlhbCIsICAgICAgICAgUE1fVFVUT1JJQUwKICAgTUVOVUlURU0gU0VQQVJBVE9SCgogICBQT1BVUCAiJkluZm9ybWHn9WVzLi4uIiB7CiAgICAgTUVOVUlURU0gIiZMaWNlbudhIiwgICAgICAgIFBNX0xJQ0VOU0UKICAgICBNRU5VSVRFTSAiJlNFTSBHQVJBTlRJQSIsICAgIFBNX05PX1dBUlJBTlRZCiAgICAgTUVOVUlURU0gIiZBY2VyY2EgZG8gV0lORSIsICAgICBQTV9BQk9VVF9XSU5FCiAgIH0KIH0KfQoKCi8qIERpYWxvZyBgTmV3JyAqLwoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX05FVVRSQUwKCkRJQUxPR19ORVcgRElBTE9HIDAsIDAsIDE3MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTm92byIKewpSQURJT0JVVFRPTiAgICIiLCAgICAgICAgICAgICAgICAgUE1fTkVXX0dST1VQLCAgICAxMCwgMTUsICAxMCwgMTUKTFRFWFQgICAgICAgICAiJkdydXBvIGRlIHByb2dyYW1hIiwgICBQTV9ORVdfR1JPVVAsICAgIDIwLCAxOCwgIDgwLCAxNQpSQURJT0JVVFRPTiAgICIiLCAgICAgICAgICAgICAgICAgUE1fTkVXX1BST0dSQU0sICAxMCwgMzUsICAxMCwgMTUKTFRFWFQgICAgICAgICAiJlByb2dyYW1hIiwgUE1fTkVXX1BST0dSQU0sICAyMCwgMzgsICA4MCwgMTUKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICBJRE9LLCAgICAgICAgICAgMTA1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgSURDQU5DRUwsICAgICAgIDEwNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWomdWRhIiwgICAgICAgIFBNX0hFTFAsICAgICAgICAxMDUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCgovKiBEaWFsb2cgYE1vdmUnICovCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfTkVVVFJBTAoKRElBTE9HX01PVkUgRElBTE9HIDAsIDAsIDI1MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTW92ZXIgcHJvZ3JhbWEiCnsKTFRFWFQgICAgICAgICAiTW92ZXIgcHJvZ3JhbWE6IiwgICAgSURJR05PUkUsICAgICAgICAgICAgNSwgIDUsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICBQTV9QUk9HUkFNLCAgICAgICAgIDk1LCAgNSwgIDkwLCAxNQpMVEVYVCAgICAgICAgICJEbyBncnVwbzoiLCBJRElHTk9SRSwgICAgICAgICAgICA1LCAxMywgIDkwLCAxNQpMVEVYVCAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgIFBNX0ZST01fR1JPVVAsICAgICAgOTUsIDEzLCAgOTAsIDE1CkxURVhUICAgICAgICAgIiZQYXJhIG8gZ3J1cG86IiwgICBQTV9UT19HUk9VUF9UWFQsICAgICA1LCAyOCwgMTQwLCAxNQpDT01CT0JPWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX1RPX0dST1VQLCAgICAgICAgIDUsIDM4LCAxNDAsIDUwLCBXU19UQUJTVE9QIHwgQ0JTX0RST1BET1dOTElTVApERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgMTg1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAxODUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFqJnVkYSIsICAgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDE4NSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKCi8qIERpYWxvZyBgQ29weScgKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ORVVUUkFMCgpESUFMT0dfQ09QWSBESUFMT0cgMCwgMCwgMjUwLCA2NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJDb3BpYXIgcHJvZ3JhbWEiCnsKTFRFWFQgICAgICAgICAiQ29waWFyIHByb2dyYW1hOiIsICAgIElESUdOT1JFLCAgICAgICAgICAgIDUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgUE1fUFJPR1JBTSwgICAgICAgICA5NSwgIDUsICA5MCwgMTUKTFRFWFQgICAgICAgICAiRG8gZ3J1cG86IiwgSURJR05PUkUsICAgICAgICAgICAgNSwgMTMsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICBQTV9GUk9NX0dST1VQLCAgICAgIDk1LCAxMywgIDkwLCAxNQpMVEVYVCAgICAgICAgICImUGFyYSBvIGdydXBvOiIsICAgUE1fVE9fR1JPVVBfVFhULCAgICAgNSwgMjgsIDE0MCwgMTUKQ09NQk9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9UT19HUk9VUCwgICAgICAgICA1LCAzOCwgMTQwLCA1MCwgV1NfVEFCU1RPUCB8IENCU19EUk9QRE9XTkxJU1QKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgICAgSURPSywgICAgICAgICAgICAgIDE4NSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCAgICAgICAgICBJRENBTkNFTCwgICAgICAgICAgMTg1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBaiZ1ZGEiLCAgICAgICAgICAgIFBNX0hFTFAsICAgICAgICAgICAxODUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCgovKiBEaWFsb2cgYEdyb3VwIGF0dHJpYnV0ZXMnICovCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4KCkRJQUxPR19HUk9VUCBESUFMT0cgMCwgMCwgMjMwLCA2NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBdHJpYnV0b3MgZG8gZ3J1cG8gZGUgcHJvZ3JhbWFzIgp7CkxURVhUICAgICAiJkRlc2NyaefjbzoiLCBQTV9ERVNDUklQVElPTl9UWFQsICAgMDUsIDE4LCAgNTAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0RFU0NSSVBUSU9OLCAgICAgICA2MCwgMTgsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICImR3J1cG8gZGUgYXJxdWl2bzoiLCAgICAgICAgUE1fRklMRV9UWFQsICAgICAgICAgIDA1LCAzOCwgIDUwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9GSUxFLCAgICAgICAgICAgICAgNjAsIDM4LCAgOTAsIDE1LCBXU19UQUJTVE9QCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAxNTUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkNhbmNlbGFyIiwgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgIDE1NSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWomdWRhIiwgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgICAgMTU1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRQoKRElBTE9HX0dST1VQIERJQUxPRyAwLCAwLCAyMzAsIDY1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkF0cmlidXRvcyBkbyBncnVwbyBkZSBwcm9ncmFtYXMiCnsKTFRFWFQgICAgICImRGVzY3Jp5+NvOiIsIFBNX0RFU0NSSVBUSU9OX1RYVCwgICAwNSwgMTgsICA1MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fREVTQ1JJUFRJT04sICAgICAgIDYwLCAxOCwgIDkwLCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgIiZHcnVwbyBkZSBmaWNoZWlybzoiLCAgICAgICAgUE1fRklMRV9UWFQsICAgICAgICAgIDA1LCAzOCwgIDUwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9GSUxFLCAgICAgICAgICAgICAgNjAsIDM4LCAgOTAsIDE1LCBXU19UQUJTVE9QCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAxNTUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkNhbmNlbGFyIiwgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgIDE1NSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWomdWRhIiwgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgICAgMTU1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgoKLyogRGlhbG9nIGBQcm9ncmFtIGF0dHJpYnV0ZXMnICovCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfTkVVVFJBTAoKRElBTE9HX1BST0dSQU0gRElBTE9HIDAsIDAsIDI1MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkF0cmlidXRvcyBkZSBwcm9ncmFtYSIKewpMVEVYVCAgICAgICAgICImRGVzY3Jp5+NvOiIsICBQTV9ERVNDUklQVElPTl9UWFQsICAgMDUsIDEwLCAgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9ERVNDUklQVElPTiwgICAgICAgODAsIDEwLCAgOTAsIDE1LCBXU19UQUJTVE9QCkxURVhUICAgICAgICAgIiZMaW5oYSBkZSBjb21hbmRvOiIsIFBNX0NPTU1BTkRfTElORV9UWFQsICAwNSwgMjUsICA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0NPTU1BTkRfTElORSwgICAgICA4MCwgMjUsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiJlBhc3RhIGRlIHRyYWJhbGhvOiIsICAgIFBNX0RJUkVDVE9SWV9UWFQsICAgICAwNSwgNDAsICA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0RJUkVDVE9SWSwgICAgICAgICA4MCwgNDAsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiJlRlY2xhIGRlIGF0YWxobzoiLCAgICAgIFBNX0hPVF9LRVlfVFhULCAgICAgICAwNSwgNTUsICA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0hPVF9LRVksICAgICAgICAgICA4MCwgNTUsICA5MCwgMTUsIFdTX1RBQlNUT1AKSUNPTiAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0lDT04sICAgICAgICAgICAgICAyMCwgNzAKQ0hFQ0tCT1ggICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX1NZTUJPTCwgICAgICAgICAgICA4MCwgNzUsICAxMCwgMTAsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiRXhlY3V0YXIgJm1pbmltaXphZG8iLCAgICAgICBJRElHTk9SRSwgICAgICAgICAgICAgOTUsIDc1LCAgNzUsIDEwCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgMTg1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgICAgICAgICAgSURDQU5DRUwsICAgICAgICAgICAgMTg1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJQJnJvY3VyYXIuLi4iLCAgICAgICAgICAgICAgIFBNX0JST1dTRSwgICAgICAgICAgIDE4NSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWx0JmVyYXIg7WNvbmUuLi4iLCBQTV9PVEhFUl9TWU1CT0wsICAgICAxODUsIDY1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFqJnVkYSIsICAgICAgICAgICAgICAgICBQTV9IRUxQLCAgICAgICAgICAgICAxODUsIDg1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCgovKiBEaWFsb2cgYFN5bWJvbCcgKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFX0JSQVpJTElBTgoKRElBTE9HX1NZTUJPTCBESUFMT0cgMCwgMCwgMjAwLCA4NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBbHRlcmFyIO1jb25lIgp7CkxURVhUICAgICAiJk5vbWUgZG8gYXJxdWl2bzoiLCAgICBQTV9JQ09OX0ZJTEVfVFhULCAgICA1LCAxNSwgIDQwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9JQ09OX0ZJTEUsICAgICAgIDQ1LCAxNSwgIDg1LCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgIs1jb25lICZhdHVhbDoiLCBQTV9TWU1CT0xfTElTVF9UWFQsICA1LCAzMCwgMTI1LCAxMApDT01CT0JPWCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0xfTElTVCwgICAgICA1LCA0MCwgMTI1LCA1MCwKICAgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19PV05FUkRSQVdGSVhFRCB8IFdTX1RBQlNUT1AKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAxMzUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkNhbmNlbGFyIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAxMzUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZQcm9jdXJhci4uLiIsICAgIFBNX0JST1dTRSwgICAgICAgICAxMzUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFqJnVkYSIsICAgICAgIFBNX0hFTFAsICAgICAgICAgICAxMzUsIDY1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgpESUFMT0dfU1lNQk9MIERJQUxPRyAwLCAwLCAyMDAsIDg1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkFsdGVyYXIg7WNvbmUiCnsKTFRFWFQgICAgICImTm9tZSBkbyBmaWNoZWlybzoiLCAgICBQTV9JQ09OX0ZJTEVfVFhULCAgICA1LCAxNSwgIDQwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9JQ09OX0ZJTEUsICAgICAgIDQ1LCAxNSwgIDg1LCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgIs1jb25lICZhY3R1YWw6IiwgUE1fU1lNQk9MX0xJU1RfVFhULCAgNSwgMzAsIDEyNSwgMTAKQ09NQk9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgUE1fU1lNQk9MX0xJU1QsICAgICAgNSwgNDAsIDEyNSwgNTAsCiAgIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBXU19UQUJTVE9QCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgMTM1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICBJRENBTkNFTCwgICAgICAgICAgMTM1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImUHJvY3VyYXIuLi4iLCAgICBQTV9CUk9XU0UsICAgICAgICAgMTM1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBaiZ1ZGEiLCAgICAgICBQTV9IRUxQLCAgICAgICAgICAgMTM1LCA2NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgoKLyogRGlhbG9nIGBFeGVjdXRlJyAqLwoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX05FVVRSQUwKCkRJQUxPR19FWEVDVVRFIERJQUxPRyAwLCAwLCAyMDAsIDg1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkV4ZWN1dGFyIHByb2dyYW1hIgp7CkxURVhUICAgICAiJkxpbmhhIGRlIGNvbWFuZG86IiwgSURJR05PUkUsICAgMDUsIDE1LCAxMjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0NPTU1BTkQsIDA1LCAyNSwgMTIwLCAxNSwgV1NfVEFCU1RPUApDSEVDS0JPWCAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0wsICAwNSwgNDUsICAxMCwgMTAsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiRXhlY3V0YXIgJm1pbmltaXphZG8iLCAgIElESUdOT1JFLCAgIDIwLCA0NSwgMTIwLCAxMApERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgICAgICAgSURPSywgICAgICAxMzUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkNhbmNlbGFyIiwgICAgICAgICAgIElEQ0FOQ0VMLCAgMTM1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImUHJvY3VyYXIuLi4iLCAgICAgICAgICBQTV9CUk9XU0UsIDEzNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWomdWRhIiwgICAgICAgICAgICAgUE1fSEVMUCwgICAxMzUsIDY1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCgovKiBTdHJpbmdzICovCgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKSURTX1BST0dSQU1fTUFOQUdFUiwJCSJHZXJlbmNpYWRvciBkZSBwcm9ncmFtYXMiCklEU19FUlJPUiwJCQkiRVJSTyIKSURTX1dBUk5JTkcsCQkJIkFWSVNPIgpJRFNfSU5GTywJCQkiSW5mb3JtYefjbyIKSURTX0RFTEVURSwJCQkiRXhjbHVpciIKSURTX0RFTEVURV9HUk9VUF9zLAkJIkV4Y2x1aXIgZ3J1cG8gJyVzJyA/IgpJRFNfREVMRVRFX1BST0dSQU1fcywJCSJFeGNsdWlyIHByb2dyYW1hICclcycgPyIKSURTX05PVF9JTVBMRU1FTlRFRCwJCSJO428gaW1wbGVtZW50YWRvIgpJRFNfRklMRV9SRUFEX0VSUk9SX3MsCQkiRXJybyBsZW5kbyAnJXMnLiIKSURTX0ZJTEVfV1JJVEVfRVJST1JfcywJCSJFcnJvIGVzY3JldmVuZG8gJyVzJy4iCklEU19HUlBGSUxFX1JFQURfRVJST1JfcywJIk8gYXJxdWl2byBkZSBncnVwbyAnJXMnIG7jbyBwb2RlIHNlciBhYmVydG8uXG5EZXZlcuEgc2VyIHRlbnRhZG8gb3V0cmFzIHZlemVzPyIKSURTX09VVF9PRl9NRU1PUlksCQkiU2VtIG1lbfNyaWEuIgpJRFNfV0lOSEVMUF9FUlJPUiwJCSJBanVkYSBu428gZGlzcG9u7XZlbC4iCklEU19VTktOT1dOX0ZFQVRVUkVfcywJCSJSZWN1cnNvIGRlc2NvbmhlY2lkbyBlbSAlcyIKSURTX0ZJTEVfTk9UX09WRVJXUklUVEVOX3MsCSJBcnF1aXZvICclcycgZXhpc3RlLiBO428gc29icmVlc2NyZXZlbmRvLiIKSURTX1NBVkVfR1JPVVBfQVNfcywJCSJTYWx2YXIgZ3J1cG8gY29tbyAnJXMnIHBhcmEgcHJldmVuaXIgYSBzb2JyZWVzY3JpdGEgZG9zIGFycXVpdm9zIG9yaWdpbmFpcy4iCklEU19OT19IT1RfS0VZLAkJCSJOZW5odW1hIgpJRFNfQUxMX0ZJTEVTLAkJCSJUb2RvcyBvcyBhcnF1aXZvcyAoKi4qKSIKSURTX1BST0dSQU1TLAkJCSJQcm9ncmFtYXMiCklEU19MSUJSQVJJRVNfRExMLAkJIkJpYmxpb3RlY2FzICgqLmRsbCkiCklEU19TWU1CT0xfRklMRVMsCQkiQXJxdWl2b3MgZGUg7WNvbmVzIgpJRFNfU1lNQk9MU19JQ08sCQkizWNvbmVzICgqLmljbykiCn0KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19QT1JUVUdVRVNFCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CklEU19QUk9HUkFNX01BTkFHRVIsCQkiR2Vy6m5jaWFkb3IgZGUgcHJvZ3JhbWFzIgpJRFNfRVJST1IsCQkJIkVSUk8iCklEU19XQVJOSU5HLAkJCSJBVklTTyIKSURTX0lORk8sCQkJIkluZm9ybWHn428iCklEU19ERUxFVEUsCQkJIkV4Y2x1aXIiCklEU19ERUxFVEVfR1JPVVBfcywJCSJFeGNsdWlyIGdydXBvICclcycgPyIKSURTX0RFTEVURV9QUk9HUkFNX3MsCQkiRXhjbHVpciBwcm9ncmFtYSAnJXMnID8iCklEU19OT1RfSU1QTEVNRU5URUQsCQkiTuNvIGltcGxlbWVudGFkbyIKSURTX0ZJTEVfUkVBRF9FUlJPUl9zLAkJIkVycm8gYW8gbGVyICclcycuIgpJRFNfRklMRV9XUklURV9FUlJPUl9zLAkJIkVycm8gYW8gZXNjcmV2ZXIgJyVzJy4iCklEU19HUlBGSUxFX1JFQURfRVJST1JfcywJIk8gZmljaGVpcm8gZGUgZ3J1cG8gJyVzJyBu428gcG9kZSBzZXIgYWJlcnRvLlxuRGV2ZXLhIHRlbnRhciBvdXRyYXMgdmV6ZXM/IgpJRFNfT1VUX09GX01FTU9SWSwJCSJTZW0gbWVt83JpYS4iCklEU19XSU5IRUxQX0VSUk9SLAkJIkFqdWRhIG7jbyBkaXNwb27tdmVsLiIKSURTX1VOS05PV05fRkVBVFVSRV9zLAkJIlJlY3Vyc28gZGVzY29uaGVjaWRvIGVtICVzIgpJRFNfRklMRV9OT1RfT1ZFUldSSVRURU5fcywJIkZpY2hlaXJvICclcycgZXhpc3RlLiBO428gc29icmVlc2NyZXZlci4iCklEU19TQVZFX0dST1VQX0FTX3MsCQkiR3JhdmFyIGdydXBvIGNvbW8gJyVzJyBwYXJhIHByZXZlbmlyIGEgc29icmVlc2NyaXRhIGRvcyBmaWNoZWlyb3Mgb3JpZ2luYWlzLiIKSURTX05PX0hPVF9LRVksCQkJIk5lbmh1bWEiCklEU19BTExfRklMRVMsCQkJIlRvZG9zIG9zIGZpY2hlaXJvcyAoKi4qKSIKSURTX1BST0dSQU1TLAkJCSJQcm9ncmFtYXMiCklEU19MSUJSQVJJRVNfRExMLAkJIkJpYmxpb3RlY2FzICgqLmRsbCkiCklEU19TWU1CT0xfRklMRVMsCQkiRmljaGVpcm9zIGRlIO1jb25lcyIKSURTX1NZTUJPTFNfSUNPLAkJIs1jb25lcyAoKi5pY28pIgp9Cg==