Clinical Quality Language Specification, published by Clinical Decision Support WG. This guide is not an authorized publication; it is the continuous build for version 1.5.3 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/cql/ and changes regularly. See the Directory of published versions
{
"resourceType" : "Binary",
"id" : "binary-cql-grammar",
"contentType" : "text/plain",
"data" : "Z3JhbW1hciBjcWw7CgovKgogKiBDbGluaWNhbCBRdWFsaXR5IExhbmd1YWdlIEdyYW1tYXIgU3BlY2lmaWNhdGlvbgogKiBWZXJzaW9uIDEuNSAtIE1peGVkIE5vcm1hdGl2ZS9UcmlhbC1Vc2UKICovCgppbXBvcnQgZmhpcnBhdGg7CgovKgogKiBQYXJzZXIgUnVsZXMKICovCgpkZWZpbml0aW9uCiAgICA6IHVzaW5nRGVmaW5pdGlvbgogICAgfCBpbmNsdWRlRGVmaW5pdGlvbgogICAgfCBjb2Rlc3lzdGVtRGVmaW5pdGlvbgogICAgfCB2YWx1ZXNldERlZmluaXRpb24KICAgIHwgY29kZURlZmluaXRpb24KICAgIHwgY29uY2VwdERlZmluaXRpb24KICAgIHwgcGFyYW1ldGVyRGVmaW5pdGlvbgogICAgOwoKbGlicmFyeQogICAgOgogICAgbGlicmFyeURlZmluaXRpb24/CiAgICBkZWZpbml0aW9uKgogICAgc3RhdGVtZW50KgogICAgRU9GCiAgICA7CgovKgogKiBEZWZpbml0aW9ucwogKi8KCmxpYnJhcnlEZWZpbml0aW9uCiAgICA6ICdsaWJyYXJ5JyBxdWFsaWZpZWRJZGVudGlmaWVyICgndmVyc2lvbicgdmVyc2lvblNwZWNpZmllcik/CiAgICA7Cgp1c2luZ0RlZmluaXRpb24KICAgIDogJ3VzaW5nJyBtb2RlbElkZW50aWZpZXIgKCd2ZXJzaW9uJyB2ZXJzaW9uU3BlY2lmaWVyKT8KICAgIDsKCmluY2x1ZGVEZWZpbml0aW9uCiAgICA6ICdpbmNsdWRlJyBxdWFsaWZpZWRJZGVudGlmaWVyICgndmVyc2lvbicgdmVyc2lvblNwZWNpZmllcik/ICgnY2FsbGVkJyBsb2NhbElkZW50aWZpZXIpPwogICAgOwoKbG9jYWxJZGVudGlmaWVyCiAgICA6IGlkZW50aWZpZXIKICAgIDsKCmFjY2Vzc01vZGlmaWVyCiAgICA6ICdwdWJsaWMnCiAgICB8ICdwcml2YXRlJwogICAgOwoKcGFyYW1ldGVyRGVmaW5pdGlvbgogICAgOiBhY2Nlc3NNb2RpZmllcj8gJ3BhcmFtZXRlcicgaWRlbnRpZmllciAodHlwZVNwZWNpZmllcik/ICgnZGVmYXVsdCcgZXhwcmVzc2lvbik/CiAgICA7Cgpjb2Rlc3lzdGVtRGVmaW5pdGlvbgogICAgOiBhY2Nlc3NNb2RpZmllcj8gJ2NvZGVzeXN0ZW0nIGlkZW50aWZpZXIgJzonIGNvZGVzeXN0ZW1JZCAoJ3ZlcnNpb24nIHZlcnNpb25TcGVjaWZpZXIpPwogICAgOwoKdmFsdWVzZXREZWZpbml0aW9uCiAgICA6IGFjY2Vzc01vZGlmaWVyPyAndmFsdWVzZXQnIGlkZW50aWZpZXIgJzonIHZhbHVlc2V0SWQgKCd2ZXJzaW9uJyB2ZXJzaW9uU3BlY2lmaWVyKT8gY29kZXN5c3RlbXM/CiAgICA7Cgpjb2Rlc3lzdGVtcwogICAgOiAnY29kZXN5c3RlbXMnICd7JyBjb2Rlc3lzdGVtSWRlbnRpZmllciAoJywnIGNvZGVzeXN0ZW1JZGVudGlmaWVyKSogJ30nCiAgICA7Cgpjb2Rlc3lzdGVtSWRlbnRpZmllcgogICAgOiAobGlicmFyeUlkZW50aWZpZXIgJy4nKT8gaWRlbnRpZmllcgogICAgOwoKbGlicmFyeUlkZW50aWZpZXIKICAgIDogaWRlbnRpZmllcgogICAgOwoKY29kZURlZmluaXRpb24KICAgIDogYWNjZXNzTW9kaWZpZXI/ICdjb2RlJyBpZGVudGlmaWVyICc6JyBjb2RlSWQgJ2Zyb20nIGNvZGVzeXN0ZW1JZGVudGlmaWVyIGRpc3BsYXlDbGF1c2U/CiAgICA7Cgpjb25jZXB0RGVmaW5pdGlvbgogICAgOiBhY2Nlc3NNb2RpZmllcj8gJ2NvbmNlcHQnIGlkZW50aWZpZXIgJzonICd7JyBjb2RlSWRlbnRpZmllciAoJywnIGNvZGVJZGVudGlmaWVyKSogJ30nIGRpc3BsYXlDbGF1c2U/CiAgICA7Cgpjb2RlSWRlbnRpZmllcgogICAgOiAobGlicmFyeUlkZW50aWZpZXIgJy4nKT8gaWRlbnRpZmllcgogICAgOwoKY29kZXN5c3RlbUlkCiAgICA6IFNUUklORwogICAgOwoKdmFsdWVzZXRJZAogICAgOiBTVFJJTkcKICAgIDsKCnZlcnNpb25TcGVjaWZpZXIKICAgIDogU1RSSU5HCiAgICA7Cgpjb2RlSWQKICAgIDogU1RSSU5HCiAgICA7CgovKgogKiBUeXBlIFNwZWNpZmllcnMKICovCgp0eXBlU3BlY2lmaWVyCiAgICA6IG5hbWVkVHlwZVNwZWNpZmllcgogICAgfCBsaXN0VHlwZVNwZWNpZmllcgogICAgfCBpbnRlcnZhbFR5cGVTcGVjaWZpZXIKICAgIHwgdHVwbGVUeXBlU3BlY2lmaWVyCiAgICB8IGNob2ljZVR5cGVTcGVjaWZpZXIKICAgIDsKCm5hbWVkVHlwZVNwZWNpZmllcgogICAgOiAocXVhbGlmaWVyICcuJykqIHJlZmVyZW50aWFsT3JUeXBlTmFtZUlkZW50aWZpZXIKICAgIDsKCm1vZGVsSWRlbnRpZmllcgogICAgOiBpZGVudGlmaWVyCiAgICA7CgpsaXN0VHlwZVNwZWNpZmllcgogICAgOiAnTGlzdCcgJzwnIHR5cGVTcGVjaWZpZXIgJz4nCiAgICA7CgppbnRlcnZhbFR5cGVTcGVjaWZpZXIKICAgIDogJ0ludGVydmFsJyAnPCcgdHlwZVNwZWNpZmllciAnPicKICAgIDsKCnR1cGxlVHlwZVNwZWNpZmllcgogICAgOiAnVHVwbGUnICd7JyB0dXBsZUVsZW1lbnREZWZpbml0aW9uICgnLCcgdHVwbGVFbGVtZW50RGVmaW5pdGlvbikqICd9JwogICAgOwoKdHVwbGVFbGVtZW50RGVmaW5pdGlvbgogICAgOiByZWZlcmVudGlhbElkZW50aWZpZXIgdHlwZVNwZWNpZmllcgogICAgOwoKY2hvaWNlVHlwZVNwZWNpZmllcgogICAgOiAnQ2hvaWNlJyAnPCcgdHlwZVNwZWNpZmllciAoJywnIHR5cGVTcGVjaWZpZXIpKiAnPicKICAgIDsKCi8qCiAqIFN0YXRlbWVudHMKICovCgpzdGF0ZW1lbnQKICAgIDogZXhwcmVzc2lvbkRlZmluaXRpb24KICAgIHwgY29udGV4dERlZmluaXRpb24KICAgIHwgZnVuY3Rpb25EZWZpbml0aW9uCiAgICA7CgpleHByZXNzaW9uRGVmaW5pdGlvbgogICAgOiAnZGVmaW5lJyBhY2Nlc3NNb2RpZmllcj8gaWRlbnRpZmllciAnOicgZXhwcmVzc2lvbgogICAgOwoKY29udGV4dERlZmluaXRpb24KICAgIDogJ2NvbnRleHQnIChtb2RlbElkZW50aWZpZXIgJy4nKT8gaWRlbnRpZmllcgogICAgOwoKZnVuY3Rpb25EZWZpbml0aW9uCiAgICA6ICdkZWZpbmUnIGFjY2Vzc01vZGlmaWVyPyAnZmx1ZW50Jz8gJ2Z1bmN0aW9uJyBpZGVudGlmaWVyT3JGdW5jdGlvbklkZW50aWZpZXIgJygnIChvcGVyYW5kRGVmaW5pdGlvbiAoJywnIG9wZXJhbmREZWZpbml0aW9uKSopPyAnKScKICAgICAgICAoJ3JldHVybnMnIHR5cGVTcGVjaWZpZXIpPwogICAgICAgICc6JyAoZnVuY3Rpb25Cb2R5IHwgJ2V4dGVybmFsJykKICAgIDsKCm9wZXJhbmREZWZpbml0aW9uCiAgICA6IHJlZmVyZW50aWFsSWRlbnRpZmllciB0eXBlU3BlY2lmaWVyCiAgICA7CgpmdW5jdGlvbkJvZHkKICAgIDogZXhwcmVzc2lvbgogICAgOwoKLyoKICogRXhwcmVzc2lvbnMKICovCgpxdWVyeVNvdXJjZQogICAgOiByZXRyaWV2ZQogICAgfCBxdWFsaWZpZWRJZGVudGlmaWVyRXhwcmVzc2lvbgogICAgfCAnKCcgZXhwcmVzc2lvbiAnKScKICAgIDsKCmFsaWFzZWRRdWVyeVNvdXJjZQogICAgOiBxdWVyeVNvdXJjZSBhbGlhcwogICAgOwoKYWxpYXMKICAgIDogaWRlbnRpZmllcgogICAgOwoKcXVlcnlJbmNsdXNpb25DbGF1c2UKICAgIDogd2l0aENsYXVzZQogICAgfCB3aXRob3V0Q2xhdXNlCiAgICA7Cgp3aXRoQ2xhdXNlCiAgICA6ICd3aXRoJyBhbGlhc2VkUXVlcnlTb3VyY2UgJ3N1Y2ggdGhhdCcgZXhwcmVzc2lvbgogICAgOwoKd2l0aG91dENsYXVzZQogICAgOiAnd2l0aG91dCcgYWxpYXNlZFF1ZXJ5U291cmNlICdzdWNoIHRoYXQnIGV4cHJlc3Npb24KICAgIDsKCnJldHJpZXZlCiAgICA6ICdbJyAoY29udGV4dElkZW50aWZpZXIgJy0+Jyk/IG5hbWVkVHlwZVNwZWNpZmllciAoJzonIChjb2RlUGF0aCBjb2RlQ29tcGFyYXRvcik/IHRlcm1pbm9sb2d5KT8gJ10nCiAgICA7Cgpjb250ZXh0SWRlbnRpZmllcgogICAgOiBxdWFsaWZpZWRJZGVudGlmaWVyRXhwcmVzc2lvbgogICAgOwoKY29kZVBhdGgKICAgIDogc2ltcGxlUGF0aAogICAgOwoKY29kZUNvbXBhcmF0b3IKICAgIDogJ2luJwogICAgfCAnPScKICAgIHwgJ34nCiAgICA7Cgp0ZXJtaW5vbG9neQogICAgOiBxdWFsaWZpZWRJZGVudGlmaWVyRXhwcmVzc2lvbgogICAgfCBleHByZXNzaW9uCiAgICA7CgpxdWFsaWZpZXIKICAgIDogaWRlbnRpZmllcgogICAgOwoKcXVlcnkKICAgIDogc291cmNlQ2xhdXNlIGxldENsYXVzZT8gcXVlcnlJbmNsdXNpb25DbGF1c2UqIHdoZXJlQ2xhdXNlPyAoYWdncmVnYXRlQ2xhdXNlIHwgcmV0dXJuQ2xhdXNlKT8gc29ydENsYXVzZT8KICAgIDsKCnNvdXJjZUNsYXVzZQogICAgOiAnZnJvbSc/IGFsaWFzZWRRdWVyeVNvdXJjZSAoJywnIGFsaWFzZWRRdWVyeVNvdXJjZSkqCiAgICA7CgpsZXRDbGF1c2UKICAgIDogJ2xldCcgbGV0Q2xhdXNlSXRlbSAoJywnIGxldENsYXVzZUl0ZW0pKgogICAgOwoKbGV0Q2xhdXNlSXRlbQogICAgOiBpZGVudGlmaWVyICc6JyBleHByZXNzaW9uCiAgICA7Cgp3aGVyZUNsYXVzZQogICAgOiAnd2hlcmUnIGV4cHJlc3Npb24KICAgIDsKCnJldHVybkNsYXVzZQogICAgOiAncmV0dXJuJyAoJ2FsbCcgfCAnZGlzdGluY3QnKT8gZXhwcmVzc2lvbgogICAgOwoKYWdncmVnYXRlQ2xhdXNlCiAgICA6ICdhZ2dyZWdhdGUnICgnYWxsJyB8ICdkaXN0aW5jdCcpPyBpZGVudGlmaWVyIHN0YXJ0aW5nQ2xhdXNlPyAnOicgZXhwcmVzc2lvbgogICAgOwoKc3RhcnRpbmdDbGF1c2UKICAgIDogJ3N0YXJ0aW5nJyAoc2ltcGxlTGl0ZXJhbCB8IHF1YW50aXR5IHwgKCcoJyBleHByZXNzaW9uICcpJykpCiAgICA7Cgpzb3J0Q2xhdXNlCiAgICA6ICdzb3J0JyAoIHNvcnREaXJlY3Rpb24gfCAoJ2J5JyBzb3J0QnlJdGVtICgnLCcgc29ydEJ5SXRlbSkqKSApCiAgICA7Cgpzb3J0RGlyZWN0aW9uCiAgICA6ICdhc2MnIHwgJ2FzY2VuZGluZycKICAgIHwgJ2Rlc2MnIHwgJ2Rlc2NlbmRpbmcnCiAgICA7Cgpzb3J0QnlJdGVtCiAgICA6IGV4cHJlc3Npb25UZXJtIHNvcnREaXJlY3Rpb24/CiAgICA7CgpxdWFsaWZpZWRJZGVudGlmaWVyCiAgICA6IChxdWFsaWZpZXIgJy4nKSogaWRlbnRpZmllcgogICAgOwoKcXVhbGlmaWVkSWRlbnRpZmllckV4cHJlc3Npb24KICAgIDogKHF1YWxpZmllckV4cHJlc3Npb24gJy4nKSogcmVmZXJlbnRpYWxJZGVudGlmaWVyCiAgICA7CgpxdWFsaWZpZXJFeHByZXNzaW9uCiAgICA6IHJlZmVyZW50aWFsSWRlbnRpZmllcgogICAgOwoKc2ltcGxlUGF0aAogICAgOiByZWZlcmVudGlhbElkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NpbXBsZVBhdGhSZWZlcmVudGlhbElkZW50aWZpZXIKICAgIHwgc2ltcGxlUGF0aCAnLicgcmVmZXJlbnRpYWxJZGVudGlmaWVyICAgICAgICAgICAgICNzaW1wbGVQYXRoUXVhbGlmaWVkSWRlbnRpZmllcgogICAgfCBzaW1wbGVQYXRoICdbJyBzaW1wbGVMaXRlcmFsICddJyAgICAgICAgICAgICAgICAgI3NpbXBsZVBhdGhJbmRleGVyCiAgICA7CgpzaW1wbGVMaXRlcmFsCiAgICA6IFNUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2ltcGxlU3RyaW5nTGl0ZXJhbAogICAgfCBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NpbXBsZU51bWJlckxpdGVyYWwKICAgIDsKCmV4cHJlc3Npb24KICAgIDogZXhwcmVzc2lvblRlcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXJtRXhwcmVzc2lvbgogICAgfCByZXRyaWV2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JldHJpZXZlRXhwcmVzc2lvbgogICAgfCBxdWVyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3F1ZXJ5RXhwcmVzc2lvbgogICAgfCBleHByZXNzaW9uICdpcycgJ25vdCc/ICgnbnVsbCcgfCAndHJ1ZScgfCAnZmFsc2UnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Jvb2xlYW5FeHByZXNzaW9uCiAgICB8IGV4cHJlc3Npb24gKCdpcycgfCAnYXMnKSB0eXBlU3BlY2lmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdHlwZUV4cHJlc3Npb24KICAgIHwgJ2Nhc3QnIGV4cHJlc3Npb24gJ2FzJyB0eXBlU3BlY2lmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjYXN0RXhwcmVzc2lvbgogICAgfCAnbm90JyBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25vdEV4cHJlc3Npb24KICAgIHwgJ2V4aXN0cycgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNleGlzdGVuY2VFeHByZXNzaW9uCiAgICB8IGV4cHJlc3Npb24gJ3Byb3Blcmx5Jz8gJ2JldHdlZW4nIGV4cHJlc3Npb25UZXJtICdhbmQnIGV4cHJlc3Npb25UZXJtICAgICAgICAgICAgICAgICAgICAgICAgICAjYmV0d2VlbkV4cHJlc3Npb24KICAgIHwgKCdkdXJhdGlvbicgJ2luJyk/IHBsdXJhbERhdGVUaW1lUHJlY2lzaW9uICdiZXR3ZWVuJyBleHByZXNzaW9uVGVybSAnYW5kJyBleHByZXNzaW9uVGVybSAgICAgICNkdXJhdGlvbkJldHdlZW5FeHByZXNzaW9uCiAgICB8ICdkaWZmZXJlbmNlJyAnaW4nIHBsdXJhbERhdGVUaW1lUHJlY2lzaW9uICdiZXR3ZWVuJyBleHByZXNzaW9uVGVybSAnYW5kJyBleHByZXNzaW9uVGVybSAgICAgICAjZGlmZmVyZW5jZUJldHdlZW5FeHByZXNzaW9uCiAgICB8IGV4cHJlc3Npb24gKCd8JyB8ICd1bmlvbicgfCAnaW50ZXJzZWN0JyB8ICdleGNlcHQnKSBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5GaXhTZXRFeHByZXNzaW9uCiAgICB8IGV4cHJlc3Npb24gKCc8PScgfCAnPCcgfCAnPicgfCAnPj0nKSBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5lcXVhbGl0eUV4cHJlc3Npb24KICAgIHwgZXhwcmVzc2lvbiBpbnRlcnZhbE9wZXJhdG9yUGhyYXNlIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0aW1pbmdFeHByZXNzaW9uCiAgICB8IGV4cHJlc3Npb24gKCc9JyB8ICchPScgfCAnficgfCAnIX4nKSBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZXF1YWxpdHlFeHByZXNzaW9uCiAgICB8IGV4cHJlc3Npb24gKCdpbicgfCAnY29udGFpbnMnKSBkYXRlVGltZVByZWNpc2lvblNwZWNpZmllcj8gZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAjbWVtYmVyc2hpcEV4cHJlc3Npb24KICAgIHwgZXhwcmVzc2lvbiAnYW5kJyBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhbmRFeHByZXNzaW9uCiAgICB8IGV4cHJlc3Npb24gKCdvcicgfCAneG9yJykgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjb3JFeHByZXNzaW9uCiAgICB8IGV4cHJlc3Npb24gJ2ltcGxpZXMnIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW1wbGllc0V4cHJlc3Npb24KICAgIDsKCmRhdGVUaW1lUHJlY2lzaW9uCiAgICA6ICd5ZWFyJyB8ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICdob3VyJyB8ICdtaW51dGUnIHwgJ3NlY29uZCcgfCAnbWlsbGlzZWNvbmQnCiAgICA7CgpkYXRlVGltZUNvbXBvbmVudAogICAgOiBkYXRlVGltZVByZWNpc2lvbgogICAgfCAnZGF0ZScKICAgIHwgJ3RpbWUnCiAgICB8ICd0aW1lem9uZW9mZnNldCcKICAgIDsKCnBsdXJhbERhdGVUaW1lUHJlY2lzaW9uCiAgICA6ICd5ZWFycycgfCAnbW9udGhzJyB8ICd3ZWVrcycgfCAnZGF5cycgfCAnaG91cnMnIHwgJ21pbnV0ZXMnIHwgJ3NlY29uZHMnIHwgJ21pbGxpc2Vjb25kcycKICAgIDsKCmV4cHJlc3Npb25UZXJtCiAgICA6IHRlcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXJtRXhwcmVzc2lvblRlcm0KICAgIHwgZXhwcmVzc2lvblRlcm0gJy4nIHF1YWxpZmllZEludm9jYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2ludm9jYXRpb25FeHByZXNzaW9uVGVybQogICAgfCBleHByZXNzaW9uVGVybSAnWycgZXhwcmVzc2lvbiAnXScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5kZXhlZEV4cHJlc3Npb25UZXJtCiAgICB8ICdjb252ZXJ0JyBleHByZXNzaW9uICd0bycgKHR5cGVTcGVjaWZpZXIgfCB1bml0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjb252ZXJzaW9uRXhwcmVzc2lvblRlcm0KICAgIHwgKCcrJyB8ICctJykgZXhwcmVzc2lvblRlcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3BvbGFyaXR5RXhwcmVzc2lvblRlcm0KICAgIHwgKCdzdGFydCcgfCAnZW5kJykgJ29mJyBleHByZXNzaW9uVGVybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RpbWVCb3VuZGFyeUV4cHJlc3Npb25UZXJtCiAgICB8IGRhdGVUaW1lQ29tcG9uZW50ICdmcm9tJyBleHByZXNzaW9uVGVybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0aW1lVW5pdEV4cHJlc3Npb25UZXJtCiAgICB8ICdkdXJhdGlvbicgJ2luJyBwbHVyYWxEYXRlVGltZVByZWNpc2lvbiAnb2YnIGV4cHJlc3Npb25UZXJtICAgICAgICAgICAgICAgICAgICNkdXJhdGlvbkV4cHJlc3Npb25UZXJtCiAgICB8ICdkaWZmZXJlbmNlJyAnaW4nIHBsdXJhbERhdGVUaW1lUHJlY2lzaW9uICdvZicgZXhwcmVzc2lvblRlcm0gICAgICAgICAgICAgICAgICNkaWZmZXJlbmNlRXhwcmVzc2lvblRlcm0KICAgIHwgJ3dpZHRoJyAnb2YnIGV4cHJlc3Npb25UZXJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3dpZHRoRXhwcmVzc2lvblRlcm0KICAgIHwgJ3N1Y2Nlc3NvcicgJ29mJyBleHByZXNzaW9uVGVybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3N1Y2Nlc3NvckV4cHJlc3Npb25UZXJtCiAgICB8ICdwcmVkZWNlc3NvcicgJ29mJyBleHByZXNzaW9uVGVybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNwcmVkZWNlc3NvckV4cHJlc3Npb25UZXJtCiAgICB8ICdzaW5nbGV0b24nICdmcm9tJyBleHByZXNzaW9uVGVybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNlbGVtZW50RXh0cmFjdG9yRXhwcmVzc2lvblRlcm0KICAgIHwgJ3BvaW50JyAnZnJvbScgZXhwcmVzc2lvblRlcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3BvaW50RXh0cmFjdG9yRXhwcmVzc2lvblRlcm0KICAgIHwgKCdtaW5pbXVtJyB8ICdtYXhpbXVtJykgbmFtZWRUeXBlU3BlY2lmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3R5cGVFeHRlbnRFeHByZXNzaW9uVGVybQogICAgfCBleHByZXNzaW9uVGVybSAnXicgZXhwcmVzc2lvblRlcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcG93ZXJFeHByZXNzaW9uVGVybQogICAgfCBleHByZXNzaW9uVGVybSAoJyonIHwgJy8nIHwgJ2RpdicgfCAnbW9kJykgZXhwcmVzc2lvblRlcm0gICAgICAgICAgICAgICAgICAgICAjbXVsdGlwbGljYXRpb25FeHByZXNzaW9uVGVybQogICAgfCBleHByZXNzaW9uVGVybSAoJysnIHwgJy0nIHwgJyYnKSBleHByZXNzaW9uVGVybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYWRkaXRpb25FeHByZXNzaW9uVGVybQogICAgfCAnaWYnIGV4cHJlc3Npb24gJ3RoZW4nIGV4cHJlc3Npb24gJ2Vsc2UnIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAjaWZUaGVuRWxzZUV4cHJlc3Npb25UZXJtCiAgICB8ICdjYXNlJyBleHByZXNzaW9uPyBjYXNlRXhwcmVzc2lvbkl0ZW0rICdlbHNlJyBleHByZXNzaW9uICdlbmQnICAgICAgICAgICAgICAgICNjYXNlRXhwcmVzc2lvblRlcm0KICAgIHwgKCdkaXN0aW5jdCcgfCAnZmxhdHRlbicpIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FnZ3JlZ2F0ZUV4cHJlc3Npb25UZXJtCiAgICB8ICgnZXhwYW5kJyB8ICdjb2xsYXBzZScpIGV4cHJlc3Npb24gKCdwZXInIChkYXRlVGltZVByZWNpc2lvbiB8IGV4cHJlc3Npb24pKT8gICNzZXRBZ2dyZWdhdGVFeHByZXNzaW9uVGVybQogICAgOwoKY2FzZUV4cHJlc3Npb25JdGVtCiAgICA6ICd3aGVuJyBleHByZXNzaW9uICd0aGVuJyBleHByZXNzaW9uCiAgICA7CgpkYXRlVGltZVByZWNpc2lvblNwZWNpZmllcgogICAgOiBkYXRlVGltZVByZWNpc2lvbiAnb2YnCiAgICA7CgpyZWxhdGl2ZVF1YWxpZmllcgogICAgOiAnb3IgYmVmb3JlJwogICAgfCAnb3IgYWZ0ZXInCiAgICA7CgpvZmZzZXRSZWxhdGl2ZVF1YWxpZmllcgogICAgOiAnb3IgbW9yZScKICAgIHwgJ29yIGxlc3MnCiAgICA7CgpleGNsdXNpdmVSZWxhdGl2ZVF1YWxpZmllcgogICAgOiAnbGVzcyB0aGFuJwogICAgfCAnbW9yZSB0aGFuJwogICAgOwoKcXVhbnRpdHlPZmZzZXQKICAgIDogKHF1YW50aXR5IG9mZnNldFJlbGF0aXZlUXVhbGlmaWVyPykKICAgIHwgKGV4Y2x1c2l2ZVJlbGF0aXZlUXVhbGlmaWVyIHF1YW50aXR5KQogICAgOwoKdGVtcG9yYWxSZWxhdGlvbnNoaXAKICAgIDogKCdvbiBvcic/ICgnYmVmb3JlJyB8ICdhZnRlcicpKQogICAgfCAoKCdiZWZvcmUnIHwgJ2FmdGVyJykgJ29yIG9uJz8pCiAgICA7CgppbnRlcnZhbE9wZXJhdG9yUGhyYXNlCiAgICA6ICgnc3RhcnRzJyB8ICdlbmRzJyB8ICdvY2N1cnMnKT8gJ3NhbWUnIGRhdGVUaW1lUHJlY2lzaW9uPyAocmVsYXRpdmVRdWFsaWZpZXIgfCAnYXMnKSAoJ3N0YXJ0JyB8ICdlbmQnKT8gICAgICAgICAgICAgICAjY29uY3VycmVudFdpdGhJbnRlcnZhbE9wZXJhdG9yUGhyYXNlCiAgICB8ICdwcm9wZXJseSc/ICdpbmNsdWRlcycgZGF0ZVRpbWVQcmVjaXNpb25TcGVjaWZpZXI/ICgnc3RhcnQnIHwgJ2VuZCcpPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZXNJbnRlcnZhbE9wZXJhdG9yUGhyYXNlCiAgICB8ICgnc3RhcnRzJyB8ICdlbmRzJyB8ICdvY2N1cnMnKT8gJ3Byb3Blcmx5Jz8gKCdkdXJpbmcnIHwgJ2luY2x1ZGVkIGluJykgZGF0ZVRpbWVQcmVjaXNpb25TcGVjaWZpZXI/ICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZWRJbkludGVydmFsT3BlcmF0b3JQaHJhc2UKICAgIHwgKCdzdGFydHMnIHwgJ2VuZHMnIHwgJ29jY3VycycpPyBxdWFudGl0eU9mZnNldD8gdGVtcG9yYWxSZWxhdGlvbnNoaXAgZGF0ZVRpbWVQcmVjaXNpb25TcGVjaWZpZXI/ICgnc3RhcnQnIHwgJ2VuZCcpPyAgICNiZWZvcmVPckFmdGVySW50ZXJ2YWxPcGVyYXRvclBocmFzZQogICAgfCAoJ3N0YXJ0cycgfCAnZW5kcycgfCAnb2NjdXJzJyk/ICdwcm9wZXJseSc/ICd3aXRoaW4nIHF1YW50aXR5ICdvZicgKCdzdGFydCcgfCAnZW5kJyk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3dpdGhpbkludGVydmFsT3BlcmF0b3JQaHJhc2UKICAgIHwgJ21lZXRzJyAoJ2JlZm9yZScgfCAnYWZ0ZXInKT8gZGF0ZVRpbWVQcmVjaXNpb25TcGVjaWZpZXI/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNtZWV0c0ludGVydmFsT3BlcmF0b3JQaHJhc2UKICAgIHwgJ292ZXJsYXBzJyAoJ2JlZm9yZScgfCAnYWZ0ZXInKT8gZGF0ZVRpbWVQcmVjaXNpb25TcGVjaWZpZXI/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNvdmVybGFwc0ludGVydmFsT3BlcmF0b3JQaHJhc2UKICAgIHwgJ3N0YXJ0cycgZGF0ZVRpbWVQcmVjaXNpb25TcGVjaWZpZXI/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzdGFydHNJbnRlcnZhbE9wZXJhdG9yUGhyYXNlCiAgICB8ICdlbmRzJyBkYXRlVGltZVByZWNpc2lvblNwZWNpZmllcj8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kc0ludGVydmFsT3BlcmF0b3JQaHJhc2UKICAgIDsKCnRlcm0KICAgIDogaW52b2NhdGlvbiAgICAgICAgICAgICNpbnZvY2F0aW9uVGVybQogICAgfCBsaXRlcmFsICAgICAgICAgICAgICAgI2xpdGVyYWxUZXJtCiAgICB8IGV4dGVybmFsQ29uc3RhbnQgICAgICAjZXh0ZXJuYWxDb25zdGFudFRlcm0KICAgIHwgaW50ZXJ2YWxTZWxlY3RvciAgICAgICNpbnRlcnZhbFNlbGVjdG9yVGVybQogICAgfCB0dXBsZVNlbGVjdG9yICAgICAgICAgI3R1cGxlU2VsZWN0b3JUZXJtCiAgICB8IGluc3RhbmNlU2VsZWN0b3IgICAgICAjaW5zdGFuY2VTZWxlY3RvclRlcm0KICAgIHwgbGlzdFNlbGVjdG9yICAgICAgICAgICNsaXN0U2VsZWN0b3JUZXJtCiAgICB8IGNvZGVTZWxlY3RvciAgICAgICAgICAjY29kZVNlbGVjdG9yVGVybQogICAgfCBjb25jZXB0U2VsZWN0b3IgICAgICAgI2NvbmNlcHRTZWxlY3RvclRlcm0KICAgIHwgJygnIGV4cHJlc3Npb24gJyknICAgICNwYXJlbnRoZXNpemVkVGVybQogICAgOwoKcXVhbGlmaWVkSW52b2NhdGlvbiAvLyBUZXJtcyB0aGF0IGNhbiBiZSB1c2VkIGFmdGVyIHRoZSBmdW5jdGlvbi9tZW1iZXIgaW52b2NhdGlvbiAnLicKICAgIDogcmVmZXJlbnRpYWxJZGVudGlmaWVyICAgICAgICAgICAgICNxdWFsaWZpZWRNZW1iZXJJbnZvY2F0aW9uCiAgICB8IHF1YWxpZmllZEZ1bmN0aW9uICAgICAgICAgICAgICAgICAjcXVhbGlmaWVkRnVuY3Rpb25JbnZvY2F0aW9uCiAgICA7CgpxdWFsaWZpZWRGdW5jdGlvbgogICAgOiBpZGVudGlmaWVyT3JGdW5jdGlvbklkZW50aWZpZXIgJygnIHBhcmFtTGlzdD8gJyknCiAgICA7CgppbnZvY2F0aW9uCiAgICA6IHJlZmVyZW50aWFsSWRlbnRpZmllciAgICAgICAgICAgICAjbWVtYmVySW52b2NhdGlvbgogICAgfCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgI2Z1bmN0aW9uSW52b2NhdGlvbgogICAgfCAnJHRoaXMnICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RoaXNJbnZvY2F0aW9uCiAgICB8ICckaW5kZXgnICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5kZXhJbnZvY2F0aW9uCiAgICB8ICckdG90YWwnICAgICAgICAgICAgICAgICAgICAgICAgICAjdG90YWxJbnZvY2F0aW9uCiAgICA7CgpmdW5jdGlvbgogICAgOiByZWZlcmVudGlhbElkZW50aWZpZXIgJygnIHBhcmFtTGlzdD8gJyknCiAgICA7CgpyYXRpbwogICAgOiBxdWFudGl0eSAnOicgcXVhbnRpdHkKICAgIDsKCmxpdGVyYWwKICAgIDogKCd0cnVlJyB8ICdmYWxzZScpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Jvb2xlYW5MaXRlcmFsCiAgICB8ICdudWxsJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNudWxsTGl0ZXJhbAogICAgfCBTVFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3RyaW5nTGl0ZXJhbAogICAgfCBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbnVtYmVyTGl0ZXJhbAogICAgfCBMT05HTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbG9uZ051bWJlckxpdGVyYWwKICAgIHwgREFURVRJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RhdGVUaW1lTGl0ZXJhbAogICAgfCBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGF0ZUxpdGVyYWwKICAgIHwgVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RpbWVMaXRlcmFsCiAgICB8IHF1YW50aXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNxdWFudGl0eUxpdGVyYWwKICAgIHwgcmF0aW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JhdGlvTGl0ZXJhbAogICAgOwoKaW50ZXJ2YWxTZWxlY3RvcgogICAgOiAvLyBUT0RPOiBDb25zaWRlciB0aGlzIGFzIGFuIGFsdGVybmF0aXZlIHN5bnRheCBmb3IgaW50ZXJ2YWxzLi4uICh3b3VsZCBuZWVkIHRvIGJlIG1vdmVkIHVwIHRvIGV4cHJlc3Npb24gdG8gbWFrZSBpdCB3b3JrKQogICAgLy9leHByZXNzaW9uICggJy4uJyB8ICcqLicgfCAnLionIHwgJyoqJyApIGV4cHJlc3Npb247CiAgICAnSW50ZXJ2YWwnICgnWyd8JygnKSBleHByZXNzaW9uICcsJyBleHByZXNzaW9uICgnXSd8JyknKQogICAgOwoKdHVwbGVTZWxlY3RvcgogICAgOiAnVHVwbGUnPyAneycgKCc6JyB8ICh0dXBsZUVsZW1lbnRTZWxlY3RvciAoJywnIHR1cGxlRWxlbWVudFNlbGVjdG9yKSopKSAnfScKICAgIDsKCnR1cGxlRWxlbWVudFNlbGVjdG9yCiAgICA6IHJlZmVyZW50aWFsSWRlbnRpZmllciAnOicgZXhwcmVzc2lvbgogICAgOwoKaW5zdGFuY2VTZWxlY3RvcgogICAgOiBuYW1lZFR5cGVTcGVjaWZpZXIgJ3snICgnOicgfCAoaW5zdGFuY2VFbGVtZW50U2VsZWN0b3IgKCcsJyBpbnN0YW5jZUVsZW1lbnRTZWxlY3RvcikqKSkgJ30nCiAgICA7CgppbnN0YW5jZUVsZW1lbnRTZWxlY3RvcgogICAgOiByZWZlcmVudGlhbElkZW50aWZpZXIgJzonIGV4cHJlc3Npb24KICAgIDsKCmxpc3RTZWxlY3RvcgogICAgOiAoJ0xpc3QnICgnPCcgdHlwZVNwZWNpZmllciAnPicpPyk/ICd7JyAoZXhwcmVzc2lvbiAoJywnIGV4cHJlc3Npb24pKik/ICd9JwogICAgOwoKZGlzcGxheUNsYXVzZQogICAgOiAnZGlzcGxheScgU1RSSU5HCiAgICA7Cgpjb2RlU2VsZWN0b3IKICAgIDogJ0NvZGUnIFNUUklORyAnZnJvbScgY29kZXN5c3RlbUlkZW50aWZpZXIgZGlzcGxheUNsYXVzZT8KICAgIDsKCmNvbmNlcHRTZWxlY3RvcgogICAgOiAnQ29uY2VwdCcgJ3snIGNvZGVTZWxlY3RvciAoJywnIGNvZGVTZWxlY3RvcikqICd9JyBkaXNwbGF5Q2xhdXNlPwogICAgOwoKa2V5d29yZAogICAgOiAnYWZ0ZXInCiAgICB8ICdhZ2dyZWdhdGUnCiAgICB8ICdhbGwnCiAgICB8ICdhbmQnCiAgICB8ICdhcycKICAgIHwgJ2FzYycKICAgIHwgJ2FzY2VuZGluZycKICAgIHwgJ2JlZm9yZScKICAgIHwgJ2JldHdlZW4nCiAgICB8ICdieScKICAgIHwgJ2NhbGxlZCcKICAgIHwgJ2Nhc2UnCiAgICB8ICdjYXN0JwogICAgfCAnY29kZScKICAgIHwgJ0NvZGUnCiAgICB8ICdjb2Rlc3lzdGVtJwogICAgfCAnY29kZXN5c3RlbXMnCiAgICB8ICdjb2xsYXBzZScKICAgIHwgJ2NvbmNlcHQnCiAgICB8ICdDb25jZXB0JwogICAgfCAnY29udGFpbnMnCiAgICB8ICdjb250ZXh0JwogICAgfCAnY29udmVydCcKICAgIHwgJ2RhdGUnCiAgICB8ICdkYXknCiAgICB8ICdkYXlzJwogICAgfCAnZGVmYXVsdCcKICAgIHwgJ2RlZmluZScKICAgIHwgJ2Rlc2MnCiAgICB8ICdkZXNjZW5kaW5nJwogICAgfCAnZGlmZmVyZW5jZScKICAgIHwgJ2Rpc3BsYXknCiAgICB8ICdkaXN0aW5jdCcKICAgIHwgJ2RpdicKICAgIHwgJ2R1cmF0aW9uJwogICAgfCAnZHVyaW5nJwogICAgfCAnZWxzZScKICAgIHwgJ2VuZCcKICAgIHwgJ2VuZHMnCiAgICB8ICdleGNlcHQnCiAgICB8ICdleGlzdHMnCiAgICB8ICdleHBhbmQnCiAgICB8ICdmYWxzZScKICAgIHwgJ2ZsYXR0ZW4nCiAgICB8ICdmbHVlbnQnCiAgICB8ICdmcm9tJwogICAgfCAnZnVuY3Rpb24nCiAgICB8ICdob3VyJwogICAgfCAnaG91cnMnCiAgICB8ICdpZicKICAgIHwgJ2ltcGxpZXMnCiAgICB8ICdpbicKICAgIHwgJ2luY2x1ZGUnCiAgICB8ICdpbmNsdWRlcycKICAgIHwgJ2luY2x1ZGVkIGluJwogICAgfCAnaW50ZXJzZWN0JwogICAgfCAnSW50ZXJ2YWwnCiAgICB8ICdpcycKICAgIHwgJ2xldCcKICAgIHwgJ2xpYnJhcnknCiAgICB8ICdMaXN0JwogICAgfCAnbWF4aW11bScKICAgIHwgJ21lZXRzJwogICAgfCAnbWlsbGlzZWNvbmQnCiAgICB8ICdtaWxsaXNlY29uZHMnCiAgICB8ICdtaW5pbXVtJwogICAgfCAnbWludXRlJwogICAgfCAnbWludXRlcycKICAgIHwgJ21vZCcKICAgIHwgJ21vbnRoJwogICAgfCAnbW9udGhzJwogICAgfCAnbm90JwogICAgfCAnbnVsbCcKICAgIHwgJ29jY3VycycKICAgIHwgJ29mJwogICAgfCAnb24gb3InCiAgICB8ICdvcicKICAgIHwgJ29yIGFmdGVyJwogICAgfCAnb3IgYmVmb3JlJwogICAgfCAnb3IgbGVzcycKICAgIHwgJ29yIG1vcmUnCiAgICB8ICdvciBvbicKICAgIHwgJ292ZXJsYXBzJwogICAgfCAncGFyYW1ldGVyJwogICAgfCAncGVyJwogICAgfCAncG9pbnQnCiAgICB8ICdwcmVkZWNlc3NvcicKICAgIHwgJ3ByaXZhdGUnCiAgICB8ICdwcm9wZXJseScKICAgIHwgJ3B1YmxpYycKICAgIHwgJ3JldHVybicKICAgIHwgJ3NhbWUnCiAgICB8ICdzZWNvbmQnCiAgICB8ICdzZWNvbmRzJwogICAgfCAnc2luZ2xldG9uJwogICAgfCAnc3RhcnQnCiAgICB8ICdzdGFydGluZycKICAgIHwgJ3N0YXJ0cycKICAgIHwgJ3NvcnQnCiAgICB8ICdzdWNjZXNzb3InCiAgICB8ICdzdWNoIHRoYXQnCiAgICB8ICd0aGVuJwogICAgfCAndGltZScKICAgIHwgJ3RpbWV6b25lb2Zmc2V0JwogICAgfCAndG8nCiAgICB8ICd0cnVlJwogICAgfCAnVHVwbGUnCiAgICB8ICd1bmlvbicKICAgIHwgJ3VzaW5nJwogICAgfCAndmFsdWVzZXQnCiAgICB8ICd2ZXJzaW9uJwogICAgfCAnd2VlaycKICAgIHwgJ3dlZWtzJwogICAgfCAnd2hlcmUnCiAgICB8ICd3aGVuJwogICAgfCAnd2lkdGgnCiAgICB8ICd3aXRoJwogICAgfCAnd2l0aGluJwogICAgfCAnd2l0aG91dCcKICAgIHwgJ3hvcicKICAgIHwgJ3llYXInCiAgICB8ICd5ZWFycycKICAgIDsKCi8vIE5PVEU6IE5vdCB1c2VkLCB0aGlzIGlzIHRoZSBzZXQgb2YgcmVzZXJ2ZWQgd29yZHMgdGhhdCBtYXkgbm90IGFwcGVhciBhcyBpZGVudGlmaWVycyBpbiBhbWJpZ3VvdXMgY29udGV4dHMKcmVzZXJ2ZWRXb3JkCiAgICA6ICdhZ2dyZWdhdGUnCiAgICB8ICdhbGwnCiAgICB8ICdhbmQnCiAgICB8ICdhcycKICAgIHwgJ2FmdGVyJwogICAgfCAnYmVmb3JlJwogICAgfCAnYmV0d2VlbicKICAgIHwgJ2Nhc2UnCiAgICB8ICdjYXN0JwogICAgfCAnQ29kZScKICAgIHwgJ2NvbGxhcHNlJwogICAgfCAnQ29uY2VwdCcKICAgIHwgJ2NvbnZlcnQnCiAgICB8ICdkYXknCiAgICB8ICdkYXlzJwogICAgfCAnZGlmZmVyZW5jZScKICAgIHwgJ2Rpc3RpbmN0JwogICAgfCAnZHVyYXRpb24nCiAgICB8ICdkdXJpbmcnCiAgICB8ICdlbHNlJwogICAgfCAnZXhpc3RzJwogICAgfCAnZXhwYW5kJwogICAgfCAnZmFsc2UnCiAgICB8ICdmbGF0dGVuJwogICAgfCAnZnJvbScKICAgIHwgJ2lmJwogICAgfCAnaW4nCiAgICB8ICdpbmNsdWRlZCBpbicKICAgIHwgJ2lzJwogICAgfCAnaG91cicKICAgIHwgJ2hvdXJzJwogICAgfCAnSW50ZXJ2YWwnCiAgICB8ICdsZXQnCiAgICB8ICdMaXN0JwogICAgfCAnbWF4aW11bScKICAgIHwgJ21pbGxpc2Vjb25kJwogICAgfCAnbWlsbGlzZWNvbmRzJwogICAgfCAnbWluaW11bScKICAgIHwgJ21pbnV0ZScKICAgIHwgJ21pbnV0ZXMnCiAgICB8ICdtb250aCcKICAgIHwgJ21vbnRocycKICAgIHwgJ25vdCcKICAgIHwgJ251bGwnCiAgICB8ICdvY2N1cnMnCiAgICB8ICdvZicKICAgIHwgJ29uIG9yJwogICAgfCAnb3InCiAgICB8ICdvciBvbicKICAgIHwgJ3BlcicKICAgIHwgJ3BvaW50JwogICAgfCAncHJvcGVybHknCiAgICB8ICdyZXR1cm4nCiAgICB8ICdzYW1lJwogICAgfCAnc2Vjb25kJwogICAgfCAnc2Vjb25kcycKICAgIHwgJ3NpbmdsZXRvbicKICAgIHwgJ3NvcnQnCiAgICB8ICdzdWNoIHRoYXQnCiAgICB8ICd0aGVuJwogICAgfCAndG8nCiAgICB8ICd0cnVlJwogICAgfCAnVHVwbGUnCiAgICB8ICd3ZWVrJwogICAgfCAnd2Vla3MnCiAgICB8ICd3aGVuJwogICAgfCAnd2l0aCcKICAgIHwgJ3dpdGhpbicKICAgIHwgJ3dpdGhvdXQnCiAgICB8ICd5ZWFyJwogICAgfCAneWVhcnMnCiAgICA7CgovLyBLZXl3b3JkIGlkZW50aWZpZXJzIGFyZSBrZXl3b3JkcyB0aGF0IG1heSBiZSB1c2VkIGFzIGlkZW50aWZpZXJzIGluIGEgcmVmZXJlbnRpYWwgY29udGV4dAovLyBFZmZlY3RpdmVseSwga2V5d29yZCBleGNlcHQgcmVzZXJ2ZWRXb3JkCmtleXdvcmRJZGVudGlmaWVyCiAgICA6ICdhc2MnCiAgICB8ICdhc2NlbmRpbmcnCiAgICB8ICdieScKICAgIHwgJ2NhbGxlZCcKICAgIHwgJ2NvZGUnCiAgICB8ICdjb2Rlc3lzdGVtJwogICAgfCAnY29kZXN5c3RlbXMnCiAgICB8ICdjb25jZXB0JwogICAgfCAnY29udGFpbnMnCiAgICB8ICdjb250ZXh0JwogICAgfCAnZGF0ZScKICAgIHwgJ2RlZmF1bHQnCiAgICB8ICdkZWZpbmUnCiAgICB8ICdkZXNjJwogICAgfCAnZGVzY2VuZGluZycKICAgIHwgJ2Rpc3BsYXknCiAgICB8ICdkaXYnCiAgICB8ICdlbmQnCiAgICB8ICdlbmRzJwogICAgfCAnZXhjZXB0JwogICAgfCAnZmx1ZW50JwogICAgfCAnZnVuY3Rpb24nCiAgICB8ICdpbXBsaWVzJwogICAgfCAnaW5jbHVkZScKICAgIHwgJ2luY2x1ZGVzJwogICAgfCAnaW50ZXJzZWN0JwogICAgfCAnbGlicmFyeScKICAgIHwgJ21lZXRzJwogICAgfCAnbW9kJwogICAgfCAnb3IgYWZ0ZXInCiAgICB8ICdvciBiZWZvcmUnCiAgICB8ICdvciBsZXNzJwogICAgfCAnb3IgbW9yZScKICAgIHwgJ292ZXJsYXBzJwogICAgfCAncGFyYW1ldGVyJwogICAgfCAncHJlZGVjZXNzb3InCiAgICB8ICdwcml2YXRlJwogICAgfCAncHVibGljJwogICAgfCAnc3RhcnQnCiAgICB8ICdzdGFydGluZycKICAgIHwgJ3N0YXJ0cycKICAgIHwgJ3N1Y2Nlc3NvcicKICAgIHwgJ3RpbWUnCiAgICB8ICd0aW1lem9uZW9mZnNldCcKICAgIHwgJ3VuaW9uJwogICAgfCAndXNpbmcnCiAgICB8ICd2YWx1ZXNldCcKICAgIHwgJ3ZlcnNpb24nCiAgICB8ICd3aGVyZScKICAgIHwgJ3dpZHRoJwogICAgfCAneG9yJwogICAgOwoKLy8gT2Jzb2xldGUgaWRlbnRpZmllcnMgYXJlIGtleXdvcmRzIHRoYXQgY291bGQgYmUgdXNlZCBhcyBpZGVudGlmaWVycyBpbiBDUUwgMS4zCi8vIE5PVEU6IE5vdCBjdXJyZW50bHkgdXNlZCwgdGhpcyBpcyB0aGUgc2V0IG9mIGtleXdvcmRzIHRoYXQgd2VyZSBkZWZpbmVkIGFzIGFsbG93ZWQgaWRlbnRpZmllcnMgYXMgcGFydCBvZiAxLjMKLy8gTk9URTogU2V2ZXJhbCBrZXl3b3JkcyB3ZXJlIGNvbW1lbnRlZCBvdXQgaW4gdGhpcyBsaXN0IChub3RhYmx5IGV4aXN0cykgYmVjYXVzZSBvZiBhbiBpc3N1ZSB3aXRoIHRoZSBBTlRMUiB0b29saW5nLgovLyBJbiA0LjUsIGhhdmluZyB0aGVzZSBrZXl3b3JkcyBhcyBpZGVudGlmaWVycyByZXN1bHRzIGluIHVuYWNjZXB0YWJsZSBwYXJzaW5nIHBlcmZvcm1hbmNlLiBJbiA0LjYrLCBoYXZpbmcgdGhlbSBhcwovLyBpZGVudGlmaWVycyByZXN1bHRlZCBpbiBpbmNvcnJlY3QgcGFyc2luZy4gU2VlIEdpdGh1YiBpc3N1ZSBbIzM0M10oaHR0cHM6Ly9naXRodWIuY29tL2NxZnJhbWV3b3JrL2NsaW5pY2FsX3F1YWxpdHlfbGFuZ3VhZ2UvaXNzdWVzLzM0MykgZm9yIG1vcmUgZGV0YWlsCi8vIFRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBhbiBpc3N1ZSB3aXRoIDEuNCBkdWUgdG8gdGhlIGludHJvZHVjdGlvbiBvZiByZXNlcnZlZCB3b3JkcwpvYnNvbGV0ZUlkZW50aWZpZXIKICAgIDogJ2FsbCcKICAgIHwgJ0NvZGUnCiAgICB8ICdjb2RlJwogICAgfCAnQ29uY2VwdCcKICAgIHwgJ2NvbmNlcHQnCiAgICB8ICdjb250YWlucycKICAgIHwgJ2RhdGUnCiAgICB8ICdkaXNwbGF5JwogICAgfCAnZGlzdGluY3QnCiAgICB8ICdlbmQnCiAgICB8ICdleGlzdHMnCiAgICB8ICdub3QnCiAgICB8ICdzdGFydCcKICAgIHwgJ3RpbWUnCiAgICB8ICd0aW1lem9uZW9mZnNldCcKICAgIHwgJ3ZlcnNpb24nCiAgICB8ICd3aGVyZScKICAgIDsKCi8vIEZ1bmN0aW9uIGlkZW50aWZpZXJzIGFyZSBrZXl3b3JkcyB0aGF0IG1heSBiZSB1c2VkIGFzIGlkZW50aWZpZXJzIGZvciBmdW5jdGlvbnMKZnVuY3Rpb25JZGVudGlmaWVyCiAgICA6ICdhZnRlcicKICAgIHwgJ2FnZ3JlZ2F0ZScKICAgIHwgJ2FsbCcKICAgIHwgJ2FuZCcKICAgIHwgJ2FzJwogICAgfCAnYXNjJwogICAgfCAnYXNjZW5kaW5nJwogICAgfCAnYmVmb3JlJwogICAgfCAnYmV0d2VlbicKICAgIHwgJ2J5JwogICAgfCAnY2FsbGVkJwogICAgfCAnY2FzZScKICAgIHwgJ2Nhc3QnCiAgICB8ICdjb2RlJwogICAgfCAnQ29kZScKICAgIHwgJ2NvZGVzeXN0ZW0nCiAgICB8ICdjb2Rlc3lzdGVtcycKICAgIHwgJ2NvbGxhcHNlJwogICAgfCAnY29uY2VwdCcKICAgIHwgJ0NvbmNlcHQnCiAgICB8ICdjb250YWlucycKICAgIHwgJ2NvbnRleHQnCiAgICB8ICdjb252ZXJ0JwogICAgfCAnZGF0ZScKICAgIHwgJ2RheScKICAgIHwgJ2RheXMnCiAgICB8ICdkZWZhdWx0JwogICAgfCAnZGVmaW5lJwogICAgfCAnZGVzYycKICAgIHwgJ2Rlc2NlbmRpbmcnCiAgICB8ICdkaWZmZXJlbmNlJwogICAgfCAnZGlzcGxheScKICAgIHwgJ2Rpc3RpbmN0JwogICAgfCAnZGl2JwogICAgfCAnZHVyYXRpb24nCiAgICB8ICdkdXJpbmcnCiAgICB8ICdlbHNlJwogICAgfCAnZW5kJwogICAgfCAnZW5kcycKICAgIHwgJ2V4Y2VwdCcKICAgIHwgJ2V4aXN0cycKICAgIHwgJ2V4cGFuZCcKICAgIHwgJ2ZhbHNlJwogICAgfCAnZmxhdHRlbicKICAgIHwgJ2ZsdWVudCcKICAgIHwgJ2Zyb20nCiAgICB8ICdmdW5jdGlvbicKICAgIHwgJ2hvdXInCiAgICB8ICdob3VycycKICAgIHwgJ2lmJwogICAgfCAnaW1wbGllcycKICAgIHwgJ2luJwogICAgfCAnaW5jbHVkZScKICAgIHwgJ2luY2x1ZGVzJwogICAgfCAnaW5jbHVkZWQgaW4nCiAgICB8ICdpbnRlcnNlY3QnCiAgICB8ICdJbnRlcnZhbCcKICAgIHwgJ2lzJwogICAgfCAnbGV0JwogICAgfCAnbGlicmFyeScKICAgIHwgJ0xpc3QnCiAgICB8ICdtYXhpbXVtJwogICAgfCAnbWVldHMnCiAgICB8ICdtaWxsaXNlY29uZCcKICAgIHwgJ21pbGxpc2Vjb25kcycKICAgIHwgJ21pbmltdW0nCiAgICB8ICdtaW51dGUnCiAgICB8ICdtaW51dGVzJwogICAgfCAnbW9kJwogICAgfCAnbW9udGgnCiAgICB8ICdtb250aHMnCiAgICB8ICdub3QnCiAgICB8ICdudWxsJwogICAgfCAnb2NjdXJzJwogICAgfCAnb2YnCiAgICB8ICdvcicKICAgIHwgJ29yIGFmdGVyJwogICAgfCAnb3IgYmVmb3JlJwogICAgfCAnb3IgbGVzcycKICAgIHwgJ29yIG1vcmUnCiAgICB8ICdvdmVybGFwcycKICAgIHwgJ3BhcmFtZXRlcicKICAgIHwgJ3BlcicKICAgIHwgJ3BvaW50JwogICAgfCAncHJlZGVjZXNzb3InCiAgICB8ICdwcml2YXRlJwogICAgfCAncHJvcGVybHknCiAgICB8ICdwdWJsaWMnCiAgICB8ICdyZXR1cm4nCiAgICB8ICdzYW1lJwogICAgfCAnc2luZ2xldG9uJwogICAgfCAnc2Vjb25kJwogICAgfCAnc2Vjb25kcycKICAgIHwgJ3N0YXJ0JwogICAgfCAnc3RhcnRpbmcnCiAgICB8ICdzdGFydHMnCiAgICB8ICdzb3J0JwogICAgfCAnc3VjY2Vzc29yJwogICAgfCAnc3VjaCB0aGF0JwogICAgfCAndGhlbicKICAgIHwgJ3RpbWUnCiAgICB8ICd0aW1lem9uZW9mZnNldCcKICAgIHwgJ3RvJwogICAgfCAndHJ1ZScKICAgIHwgJ1R1cGxlJwogICAgfCAndW5pb24nCiAgICB8ICd1c2luZycKICAgIHwgJ3ZhbHVlc2V0JwogICAgfCAndmVyc2lvbicKICAgIHwgJ3dlZWsnCiAgICB8ICd3ZWVrcycKICAgIHwgJ3doZXJlJwogICAgfCAnd2hlbicKICAgIHwgJ3dpZHRoJwogICAgfCAnd2l0aCcKICAgIHwgJ3dpdGhpbicKICAgIHwgJ3dpdGhvdXQnCiAgICB8ICd4b3InCiAgICB8ICd5ZWFyJwogICAgfCAneWVhcnMnCiAgICA7CgovLyBSZXNlcnZlZCB3b3JkcyB0aGF0IGFyZSBhbHNvIHR5cGUgbmFtZXMKdHlwZU5hbWVJZGVudGlmaWVyCiAgICA6ICdDb2RlJwogICAgfCAnQ29uY2VwdCcKICAgIHwgJ2RhdGUnCiAgICB8ICd0aW1lJwogICAgOwoKcmVmZXJlbnRpYWxJZGVudGlmaWVyCiAgICA6IGlkZW50aWZpZXIKICAgIHwga2V5d29yZElkZW50aWZpZXIKICAgIDsKCnJlZmVyZW50aWFsT3JUeXBlTmFtZUlkZW50aWZpZXIKICAgIDogcmVmZXJlbnRpYWxJZGVudGlmaWVyCiAgICB8IHR5cGVOYW1lSWRlbnRpZmllcgogICAgOwoKaWRlbnRpZmllck9yRnVuY3Rpb25JZGVudGlmaWVyCiAgICA6IGlkZW50aWZpZXIKICAgIHwgZnVuY3Rpb25JZGVudGlmaWVyCiAgICA7CgppZGVudGlmaWVyCiAgICA6IElERU5USUZJRVIKICAgIHwgREVMSU1JVEVESURFTlRJRklFUgogICAgfCBRVU9URURJREVOVElGSUVSCiAgICA7CgpRVU9URURJREVOVElGSUVSCiAgICA6ICciJyAoRVNDIHwgLikqPyAnIicKICAgIDsKCkRBVEVUSU1FCiAgICA6ICdAJyBEQVRFRk9STUFUICdUJyBUSU1FRk9STUFUPyBUSU1FWk9ORU9GRlNFVEZPUk1BVD8KICAgIDsKCkxPTkdOVU1CRVIKICAgIDogWzAtOV0rJ0wnCiAgICA7CgpmcmFnbWVudCBFU0MKICAgIDogJ1xcJyAoW2AnIlxcL2ZucnRdIHwgVU5JQ09ERSkgICAgLy8gYWxsb3cgXGAsIFwnLCBcIiwgXFwsIFwvLCBcZiwgZXRjLiBhbmQgXHVYWFgKICAgIDsK"
}