IyEvYmluL3NoCiMgdGhlIG5leHQgbGluZSByZXN0YXJ0cyB1c2luZyB0Y2xzaCBcCmV4ZWMgdGNsc2ggIiQwIiAiJEAiCgojIG1vZF9kdGNsIHRlc3Qgc3VpdGUsIGJ5IERhdmlkIE4uIFdlbHRvbiA8ZGF2aWR3QGFwYWNoZS5vcmc+CgojIFNlZSBSRUFETUUgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiMgJElkJCAKCnBhY2thZ2UgcmVxdWlyZSB0Y2x0ZXN0CnBhY2thZ2UgcmVxdWlyZSBodHRwIDIuMQoKc2V0IHVybGJhc2UgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8iCnNldCB0ZXN0ZmlsZW5hbWUxICJkdGNsLXRlc3QyLnR0bWwiCnNldCB0ZXN0ZmlsZW5hbWUyICJkdGNsLXRlc3QudGNsIgoKCjo6dGNsdGVzdDo6dGVzdCBoZWxsby0xLjEge2hlbGxvIHdvcmxkIHRlc3R9IHsKICAgIHNldCBwYWdlIFsgOjpodHRwOjpnZXR1cmwgIiR7dXJsYmFzZX0kdGVzdGZpbGVuYW1lMSIgXQogICAgcmVnZXhwIC1saW5lIHteSGVsbG8sIFdvcmxkJH0gWyA6Omh0dHA6OmRhdGEgJHBhZ2UgXQp9IDEKCjo6dGNsdGVzdDo6dGVzdCBpMThuLTEuMSB7STE4TiB0ZXN0fSB7CiAgICBzZXQgcGFnZSBbIDo6aHR0cDo6Z2V0dXJsICIke3VybGJhc2V9JHRlc3RmaWxlbmFtZTEiIF0KICAgIHJlZ2V4cCAtbGluZSB7XqEgwCDIIMwg0iDZIC0gRWwgQnVycm8gU2FiZSBN4XMgUXVlIFT6ISR9IFsgOjpodHRwOjpkYXRhICRwYWdlIF0KfSAxCgo6OnRjbHRlc3Q6OnRlc3QgZ2V0dmFyaWFibGVzLTEuMSB7R0VUIHZhcmlhYmxlc30gewogICAgc2V0IHBhZ2UgWyA6Omh0dHA6OmdldHVybCAiJHt1cmxiYXNlfSR0ZXN0ZmlsZW5hbWUxP2Zvb2Jhcj1nb29iZXIiIF0KICAgIHJlZ2V4cCAtbGluZSB7XlZBUlNcKGZvb2JhclwpID0gZ29vYmVyJH0gWyA6Omh0dHA6OmRhdGEgJHBhZ2UgXQp9IDEKCjo6dGNsdGVzdDo6dGVzdCBnZXR2YXJpYWJsZXMtMS4yIHtHRVQgdmFyaWFibGVzICsgSTE4Tn0gewogICAgc2V0IHBhZ2UgWyA6Omh0dHA6OmdldHVybCAiJHt1cmxiYXNlfSR0ZXN0ZmlsZW5hbWUxP03hcz1U+iIgXQogICAgcmVnZXhwIC1saW5lIHteVkFSU1woTeFzXCkgPSBU+iR9IFsgOjpodHRwOjpkYXRhICRwYWdlIF0KfSAxCgo6OnRjbHRlc3Q6OnRlc3QgZ2V0dmFyaWFibGVzLTEuMyB7R0VUIHZhcmlhYmxlcyArIEkxOE4gKyBlbmNvZGluZ30gewogICAgc2V0IHBhZ2UgWyA6Omh0dHA6OmdldHVybCBbIGZvcm1hdCAiJHt1cmxiYXNlfSR0ZXN0ZmlsZW5hbWUxPyVzIiBbIDo6aHR0cDo6Zm9ybWF0UXVlcnkgTeFzIFT6IF0gXSBdCiAgICByZWdleHAgLWxpbmUge15WQVJTXChN4XNcKSA9IFT6JH0gWyA6Omh0dHA6OmRhdGEgJHBhZ2UgXQp9IDEKCjo6dGNsdGVzdDo6dGVzdCBwb3N0dmFyaWFibGVzLTEuMSB7UE9TVCB2YXJpYWJsZXN9IHsKICAgIHNldCBwYWdlIFsgOjpodHRwOjpnZXR1cmwgIiR7dXJsYmFzZX0kdGVzdGZpbGVuYW1lMSIgLXF1ZXJ5IGZvb2Jhcj1nb29iZXIgXQogICAgcmVnZXhwIC1saW5lIHteVkFSU1woZm9vYmFyXCkgPSBnb29iZXIkfSBbIDo6aHR0cDo6ZGF0YSAkcGFnZSBdCn0gMQoKOjp0Y2x0ZXN0Ojp0ZXN0IHBvc3R2YXJpYWJsZXMtMS4yIHtQT1NUIHZhcmlhYmxlcyArIEkxOE59IHsKICAgIHNldCBwYWdlIFsgOjpodHRwOjpnZXR1cmwgIiR7dXJsYmFzZX0kdGVzdGZpbGVuYW1lMSIgLXF1ZXJ5IE3hcz1U+iBdCiAgICByZWdleHAgLWxpbmUge15WQVJTXChN4XNcKSA9IFT6JH0gWyA6Omh0dHA6OmRhdGEgJHBhZ2UgXQp9IDEKCjo6dGNsdGVzdDo6dGVzdCBwb3N0dmFyaWFibGVzLTEuMyB7UE9TVCB2YXJpYWJsZXMgKyBJMThOICsgZW5jb2Rpbmd9IHsKICAgIHNldCBwYWdlIFsgOjpodHRwOjpnZXR1cmwgIiR7dXJsYmFzZX0kdGVzdGZpbGVuYW1lMSIgLXF1ZXJ5IFsgOjpodHRwOjpmb3JtYXRRdWVyeSBN4XMgVPogXSBdCiAgICByZWdleHAgLWxpbmUge15WQVJTXChN4XNcKSA9IFT6JH0gWyA6Omh0dHA6OmRhdGEgJHBhZ2UgXQp9IDEKCjo6dGNsdGVzdDo6dGVzdCBtdWx0aXZhcmlhYmxlcy0xLjEge211bHRpcGxlIHZhcmlhYmxlczogZm9vPTEmZm9vPTJ9IHsKICAgIHNldCBwYWdlIFsgOjpodHRwOjpnZXR1cmwgIiR7dXJsYmFzZX0kdGVzdGZpbGVuYW1lMT9mb29iYXI9MSZmb29iYXI9MiZmb29iYXI9Zm9vK2JhciIgXQogICAgcmVnZXhwIC1saW5lIHteVkFSU1woZm9vYmFyXCkgPSAxIDIgZm9vIGJhciR9IFsgOjpodHRwOjpkYXRhICRwYWdlIF0KfSAxCgo6OnRjbHRlc3Q6OnRlc3QgZW52LTEuMSB7RW52aXJvbm1lbnQgdmFyaWFibGV9IHsKICAgIHNldCBwYWdlIFsgOjpodHRwOjpnZXR1cmwgIiR7dXJsYmFzZX0kdGVzdGZpbGVuYW1lMSIgXQogICAgcmVnZXhwIC1saW5lICJeRU5WU1xcKERPQ1VNRU5UX05BTUVcXCkgPSAkdGVzdGZpbGVuYW1lMVwkIiBbIDo6aHR0cDo6ZGF0YSAkcGFnZSBdCn0gMQoKOjp0Y2x0ZXN0Ojp0ZXN0IGNvb2tpZXMtMS4xIHtDb29raWVzfSB7CiAgICBzZXQgcGFnZSBbIDo6aHR0cDo6Z2V0dXJsICIke3VybGJhc2V9JHRlc3RmaWxlbmFtZTEiIC1oZWFkZXJzIHtDb29raWUgImZvbz1iYXIifSBdCiAgICByZWdleHAgLWxpbmUge15DT09LSUVTXChmb29cKSA9IGJhciR9IFsgOjpodHRwOjpkYXRhICRwYWdlIF0KfSAxCgo6OnRjbHRlc3Q6OnRlc3QgY29va2llcy0xLjIge0Nvb2tpZXMgKyBJMThOfSB7CiAgICBzZXQgcGFnZSBbIDo6aHR0cDo6Z2V0dXJsICIke3VybGJhc2V9JHRlc3RmaWxlbmFtZTEiIC1oZWFkZXJzIHtDb29raWUgIk3hcz1U+iJ9IF0KICAgIHJlZ2V4cCAtbGluZSB7XkNPT0tJRVNcKE3hc1wpID0gVPokfSBbIDo6aHR0cDo6ZGF0YSAkcGFnZSBdCn0gMQoKOjp0Y2x0ZXN0Ojp0ZXN0IGNvb2tpZXMtMS4zIHtDb29raWVzICsgSTE4TiArIGVuY29kaW5nfSB7CiAgICBzZXQgcGFnZSBbIDo6aHR0cDo6Z2V0dXJsICIke3VybGJhc2V9JHRlc3RmaWxlbmFtZTEiIC1oZWFkZXJzIFsgbGlzdCBDb29raWUgWyA6Omh0dHA6OmZvcm1hdFF1ZXJ5IE3hcyBU+iBdIF0gXQogICAgcmVnZXhwIC1saW5lIHteQ09PS0lFU1woTeFzXCkgPSBU+iR9IFsgOjpodHRwOjpkYXRhICRwYWdlIF0KfSAxCgo6OnRjbHRlc3Q6OnRlc3QgY29va2llcy0xLjQge011bHRpcGxlIENvb2tpZXN9IHsKICAgIHNldCByc2x0IDAKICAgIHNldCBwYWdlIFsgOjpodHRwOjpnZXR1cmwgIiR7dXJsYmFzZX0kdGVzdGZpbGVuYW1lMSIgLWhlYWRlcnMge0Nvb2tpZSAiYm9wOyBmb289YmFyO2Rvbz13YWg7IHNob289YmUgO2Rvb29vPWJlZTtkb3Q9ZG93ICAifSBdCiAgICBzZXQgcGdkYXRhIFsgOjpodHRwOjpkYXRhICRwYWdlIF0KICAgIGluY3IgcnNsdCBbIHJlZ2V4cCAtbGluZSB7XkNPT0tJRVNcKGZvb1wpID0gYmFyJH0gJHBnZGF0YSBdCiAgICBpbmNyIHJzbHQgWyByZWdleHAgLWxpbmUge15DT09LSUVTXChkb29cKSA9IHdhaH0gJHBnZGF0YSBdCiAgICBpbmNyIHJzbHQgWyByZWdleHAgLWxpbmUge15DT09LSUVTXChzaG9vXCkgPSBiZX0gJHBnZGF0YSBdCiAgICBpbmNyIHJzbHQgWyByZWdleHAgLWxpbmUge15DT09LSUVTXChkb29vb1wpID0gYmVlfSAkcGdkYXRhIF0KICAgIGluY3IgcnNsdCBbIHJlZ2V4cCAtbGluZSB7XkNPT0tJRVNcKGRvdFwpID0gZG93JH0gJHBnZGF0YSBdCiAgICBpbmNyIHJzbHQgWyByZWdleHAgLWxpbmUge15DT09LSUVTXChib3BcKSA9IH0gJHBnZGF0YSBdCn0gNgoKOjp0Y2x0ZXN0Ojp0ZXN0IHNlcnZlcmNvb2tpZXMtMS4xIHtDb29raWVzIGZyb20gU2VydmVyfSB7CiAgICBzZXQgcnNsdCAwCiAgICBzZXQgcGFnZSBbIDo6aHR0cDo6Z2V0dXJsICIke3VybGJhc2V9JHRlc3RmaWxlbmFtZTEiIF0KICAgIHVwdmFyIDAgJHBhZ2Ugc3RhdGUKICAgIGFycmF5IHNldCBzdGF0ZWhhc2ggJHN0YXRlKG1ldGEpCiAgICByZWdleHAgLWxpbmUge21vZD1kdGNsOyBwYXRoPVteO10qOyBleHBpcmVzPTAxLTAxLTIwMDN9ICRzdGF0ZWhhc2goU2V0LUNvb2tpZSkKfSAxCgo6OnRjbHRlc3Q6OnRlc3QgdGNsZmlsZS0xLjEge1BsYWluIC50Y2wgZmlsZX0gewogICAgc2V0IHBhZ2UgWyA6Omh0dHA6OmdldHVybCAiJHt1cmxiYXNlfSR0ZXN0ZmlsZW5hbWUyIiBdCiAgICBzZXQgcGdkYXRhIFtzdHJpbmcgdHJpbSBbIDo6aHR0cDo6ZGF0YSAkcGFnZSBdIF0KfSAioSDAIMggzCDSINkgLSBFbCBCdXJybyBTYWJlIE3hcyBRdWUgVPohIgoKOjp0Y2x0ZXN0OjpjbGVhbnVwVGVzdHMK