Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLy8gCi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwovLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAovLwovLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgovLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgovLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAovLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwovLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gQGZpbGUgICAgICAgPHNjcjFfaXBpYy5zdmg+Ci8vLyBAYnJpZWYgICAgICBJUElDIGhlYWRlciBmaWxlCi8vLwoKYGlmbmRlZiBTQ1IxX0lQSUNfU1ZICmBkZWZpbmUgU0NSMV9JUElDX1NWSAoKYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCgpgaWZkZWYgU0NSMV9JUElDX0VOCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQYXJhbWV0ZXJzIGRlY2xhcmF0aW9uCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVJRX1ZFQ1RfTlVNICAgICAgID0gMTY7ICAgLy8gbXVzdCBiZSBwb3dlciBvZiAyIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCnBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUlFfVkVDVF9XSURUSCAgICAgPSAkY2xvZzIoU0NSMV9JUlFfVkVDVF9OVU0rMSk7CnBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUlFfTElORVNfTlVNICAgICAgPSBTQ1IxX0lSUV9WRUNUX05VTTsKcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lSUV9MSU5FU19XSURUSCAgICA9ICRjbG9nMihTQ1IxX0lSUV9MSU5FU19OVU0pOwpwYXJhbWV0ZXIgICBsb2dpYyBbU0NSMV9JUlFfVkVDVF9XSURUSC0xOjBdIFNDUjFfSVJRX1ZPSURfVkVDVF9OVU0gID0gU0NSMV9JUlFfVkVDVF9XSURUSCcoU0NSMV9JUlFfVkVDVF9OVU0pOwpwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVJRX0lEWF9XSURUSCAgICAgID0gJGNsb2cyKFNDUjFfSVJRX1ZFQ1RfTlVNKTsKCi8vIEFkZHJlc3MgZGVjb2RpbmcgcGFyYW1ldGVycwpwYXJhbWV0ZXIgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19DSVNWICAgICAgICAgID0gMydoMDsgICAgLy8gUk8KcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfQ0lDU1IgICAgICAgICA9IDMnaDE7ICAgIC8vIHtJUCwgSUV9CnBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lQUiAgICAgICAgICAgPSAzJ2gyOyAgICAvLyBSVzFDCnBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lTVlIgICAgICAgICAgPSAzJ2gzOyAgICAvLyBSTwpwYXJhbWV0ZXIgICBsb2dpYyBbMjowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19FT0kgICAgICAgICAgID0gMydoNDsgICAgLy8gUlpXCnBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX1NPSSAgICAgICAgICAgPSAzJ2g1OyAgICAvLyBSWlcKcGFyYW1ldGVyICAgbG9naWMgWzI6MF0gICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSURYICAgICAgICAgICA9IDMnaDY7ICAgIC8vIFJXCnBhcmFtZXRlciAgIGxvZ2ljIFsyOjBdICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1IgICAgICAgICAgPSAzJ2g3OyAgICAvLyBSVwoKcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9JUCAgICAgICA9IDA7CnBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfSUUgICAgICAgPSAxOwpwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX0lNICAgICAgID0gMjsKcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9JTlYgICAgICA9IDM7CnBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfSVMgICAgICAgPSA0OwpwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19JQ1NSX1BSVl9MU0IgID0gODsKcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9QUlZfTVNCICA9IDk7CnBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSMV9JUElDX0lDU1JfTE5fTFNCICAgPSAxMjsKcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1IxX0lQSUNfSUNTUl9MTl9NU0IgICA9IFNDUjFfSVBJQ19JQ1NSX0xOX0xTQgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgU0NSMV9JUlFfTElORVNfV0lEVEg7CgpwYXJhbWV0ZXIgICBsb2dpYyBbMTowXSAgICAgICAgICAgICAgICAgICAgIFNDUjFfSVBJQ19QUlZfTSAgICAgICAgID0gMidiMTE7CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gVHlwZXMgZGVjbGFyYXRpb24KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnR5cGVkZWYgZW51bSBsb2dpYyB7CiAgICBTQ1IxX0NTUjJJUElDX1JELAogICAgU0NSMV9DU1IySVBJQ19XUgpgaWZkZWYgU0NSMV9YUFJPUF9FTgogICAgLAogICAgU0NSMV9DU1IySVBJQ19FUlJPUiA9ICd4CmBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCn0gdHlwZV9zY3IxX2NzcjJpcGljX3dyX2U7CgpgZW5kaWYgLy8gU0NSMV9JUElDX0VOCmBlbmRpZiAvLyBTQ1IxX0lQSUNfU1ZICg==