LyoKICogUHJvZ3JhbSBNYW5hZ2VyCiAqCiAqIENvcHlyaWdodCAyMDA0LCAyMDA4IEpvc+kgTWFudWVsIEZlcnJlciBPcnRpegogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicHJvZ21hbi5oIgoKTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX05FVVRSQUwKCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImQXJjaGl2byIgewogICBNRU5VSVRFTSAiJk51ZXZvLi4uIiwJCQlQTV9ORVcKICAgTUVOVUlURU0gIkEmYnJpclx0RW50ZXIiLAkJCVBNX09QRU4KICAgTUVOVUlURU0gIiZNb3Zlci4uLlx0RjciLAkJCVBNX01PVkUsICAgICAgR1JBWUVECiAgIE1FTlVJVEVNICImQ29waWFyLi4uXHRGOCIsCQkJUE1fQ09QWSwgICAgICBHUkFZRUQKICAgTUVOVUlURU0gIiZFbGltaW5hclx0U3VwciIsCQkJUE1fREVMRVRFCiAgIE1FTlVJVEVNICImQXRyaWJ1dG9zLi4uXHRBbHQrRW50ZXIiLAkJUE1fQVRUUklCVVRFUwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZFamVjdXRhci4uLiIsCQkJUE1fRVhFQ1VURQogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZTYWxpciBkZSBXaW5kb3dzLi4uIiwJCVBNX0VYSVQKIH0KIFBPUFVQICImT3BjaW9uZXMiIHsKICAgTUVOVUlURU0gIiZPcmRlbmFyIGF1dG9t4XRpY2FtZW50ZSIsCQlQTV9BVVRPX0FSUkFOR0UKICAgTUVOVUlURU0gIiZNaW5pbWl6YXIgYWwgbGFuemFyc2UiLAkJUE1fTUlOX09OX1JVTgogICBNRU5VSVRFTSAiJkd1YXJkYXIgY29uZmlndXJhY2nzbiBhbCBzYWxpciIsCVBNX1NBVkVfU0VUVElOR1MKIH0KIFBPUFVQICImVmVudGFuYXMiIHsKICAgTUVOVUlURU0gIiZDYXNjYWRhXHRTaGlmdCtGNSIsCQlQTV9PVkVSTEFQCiAgIE1FTlVJVEVNICImTW9zYWljb1x0U2hpZnQrRjQiLAkJUE1fU0lERV9CWV9TSURFCiAgIE1FTlVJVEVNICImT3JkZW5hciBpY29ub3MiLAkJCVBNX0FSUkFOR0UKIH0KIApQT1BVUCAiQSZ5dWRhIiB7CiAgIE1FTlVJVEVNICImQ29udGVuaWRvIiwJCQlQTV9DT05URU5UUwogICBNRU5VSVRFTSAiJkJ1c2Nhci4uLiIsCQkJUE1fU0VBUkNICiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkF5dWRhIHNvYnJlIGxhIGF5dWRhIiwJCVBNX0hFTFBPTkhFTFAKICAgTUVOVUlURU0gIiZUdXRvcmlhbCIsCQkJUE1fVFVUT1JJQUwKICAgTUVOVUlURU0gU0VQQVJBVE9SCgogICBQT1BVUCAiJkluZm8uLi4iIHsKICAgICBNRU5VSVRFTSAiJkxpY2VuY2lhIiwJCQlQTV9MSUNFTlNFCiAgICAgTUVOVUlURU0gIiZTSU4gR0FSQU5UzUEiLAkJCVBNX05PX1dBUlJBTlRZCiAgICAgTUVOVUlURU0gIiZBY2VyY2EgZGUgV0lORSIsCQlQTV9BQk9VVF9XSU5FCiAgIH0KIH0KfQoKLyogRGlhbG9nIGBOZXcnICovCgpESUFMT0dfTkVXIERJQUxPRyAwLCAwLCAxNzAsIDY1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk51ZXZvIgp7ClJBRElPQlVUVE9OICAgIiIsICAgICAgICAgICAgICAgICBQTV9ORVdfR1JPVVAsICAgIDEwLCAxNSwgIDEwLCAxNQpMVEVYVCAgICAgICAgICImR3J1cG8gZGUgcHJvZ3JhbWEiLCAgIC0xLCAgICAyMCwgMTgsICA4MCwgMTUKUkFESU9CVVRUT04gICAiIiwgICAgICAgICAgICAgICAgIFBNX05FV19QUk9HUkFNLCAgMTAsIDM1LCAgMTAsIDE1CkxURVhUICAgICAgICAgIiZQcm9ncmFtYSIsIC0xLCAgMjAsIDM4LCAgODAsIDE1CkRFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAgICAgICAgICBJRE9LLCAgICAgICAgICAgMTA1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgSURDQU5DRUwsICAgICAgIDEwNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQSZ5dWRhIiwgICAgICAgIFBNX0hFTFAsICAgICAgICAxMDUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCi8qIERpYWxvZyBgTW92ZScgKi8KCkRJQUxPR19NT1ZFIERJQUxPRyAwLCAwLCAyNTAsIDY1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk1vdmVyIHByb2dyYW1hIgp7CkxURVhUICAgICAgICAgIk1vdmVyIHByb2dyYW1hOiIsICAtMSwgICAgICAgICAgIDUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIiIsICAgICAgICAgICAgICAgICBQTV9QUk9HUkFNLCAgICAgICAgOTUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIiZEZWwgZ3J1cG86IiwgICAgICAtMSwgICAgICAgICAgIDUsIDEzLCAgOTAsIDE1CkxURVhUICAgICAgICAgIiIsICAgICAgICAgICAgICAgICBQTV9GUk9NX0dST1VQLCAgICAgOTUsIDEzLCAgOTAsIDE1CkxURVhUICAgICAgICAgIiZBbCBncnVwbzoiLCAgICAgICBQTV9UT19HUk9VUF9UWFQsICAgIDUsIDI4LCAxNDAsIDE1CkNPTUJPQk9YICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9UT19HUk9VUCwgICAgICAgIDUsIDM4LCAxNDAsIDUwLCBXU19UQUJTVE9QIHwgQ0JTX0RST1BET1dOTElTVApERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgICAgICAgICAgSURPSywgICAgICAgICAgICAgMTg1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgICAgSURDQU5DRUwsICAgICAgICAgMTg1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBJnl1ZGEiLCAgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgMTg1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYENvcHknICovCgpESUFMT0dfQ09QWSBESUFMT0cgMCwgMCwgMjUwLCA2NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJDb3BpYXIgcHJvZ3JhbWEiCnsKTFRFWFQgICAgICAgICAiQ29waWFyIHByb2dyYW1hOiIsICAtMSwgICAgICAgICAgNSwgIDUsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICBQTV9QUk9HUkFNLCAgICAgICA5NSwgIDUsICA5MCwgMTUKTFRFWFQgICAgICAgICAiJkRlbCBncnVwbzoiLCAgICAgICAtMSwgICAgICAgICAgNSwgMTMsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICBQTV9GUk9NX0dST1VQLCAgICA5NSwgMTMsICA5MCwgMTUKTFRFWFQgICAgICAgICAiJkFsIGdydXBvOiIsICAgICAgICBQTV9UT19HUk9VUF9UWFQsICAgNSwgMjgsIDE0MCwgMTUKQ09NQk9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9UT19HUk9VUCwgICAgICAgNSwgMzgsIDE0MCwgNTAsIFdTX1RBQlNUT1AgfCBDQlNfRFJPUERPV05MSVNUCkRFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAgICAgICAgICAgSURPSywgICAgICAgICAgICAxODUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkNhbmNlbGFyIiwgICAgICAgICAgSURDQU5DRUwsICAgICAgICAxODUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkEmeXVkYSIsICAgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAxODUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCi8qIERpYWxvZyBgR3JvdXAgYXR0cmlidXRlcycgKi8KCkRJQUxPR19HUk9VUCBESUFMT0cgMCwgMCwgMjMwLCA2NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJBdHJpYnV0b3MgZGVsIGdydXBvIGRlIHByb2dyYW1hIgp7CkxURVhUICAgICAgICAgIiZEZXNjcmlwY2nzbjoiLCAgUE1fREVTQ1JJUFRJT05fVFhULCAgIDA1LCAxOCwgNTAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgUE1fREVTQ1JJUFRJT04sICAgICAgIDYwLCAxOCwgOTAsIDE1LCBXU19UQUJTVE9QCkxURVhUICAgICImQXJjaGl2byBkZSBncnVwbzoiLCAgUE1fRklMRV9UWFQsICAgICAgICAgIDA1LCAzOCwgNTAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgUE1fRklMRSwgICAgICAgICAgICAgIDYwLCAzOCwgOTAsIDE1LCBXU19UQUJTVE9QCkRFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAgICAgICAgSURPSywgICAgICAgICAgICAgICAgMTU1LCAgNSwgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkNhbmNlbGFyIiwgICAgICAgSURDQU5DRUwsICAgICAgICAgICAgMTU1LCAyNSwgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkEmeXVkYSIsICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgICAgMTU1LCA0NSwgNjAsIDE1LCBXU19UQUJTVE9QCn0KCi8qIERpYWxvZyBgUHJvZ3JhbSBhdHRyaWJ1dGVzJyAqLwoKRElBTE9HX1BST0dSQU0gRElBTE9HIDAsIDAsIDI1MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkF0cmlidXRvcyBkZWwgcHJvZ3JhbWEiCnsKTFRFWFQgICAgICAgICAiJkRlc2NyaXBjafNuOiIsICBQTV9ERVNDUklQVElPTl9UWFQsICAgMDUsIDEwLCA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICBQTV9ERVNDUklQVElPTiwgICAgICAgODAsIDEwLCA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAiJkztbmVhIGRlIGNvbWFuZG9zOiIsICBQTV9DT01NQU5EX0xJTkVfVFhULCAgMDUsIDI1LCA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICBQTV9DT01NQU5EX0xJTkUsICAgICAgODAsIDI1LCA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgIkRpcmVjdG9yaW8gZGUgJnRyYWJham86IixQTV9ESVJFQ1RPUllfVFhULCAgICAgMDUsIDQwLCA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICBQTV9ESVJFQ1RPUlksICAgICAgICAgODAsIDQwLCA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgIiZDb21iaW5hY2nzbiBkZSB0ZWNsYXM6IixQTV9IT1RfS0VZX1RYVCwgICAgICAgMDUsIDU1LCA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICBQTV9IT1RfS0VZLCAgICAgICAgICAgODAsIDU1LCA5MCwgMTUsIFdTX1RBQlNUT1AKSUNPTiAgICAgICAgICAiIiwgICAgICAgICAgICAgICBQTV9JQ09OLCAgICAgICAgICAgICAgMjAsIDcwCkNIRUNLQk9YICAgICAgIiIsICAgICAgICAgICAgICAgUE1fU1lNQk9MLCAgICAgICAgICAgIDgwLCA3NSwgMTAsIDEwLCBXU19UQUJTVE9QCkxURVhUICImTWluaW1pemFyIGFsIGxhbnphcnNlIiwgLTEsICAgICAgICAgICAgIDk1LCA3NSwgNzUsIDEwCkRFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAgICAgICAgSURPSywgICAgICAgICAgICAgICAgMTg1LCAgNSwgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkNhbmNlbGFyIiwgICAgICAgSURDQU5DRUwsICAgICAgICAgICAgMTg1LCAyNSwgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZFeHBsb3Jhci4uLiIsICAgUE1fQlJPV1NFLCAgICAgICAgICAgMTg1LCA0NSwgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gIkNhbWJpYXIgJmljb25vLi4uIiwgUE1fT1RIRVJfU1lNQk9MLCAgICAgMTg1LCA2NSwgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkEmeXVkYSIsICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgICAgMTg1LCA4NSwgNjAsIDE1LCBXU19UQUJTVE9QCn0KCi8qIERpYWxvZyBgU3ltYm9sJyAqLwoKRElBTE9HX1NZTUJPTCBESUFMT0cgMCwgMCwgMjAwLCA4NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJDYW1iaWFyIGljb25vIgp7CkxURVhUICAgICAiJk5vbWJyZSBkZSBhcmNoaXZvOiIsIFBNX0lDT05fRklMRV9UWFQsICAgIDUsIDE1LCAgNDAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0lDT05fRklMRSwgICAgICAgNDUsIDE1LCAgODUsIDE1LCBXU19UQUJTVE9QCkxURVhUICAgICAgICAgIiZJY29ubyBhY3R1YWw6IiwgIFBNX1NZTUJPTF9MSVNUX1RYVCwgIDUsIDMwLCAxMjUsIDEwCkNPTUJPQk9YICAgICAgICAgICAgICAgICAgICAgICAgIFBNX1NZTUJPTF9MSVNULCAgICAgIDUsIDQwLCAxMjUsIDUwLAogICBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgV1NfVEFCU1RPUApERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgMTM1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgICBJRENBTkNFTCwgICAgICAgICAgMTM1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImRXhwbG9yYXIuLi4iLCAgICBQTV9CUk9XU0UsICAgICAgICAgMTM1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBJnl1ZGEiLCAgICAgICAgICBQTV9IRUxQLCAgICAgICAgICAgMTM1LCA2NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYEV4ZWN1dGUnICovCgpESUFMT0dfRVhFQ1VURSBESUFMT0cgMCwgMCwgMjAwLCA4NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFamVjdXRhciBwcm9ncmFtYSIKewpMVEVYVCAgICAgICAgICJM7W5lYSBkZSAmY29tYW5kb3M6IiwgICAgIC0xLCAgIDA1LCAxNSwgMTIwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0NPTU1BTkQsIDA1LCAyNSwgMTIwLCAxNSwgV1NfVEFCU1RPUApDSEVDS0JPWCAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgIFBNX1NZTUJPTCwgIDA1LCA0NSwgIDEwLCAxMCwgV1NfVEFCU1RPUApMVEVYVCAgICAgICAgICImTWluaW1pemFyIGFsIGxhbnphcnNlIiwgIC0xLCAgIDIwLCA0NSwgMTIwLCAxMApERUZQVVNIQlVUVE9OICJBY2VwdGFyIiwgICAgICAgICAgICAgICAgIElET0ssICAgICAgMTM1LCAgNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsICAgICAgICAgICAgICAgIElEQ0FOQ0VMLCAgMTM1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImRXhwbG9yYXIuLi4iLCAgICAgICAgICAgIFBNX0JST1dTRSwgMTM1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBJnl1ZGEiLCAgICAgICAgICAgICAgICAgIFBNX0hFTFAsICAgMTM1LCA2NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBTdHJpbmdzICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CklEU19QUk9HUkFNX01BTkFHRVIsCQkiR2VzdG9yIGRlIHByb2dyYW1hcyIKSURTX0VSUk9SLAkJCSJFUlJPUiIKSURTX1dBUk5JTkcsCQkJIkFEVkVSVEVOQ0EiCklEU19JTkZPLAkJCSJJbmZvcm1hY2nzbiIKSURTX0RFTEVURSwJCQkiRWxpbWluYXIiCklEU19ERUxFVEVfR1JPVVBfcywJCSK/RWxpbWluYXIgZ3J1cG8gYCVzJz8iCklEU19ERUxFVEVfUFJPR1JBTV9zLAkJIr9FbGltaW5hciBwcm9ncmFtYSBgJXMnPyIKSURTX05PVF9JTVBMRU1FTlRFRCwJCSJObyBpbXBsZW1lbnRhZG8iCklEU19GSUxFX1JFQURfRVJST1JfcywJCSJFcnJvciBsZXllbmRvIGAlcycuIgpJRFNfRklMRV9XUklURV9FUlJPUl9zLAkJIkVycm9yIGVzY3JpYmllbmRvIGAlcycuIgpJRFNfR1JQRklMRV9SRUFEX0VSUk9SX3MsCSJcCkVsIGFyY2hpdm8gZGUgZ3J1cG8gYCVzJyBubyBzZSBwdWVkZSBhYnJpci5cblwKv0RlYmUgdm9sdmVyIGEgaW50ZW50YXJzZSBt4XMgYWRlbGFudGU/IgpJRFNfT1VUX09GX01FTU9SWSwJCSJTaW4gbWVtb3JpYS4iCklEU19XSU5IRUxQX0VSUk9SLAkJIkF5dWRhIG5vIGRpc3BvbmlibGUuIgpJRFNfVU5LTk9XTl9GRUFUVVJFX3MsCQkiQ2FyYWN0ZXLtc3RpY2EgZGVzY29ub2NpZGEgZW4gJXMiCklEU19GSUxFX05PVF9PVkVSV1JJVFRFTl9zLAkiRWwgYXJjaGl2byBgJXMnIGV4aXN0ZS4gTm8gc2UgaGEgc29icmVlc2NyaXRvLiIKSURTX1NBVkVfR1JPVVBfQVNfcywJCSJHdWFyZGUgZWwgZ3J1cG8gY29tbyBgJXMnIHBhcmEgcHJldmVuaXIgbGEgc29icmVlc2NyaXR1cmEgZGUgbG9zIGFyY2hpdm9zIG9yaWdpbmFsZXMuIgpJRFNfTk9fSE9UX0tFWSwJCQkiTmluZ3VuYSIKSURTX0FMTF9GSUxFUywJCQkiVG9kb3MgbG9zIGFyY2hpdm9zICgqLiopIgpJRFNfUFJPR1JBTVMsCQkJIlByb2dyYW1hcyIKSURTX0xJQlJBUklFU19ETEwsCQkiTGlicmFy7WFzICgqLmRsbCkiCklEU19TWU1CT0xfRklMRVMsCQkiQXJjaGl2b3MgZGUgaWNvbm9zIgpJRFNfU1lNQk9MU19JQ08sCQkiSWNvbm9zICgqLmljbykiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKSURTX0xJQ0VOU0VfQ0FQVElPTiwgICAgICAgICAgICAiTElDRU5DSUEiCklEU19MSUNFTlNFLAoiVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBcCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgXApMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgXAp2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblwKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBcCkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgXApMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIFwKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQSIKCklEU19XQVJSQU5UWV9DQVBUSU9OLCAgICAgICAgICAgIlNJTiBHQVJBTlTNQSIKSURTX1dBUlJBTlRZLAoiVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIFwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBcCkxlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuIgp9Cg==