REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 122.08 KB
Close
//opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/sql/__pycache__/selectable.cpython-37.pyc
Text
Base64
Qg0NCgAAAADDzDRdogUCAOMAAAAAAAAAAAAAAAAGAAAAQAAAAHNqAwAAZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaA2QBZANsA20EWgQBAGQBZARsBW0GWgYBAGQFZAZsB20IWggBAGQFZAdsB20JWgkBAGQFZAhsCm0LWgsBAGQFZAlsDG0NWg0BAGQFZApsDG0OWg4BAGQFZAtsDG0PWg8BAGQFZAxsDG0QWhABAGQFZA1sDG0RWhEBAGQFZA5sDG0SWhIBAGQFZA9sDG0TWhMBAGQFZBBsFG0VWhUBAGQFZBFsFG0WWhYBAGQFZBJsFG0XWhcBAGQFZBNsFG0YWhgBAGQFZBRsFG0ZWhkBAGQFZBVsFG0aWhoBAGQFZBZsFG0bWhsBAGQFZBdsFG0cWhwBAGQFZBhsFG0dWh0BAGQFZBlsFG0eWh4BAGQFZBpsFG0fWh8BAGQFZBtsFG0gWiABAGQFZBxsFG0hWiEBAGQFZB1sFG0iWiIBAGQFZB5sFG0jWiMBAGQFZB9sFG0kWiQBAGQFZCBsFG0lWiUBAGQFZCFsFG0mWiYBAGQFZCJsFG0nWicBAGQFZCNsFG0oWigBAGQFZCRsFG0pWikBAGQlZCZsB20qWioBAGQlZCdsB20rWisBAGQlZChsB20sWiwBAGQpZCqEAFotZCtkLIQAWi5HAGQtZC6EAGQuZSODA1ovZF9kL2QwhAFaMGQxZDKEAFoxZDNkNIQAWjJHAGQ1ZDaEAGQ2ZSSDA1ozRwBkN2Q4hABkOGU0gwNaNUcAZDlkOoQAZDplNIMDWjZHAGQ7ZDyEAGQ8ZTODA1o3RwBkPWQ+hABkPmU3gwNaOEcAZD9kQIQAZEBlN4MDWjlHAGRBZEKEAGRCZTmDA1o6RwBkQ2REhABkRGU5gwNaO0cAZEVkRoQAZEZlEmU2ZTmDBVo8RwBkR2RIhABkSGU0gwNaPUcAZElkSoQAZEplN4MDWj5HAGRLZEyEAGRMZRNlN4MEWj9HAGRNZE6EAGROZSSDA1pARwBkT2RQhABkUGU9ZRFlN4MFWkFHAGRRZFKEAGRSZUGDA1pCRwBkU2RUhABkVGVCgwNaQ0cAZFVkVoQAZFZlNWU2ZUKDBVpERwBkV2RYhABkWGUSZSaDBFpFRwBkWWRahABkWmUpgwNaRkcAZFtkXIQAZFxlQYMDWkdHAGRdZF6EAGReZQuDA1pIZAJTAClgemlUaGUgOmNsYXNzOmAuRnJvbUNsYXVzZWAgY2xhc3Mgb2YgU1FMIGV4cHJlc3Npb24gZWxlbWVudHMsIHJlcHJlc2VudGluZwpTUUwgdGFibGVzIGFuZCBkZXJpdmVkIHJvd3NldHMuCgrpAAAAAE4pAdoKYXR0cmdldHRlcikB2glWaXNpdGFibGXpAQAAACkB2glvcGVyYXRvcnMpAdoIdHlwZV9hcGkpAdoJQW5ub3RhdGVkKQHaDV9mcm9tX29iamVjdHMpAdoLX2dlbmVyYXRpdmUpAdoQQ29sdW1uQ29sbGVjdGlvbikB2glDb2x1bW5TZXQpAdoKRXhlY3V0YWJsZSkB2gpHZW5lcmF0aXZlKQHaCUltbXV0YWJsZSkB2hBfYW5vbnltb3VzX2xhYmVsKQHaF19jbGF1c2VfZWxlbWVudF9hc19leHByKQHaBl9jbG9uZSkB2hJfY2xvbmVkX2RpZmZlcmVuY2UpAdoUX2Nsb25lZF9pbnRlcnNlY3Rpb24pAdoXX2RvY3VtZW50X3RleHRfY29lcmNpb24pAdoOX2V4cGFuZF9jbG9uZWQpAdocX2ludGVycHJldF9hc19jb2x1bW5fb3JfZnJvbSkB2iZfbGl0ZXJhbF9hbmRfbGFiZWxzX2FzX2xhYmVsX3JlZmVyZW5jZSkB2htfbGl0ZXJhbF9hc19sYWJlbF9yZWZlcmVuY2UpAdoQX2xpdGVyYWxfYXNfdGV4dCkB2hFfbm9fdGV4dF9jb2VyY2lvbikB2hFfc2VsZWN0X2l0ZXJhYmxlcykB2gRhbmRfKQHaDUJpbmRQYXJhbWV0ZXIpAdoNQ2xhdXNlRWxlbWVudCkB2gpDbGF1c2VMaXN0KQHaCEdyb3VwaW5nKQHaDmxpdGVyYWxfY29sdW1uKQHaBVRydWVfKQHaD1VuYXJ5RXhwcmVzc2lvbukCAAAAKQHaA2V4YykB2gppbnNwZWN0aW9uKQHaBHV0aWxjAQAAAAAAAAACAAAACAAAAEMAAABzVAAAAHQAagF8AGQBZAKNAn0BfAFkAGsIcip0AnwAdANqBIMCcip0BXwAgwEBAHkGfAFqBlMABAB0B2sKck4BAAEAAQB0CKAJZAOhAYIBWQBuAlgAZABTACkETkYpAVoIcmFpc2VlcnJ6GEZST00gZXhwcmVzc2lvbiBleHBlY3RlZCkKciYAAADaB2luc3BlY3TaCmlzaW5zdGFuY2VyJwAAANoMc3RyaW5nX3R5cGVzchoAAADaCnNlbGVjdGFibGXaDkF0dHJpYnV0ZUVycm9yciUAAADaDUFyZ3VtZW50RXJyb3IpAtoHZWxlbWVudFoEaW5zcKkAci8AAAD6TC9vcHQvYWx0L3B5dGhvbjM3L2xpYjY0L3B5dGhvbjMuNy9zaXRlLXBhY2thZ2VzL3NxbGFsY2hlbXkvc3FsL3NlbGVjdGFibGUucHnaEl9pbnRlcnByZXRfYXNfZnJvbTcAAABzEAAAAAABDgEIAQwBCAECAQYBDgFyMQAAAGMBAAAAAAAAAAEAAAADAAAAQwAAAHMuAAAAdAB8AIMBfQB0AXwAdAKDAnIYfABqA30AdAF8AHQEgwJzKnwAoAWhAH0AfABTACkBTikGcjEAAAByKQAAANoFQWxpYXPaCG9yaWdpbmFs2gpTZWxlY3RCYXNl2gZzZWxlY3QpAXIuAAAAci8AAAByLwAAAHIwAAAA2hRfaW50ZXJwcmV0X2FzX3NlbGVjdEIAAABzDAAAAAABCAEKAQYBCgEIAXI2AAAAYwAAAAAAAAAAAAAAAAMAAABAAAAAcxgAAABlAFoBZABaAmUDZAFkAoQAgwFaBGQDUwApBNoRX09mZnNldExpbWl0UGFyYW1jAQAAAAAAAAABAAAAAQAAAEMAAABzBgAAAHwAagBTACkBTikBWg9lZmZlY3RpdmVfdmFsdWUpAdoEc2VsZnIvAAAAci8AAAByMAAAANoTX2xpbWl0X29mZnNldF92YWx1ZUwAAABzAgAAAAACeiVfT2Zmc2V0TGltaXRQYXJhbS5fbGltaXRfb2Zmc2V0X3ZhbHVlTikF2ghfX25hbWVfX9oKX19tb2R1bGVfX9oMX19xdWFsbmFtZV9f2ghwcm9wZXJ0eXI5AAAAci8AAAByLwAAAHIvAAAAcjAAAAByNwAAAEsAAABzAgAAAAgBcjcAAABjAwAAAAAAAAAEAAAABgAAAEMAAABzSgAAAHwAZAFrCHIMZAFTAHQAfABkAoMCch58AKABoQBTAHQCfAB0A4MCcix8AFMAdASgBXwAoQF9A3QGfAF8A3wCZANkBI0EUwBkAVMAKQV6vUNvbnZlcnQgdGhlIGdpdmVuIHZhbHVlIHRvIGFuICJvZmZzZXQgb3IgbGltaXQiIGNsYXVzZS4KCiAgICBUaGlzIGhhbmRsZXMgaW5jb21pbmcgaW50ZWdlcnMgYW5kIGNvbnZlcnRzIHRvIGFuIGV4cHJlc3Npb247IGlmCiAgICBhbiBleHByZXNzaW9uIGlzIGFscmVhZHkgZ2l2ZW4sIGl0IGlzIHBhc3NlZCB0aHJvdWdoLgoKICAgIE7aEl9fY2xhdXNlX2VsZW1lbnRfX1QpAtoFdHlwZV/aBnVuaXF1ZSkH2gdoYXNhdHRycj4AAAByKQAAAHIDAAAAcicAAADaBWFzaW50cjcAAAApBHIuAAAA2gRuYW1lcj8AAADaBXZhbHVlci8AAAByLwAAAHIwAAAA2hdfb2Zmc2V0X29yX2xpbWl0X2NsYXVzZVEAAABzEAAAAAAHCAEEAQoBCAEKAQQCCgFyRQAAAGMCAAAAAAAAAAMAAAAIAAAAQwAAAHNIAAAAfABkAWsIcgxkAVMAeQp8AGoAfQJXAG4iBAB0AWsKcjgBAAEAAQB0AqADZAJ8ARYAoQGCAVkAbgxYAHQEoAV8AqEBUwBkAVMAKQN60ENvbnZlcnQgdGhlICJvZmZzZXQgb3IgbGltaXQiIGNsYXVzZSBvZiBhIHNlbGVjdCBjb25zdHJ1Y3QgdG8gYW4KICAgIGludGVnZXIuCgogICAgVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSB2YWx1ZSBpcyBzdG9yZWQgYXMgYSBzaW1wbGUgYm91bmQgcGFyYW1ldGVyLgogICAgT3RoZXJ3aXNlLCBhIGNvbXBpbGF0aW9uIGVycm9yIGlzIHJhaXNlZC4KCiAgICBOekBUaGlzIFNFTEVDVCBzdHJ1Y3R1cmUgZG9lcyBub3QgdXNlIGEgc2ltcGxlIGludGVnZXIgdmFsdWUgZm9yICVzKQZyOQAAAHIsAAAAciUAAADaDENvbXBpbGVFcnJvcnInAAAAckIAAAApA9oGY2xhdXNl2ghhdHRybmFtZXJEAAAAci8AAAByLwAAAHIwAAAA2h1fb2Zmc2V0X29yX2xpbWl0X2NsYXVzZV9hc2ludGMAAABzEgAAAAAICAEEAQIBCgEOAQQBAgEOA3JJAAAAYwEAAAAAAAAAAwAAAAMAAABPAAAAcxAAAAB0AHwBfAKOAaABfAChAVMAKQF6zFJldHVybiBhbiA6Y2xhc3M6YC5BbGlhc2Agb2JqZWN0IGRlcml2ZWQKICAgIGZyb20gYSA6Y2xhc3M6YC5TZWxlY3RgLgoKICAgIG5hbWUKICAgICAgYWxpYXMgbmFtZQoKICAgIFwqYXJncywgXCoqa3dhcmdzCgogICAgICBhbGwgb3RoZXIgYXJndW1lbnRzIGFyZSBkZWxpdmVyZWQgdG8gdGhlCiAgICAgIDpmdW5jOmBzZWxlY3RgIGZ1bmN0aW9uLgoKICAgICkC2gZTZWxlY3TaBWFsaWFzKQNySwAAANoEYXJnc9oGa3dhcmdzci8AAAByLwAAAHIwAAAA2ghzdWJxdWVyeXgAAABzAgAAAAANck4AAABjAAAAAAAAAAAAAAAAAwAAAEAAAABzJAAAAGUAWgFkAFoCZAFaA2QCWgRkA1oFZQZkBGQFhACDAVoHZAZTACkH2gpTZWxlY3RhYmxleiBtYXJrIGEgY2xhc3MgYXMgYmVpbmcgc2VsZWN0YWJsZXIrAAAAVGMBAAAAAAAAAAEAAAABAAAAQwAAAHMEAAAAfABTACkBTnIvAAAAKQFyOAAAAHIvAAAAci8AAAByMAAAAHIrAAAAjwAAAHMCAAAAAAJ6FVNlbGVjdGFibGUuc2VsZWN0YWJsZU4pCHI6AAAAcjsAAAByPAAAANoHX19kb2NfX9oOX192aXNpdF9uYW1lX19aDWlzX3NlbGVjdGFibGVyPQAAAHIrAAAAci8AAAByLwAAAHIvAAAAcjAAAAByTwAAAIgAAABzCAAAAAgBBAIEAgQCck8AAABjAAAAAAAAAAAAAAAABQAAAEAAAABzMgAAAGUAWgFkAFoCZAFaA2UEZQVkAmQDZASDA2QFZAaEAIMBgwFaBmQKZAhkCYQBWgdkB1MAKQvaC0hhc1ByZWZpeGVzci8AAADaBGV4cHJ6IDptZXRoOmAuSGFzUHJlZml4ZXMucHJlZml4X3dpdGhgeio6cGFyYW1yZWY6YC5IYXNQcmVmaXhlcy5wcmVmaXhfd2l0aC4qZXhwcmBjAQAAAAAAAAAEAAAABgAAAE8AAABzNAAAAHwCoABkAWQCoQJ9A3wCciR0AaACZANkBKADfAKhARYAoQGCAXwAoAR8AXwDoQIBAGQCUwApBWGQAwAAQWRkIG9uZSBvciBtb3JlIGV4cHJlc3Npb25zIGZvbGxvd2luZyB0aGUgc3RhdGVtZW50IGtleXdvcmQsIGkuZS4KICAgICAgICBTRUxFQ1QsIElOU0VSVCwgVVBEQVRFLCBvciBERUxFVEUuIEdlbmVyYXRpdmUuCgogICAgICAgIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IGJhY2tlbmQtc3BlY2lmaWMgcHJlZml4IGtleXdvcmRzIHN1Y2ggYXMgdGhvc2UKICAgICAgICBwcm92aWRlZCBieSBNeVNRTC4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBzdG10ID0gdGFibGUuaW5zZXJ0KCkucHJlZml4X3dpdGgoIkxPV19QUklPUklUWSIsIGRpYWxlY3Q9Im15c3FsIikKCiAgICAgICAgICAgICMgTXlTUUwgNS43IG9wdGltaXplciBoaW50cwogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFt0YWJsZV0pLnByZWZpeF93aXRoKAogICAgICAgICAgICAgICAgIi8qKyBCS0EodDEpICovIiwgZGlhbGVjdD0ibXlzcWwiKQoKICAgICAgICBNdWx0aXBsZSBwcmVmaXhlcyBjYW4gYmUgc3BlY2lmaWVkIGJ5IG11bHRpcGxlIGNhbGxzCiAgICAgICAgdG8gOm1ldGg6YC5wcmVmaXhfd2l0aGAuCgogICAgICAgIDpwYXJhbSBcKmV4cHI6IHRleHR1YWwgb3IgOmNsYXNzOmAuQ2xhdXNlRWxlbWVudGAgY29uc3RydWN0IHdoaWNoCiAgICAgICAgIHdpbGwgYmUgcmVuZGVyZWQgZm9sbG93aW5nIHRoZSBJTlNFUlQsIFVQREFURSwgb3IgREVMRVRFCiAgICAgICAgIGtleXdvcmQuCiAgICAgICAgOnBhcmFtIFwqKmt3OiBBIHNpbmdsZSBrZXl3b3JkICdkaWFsZWN0JyBpcyBhY2NlcHRlZC4gIFRoaXMgaXMgYW4KICAgICAgICAgb3B0aW9uYWwgc3RyaW5nIGRpYWxlY3QgbmFtZSB3aGljaCB3aWxsCiAgICAgICAgIGxpbWl0IHJlbmRlcmluZyBvZiB0aGlzIHByZWZpeCB0byBvbmx5IHRoYXQgZGlhbGVjdC4KCiAgICAgICAg2gdkaWFsZWN0TnobVW5zdXBwb3J0ZWQgYXJndW1lbnQocyk6ICVz+gEsKQXaA3BvcHIlAAAAci0AAADaBGpvaW7aD19zZXR1cF9wcmVmaXhlcykEcjgAAAByUwAAANoCa3dyVAAAAHIvAAAAci8AAAByMAAAANoLcHJlZml4X3dpdGiXAAAAcwoAAAAAIAwBBAEEARACehdIYXNQcmVmaXhlcy5wcmVmaXhfd2l0aE5jAwAAAAAAAAADAAAABQAAAAMAAABzIgAAAHwAagB0AYcAZgFkAWQChAh8AUQAgwGDARcAfABfAGQAUwApA05jAQAAAAAAAAACAAAABgAAABMAAABzHAAAAGcAfABdFH0BdAB8AWQAZAGNAogAZgKRAnEEUwApAlQpAdoWYWxsb3dfY29lcmNpb25fdG9fdGV4dCkBchkAAAApAtoCLjDaAXApAXJUAAAAci8AAAByMAAAAPoKPGxpc3Rjb21wPsEAAABzAgAAAAYBei9IYXNQcmVmaXhlcy5fc2V0dXBfcHJlZml4ZXMuPGxvY2Fscz4uPGxpc3Rjb21wPikC2glfcHJlZml4ZXPaBXR1cGxlKQNyOAAAANoIcHJlZml4ZXNyVAAAAHIvAAAAKQFyVAAAAHIwAAAAclgAAAC+AAAAcwYAAAAAAQYCCgF6G0hhc1ByZWZpeGVzLl9zZXR1cF9wcmVmaXhlcykBTikIcjoAAAByOwAAAHI8AAAAcl8AAAByCQAAAHIUAAAAcloAAAByWAAAAHIvAAAAci8AAAByLwAAAHIwAAAAclIAAACUAAAAcw4AAAAIAQQCAgECAQIBAgEQI3JSAAAAYwAAAAAAAAAAAAAAAAUAAABAAAAAczIAAABlAFoBZABaAmQBWgNlBGUFZAJkA2QEgwNkBWQGhACDAYMBWgZkCmQIZAmEAVoHZAdTACkL2gtIYXNTdWZmaXhlc3IvAAAAclMAAAB6IDptZXRoOmAuSGFzU3VmZml4ZXMuc3VmZml4X3dpdGhgeio6cGFyYW1yZWY6YC5IYXNTdWZmaXhlcy5zdWZmaXhfd2l0aC4qZXhwcmBjAQAAAAAAAAAEAAAABgAAAE8AAABzNAAAAHwCoABkAWQCoQJ9A3wCciR0AaACZANkBKADfAKhARYAoQGCAXwAoAR8AXwDoQIBAGQCUwApBWHcAgAAQWRkIG9uZSBvciBtb3JlIGV4cHJlc3Npb25zIGZvbGxvd2luZyB0aGUgc3RhdGVtZW50IGFzIGEgd2hvbGUuCgogICAgICAgIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IGJhY2tlbmQtc3BlY2lmaWMgc3VmZml4IGtleXdvcmRzIG9uCiAgICAgICAgY2VydGFpbiBjb25zdHJ1Y3RzLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW2NvbDEsIGNvbDJdKS5jdGUoKS5zdWZmaXhfd2l0aCgKICAgICAgICAgICAgICAgICJjeWNsZSBlbXBubyBzZXQgeV9jeWNsZSB0byAxIGRlZmF1bHQgMCIsIGRpYWxlY3Q9Im9yYWNsZSIpCgogICAgICAgIE11bHRpcGxlIHN1ZmZpeGVzIGNhbiBiZSBzcGVjaWZpZWQgYnkgbXVsdGlwbGUgY2FsbHMKICAgICAgICB0byA6bWV0aDpgLnN1ZmZpeF93aXRoYC4KCiAgICAgICAgOnBhcmFtIFwqZXhwcjogdGV4dHVhbCBvciA6Y2xhc3M6YC5DbGF1c2VFbGVtZW50YCBjb25zdHJ1Y3Qgd2hpY2gKICAgICAgICAgd2lsbCBiZSByZW5kZXJlZCBmb2xsb3dpbmcgdGhlIHRhcmdldCBjbGF1c2UuCiAgICAgICAgOnBhcmFtIFwqKmt3OiBBIHNpbmdsZSBrZXl3b3JkICdkaWFsZWN0JyBpcyBhY2NlcHRlZC4gIFRoaXMgaXMgYW4KICAgICAgICAgb3B0aW9uYWwgc3RyaW5nIGRpYWxlY3QgbmFtZSB3aGljaCB3aWxsCiAgICAgICAgIGxpbWl0IHJlbmRlcmluZyBvZiB0aGlzIHN1ZmZpeCB0byBvbmx5IHRoYXQgZGlhbGVjdC4KCiAgICAgICAgclQAAABOehtVbnN1cHBvcnRlZCBhcmd1bWVudChzKTogJXNyVQAAACkFclYAAAByJQAAAHItAAAAclcAAADaD19zZXR1cF9zdWZmaXhlcykEcjgAAAByUwAAAHJZAAAAclQAAAByLwAAAHIvAAAAcjAAAADaC3N1ZmZpeF93aXRoygAAAHMKAAAAABsMAQQBBAEQAnoXSGFzU3VmZml4ZXMuc3VmZml4X3dpdGhOYwMAAAAAAAAAAwAAAAUAAAADAAAAcyIAAAB8AGoAdAGHAGYBZAFkAoQIfAFEAIMBgwEXAHwAXwBkAFMAKQNOYwEAAAAAAAAAAgAAAAYAAAATAAAAcxwAAABnAHwAXRR9AXQAfAFkAGQBjQKIAGYCkQJxBFMAKQJUKQFyWwAAACkBchkAAAApAnJcAAAAcl0AAAApAXJUAAAAci8AAAByMAAAAHJeAAAA7wAAAHMCAAAABgF6L0hhc1N1ZmZpeGVzLl9zZXR1cF9zdWZmaXhlcy48bG9jYWxzPi48bGlzdGNvbXA+KQLaCV9zdWZmaXhlc3JgAAAAKQNyOAAAANoIc3VmZml4ZXNyVAAAAHIvAAAAKQFyVAAAAHIwAAAAcmMAAADsAAAAcwYAAAAAAQYCCgF6G0hhc1N1ZmZpeGVzLl9zZXR1cF9zdWZmaXhlcykBTikIcjoAAAByOwAAAHI8AAAAcmUAAAByCQAAAHIUAAAAcmQAAAByYwAAAHIvAAAAci8AAAByLwAAAHIwAAAAcmIAAADHAAAAcw4AAAAIAQQCAgECAQIBAgEQHnJiAAAAYwAAAAAAAAAAAAAAAAUAAABAAAAAc1IBAABlAFoBZABaAmQBWgNkAloEZANaBWcAWgZkA1oHZANaCGQDWglkA1oKZANaC2QEWgxkBWQGhABaDWUOoA9kB2cBoQFaEGUOahFkCGQJZAqNAmUOoBJkC6EBZDpkDGQNhAGDAYMBWhNkO2QOZA+EAVoUZDxkEGQRhAFaFWQ9ZBJkE4QBWhZkPmQUZBWEAVoXZD9kFmQXhAFaGGRAZBhkGYQBWhlkGmQbhABaGmQcZB2EAFobZQ6gEmQeoQFkH2QghACDAVocZCFkIoQAWh1kQWQjZCSEAVoeZR9kJWQmhACDAVogZCdkKIQAWiFlEGQpZCqEAIMBWiJlEGQrZCyEAIMBWiNlEGQtZC6EAIMBWiRlH2UlZC+DAWQwZDGNAlomZR9lJWQvgwGDAVonZDJkM4QAWihlH2Q0ZDWEAIMBWilkNmQ3hABaKmQ4ZDmEAForZARTAClC2gpGcm9tQ2xhdXNlYdoCAABSZXByZXNlbnQgYW4gZWxlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHdpdGhpbiB0aGUgYGBGUk9NYGAKICAgIGNsYXVzZSBvZiBhIGBgU0VMRUNUYGAgc3RhdGVtZW50LgoKICAgIFRoZSBtb3N0IGNvbW1vbiBmb3JtcyBvZiA6Y2xhc3M6YC5Gcm9tQ2xhdXNlYCBhcmUgdGhlCiAgICA6Y2xhc3M6YC5UYWJsZWAgYW5kIHRoZSA6ZnVuYzpgLnNlbGVjdGAgY29uc3RydWN0cy4gIEtleQogICAgZmVhdHVyZXMgY29tbW9uIHRvIGFsbCA6Y2xhc3M6YC5Gcm9tQ2xhdXNlYCBvYmplY3RzIGluY2x1ZGU6CgogICAgKiBhIDphdHRyOmAuY2AgY29sbGVjdGlvbiwgd2hpY2ggcHJvdmlkZXMgcGVyLW5hbWUgYWNjZXNzIHRvIGEgY29sbGVjdGlvbgogICAgICBvZiA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YCBvYmplY3RzLgogICAgKiBhIDphdHRyOmAucHJpbWFyeV9rZXlgIGF0dHJpYnV0ZSwgd2hpY2ggaXMgYSBjb2xsZWN0aW9uIG9mIGFsbCB0aG9zZQogICAgICA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YCBvYmplY3RzIHRoYXQgaW5kaWNhdGUgdGhlIGBgcHJpbWFyeV9rZXlgYCBmbGFnLgogICAgKiBNZXRob2RzIHRvIGdlbmVyYXRlIHZhcmlvdXMgZGVyaXZhdGlvbnMgb2YgYSAiZnJvbSIgY2xhdXNlLCBpbmNsdWRpbmcKICAgICAgOm1ldGg6YC5Gcm9tQ2xhdXNlLmFsaWFzYCwgOm1ldGg6YC5Gcm9tQ2xhdXNlLmpvaW5gLAogICAgICA6bWV0aDpgLkZyb21DbGF1c2Uuc2VsZWN0YC4KCgogICAg2gpmcm9tY2xhdXNlRk5jAwAAAAAAAAADAAAAAQAAAEMAAABzBAAAAHwBUwApAU5yLwAAACkDcjgAAABaEGVmZmVjdGl2ZV9zY2hlbWFaBG1hcF9yLwAAAHIvAAAAcjAAAADaEV90cmFuc2xhdGVfc2NoZW1hHwEAAHMCAAAAAAF6HEZyb21DbGF1c2UuX3RyYW5zbGF0ZV9zY2hlbWHaCF9jb2x1bW5zegMxLjF6vFRoZSA6bWV0aDpgLkZyb21DbGF1c2UuY291bnRgIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuICAgUGxlYXNlIHVzZSB0aGUgOmNsYXNzOmAuZnVuY3Rpb25zLmNvdW50YCBmdW5jdGlvbiBhdmFpbGFibGUgZnJvbSB0aGUgOmF0dHI6YC5mdW5jYCBuYW1lc3BhY2UuKQHaB21lc3NhZ2V6GHNxbGFsY2hlbXkuc3FsLmZ1bmN0aW9uc2MDAAAAAAAAAAUAAAAEAAAASwAAAHNMAAAAfABqAHIWdAF8AGoAgwFkARkAfQRuDnQBfABqAoMBZAEZAH0EdAN8AWoEoAV8BKEBoAZkAqEBZwF8AmYCZAN8AGcBaQF8A5cCjgFTACkEepFyZXR1cm4gYSBTRUxFQ1QgQ09VTlQgZ2VuZXJhdGVkIGFnYWluc3QgdGhpcwogICAgICAgIDpjbGFzczpgLkZyb21DbGF1c2VgLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpjbGFzczpgLmZ1bmN0aW9ucy5jb3VudGAKCiAgICAgICAgcgEAAABaDXRibF9yb3dfY291bnTaCGZyb21fb2JqKQfaC3ByaW1hcnlfa2V52gRsaXN02gdjb2x1bW5zckoAAADaBGZ1bmPaBWNvdW502gVsYWJlbCkFcjgAAADaCWZ1bmN0aW9uc9oLd2hlcmVjbGF1c2XaBnBhcmFtc9oDY29sci8AAAByLwAAAHIwAAAAcnEAAAAkAQAAcxAAAAAAEgYBEAIOAQIBEgEGAQYBehBGcm9tQ2xhdXNlLmNvdW50YwIAAAAAAAAAAwAAAAMAAABLAAAAcxAAAAB0AHwAZwF8AWYCfAKOAVMAKQF6yHJldHVybiBhIFNFTEVDVCBvZiB0aGlzIDpjbGFzczpgLkZyb21DbGF1c2VgLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpmdW5jOmB+LnNxbC5leHByZXNzaW9uLnNlbGVjdGAgLSBnZW5lcmFsIHB1cnBvc2UKICAgICAgICAgICAgbWV0aG9kIHdoaWNoIGFsbG93cyBmb3IgYXJiaXRyYXJ5IGNvbHVtbiBsaXN0cy4KCiAgICAgICAgKQFySgAAACkDcjgAAABydAAAAHJ1AAAAci8AAAByLwAAAHIwAAAAcjUAAABBAQAAcwIAAAAACnoRRnJvbUNsYXVzZS5zZWxlY3RjBQAAAAAAAAAFAAAABgAAAEMAAABzEAAAAHQAfAB8AXwCfAN8BIMFUwApAWEgBQAAUmV0dXJuIGEgOmNsYXNzOmAuSm9pbmAgZnJvbSB0aGlzIDpjbGFzczpgLkZyb21DbGF1c2VgCiAgICAgICAgdG8gYW5vdGhlciA6Y2xhc3M6YEZyb21DbGF1c2VgLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgam9pbgoKICAgICAgICAgICAgaiA9IHVzZXJfdGFibGUuam9pbihhZGRyZXNzX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl90YWJsZS5jLmlkID09IGFkZHJlc3NfdGFibGUuYy51c2VyX2lkKQogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFt1c2VyX3RhYmxlXSkuc2VsZWN0X2Zyb20oaikKCiAgICAgICAgd291bGQgZW1pdCBTUUwgYWxvbmcgdGhlIGxpbmVzIG9mOjoKCiAgICAgICAgICAgIFNFTEVDVCB1c2VyLmlkLCB1c2VyLm5hbWUgRlJPTSB1c2VyCiAgICAgICAgICAgIEpPSU4gYWRkcmVzcyBPTiB1c2VyLmlkID0gYWRkcmVzcy51c2VyX2lkCgogICAgICAgIDpwYXJhbSByaWdodDogdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGpvaW47IHRoaXMgaXMgYW55CiAgICAgICAgIDpjbGFzczpgLkZyb21DbGF1c2VgIG9iamVjdCBzdWNoIGFzIGEgOmNsYXNzOmAuVGFibGVgIG9iamVjdCwgYW5kCiAgICAgICAgIG1heSBhbHNvIGJlIGEgc2VsZWN0YWJsZS1jb21wYXRpYmxlIG9iamVjdCBzdWNoIGFzIGFuIE9STS1tYXBwZWQKICAgICAgICAgY2xhc3MuCgogICAgICAgIDpwYXJhbSBvbmNsYXVzZTogYSBTUUwgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIE9OIGNsYXVzZSBvZiB0aGUKICAgICAgICAgam9pbi4gIElmIGxlZnQgYXQgYGBOb25lYGAsIDptZXRoOmAuRnJvbUNsYXVzZS5qb2luYCB3aWxsIGF0dGVtcHQgdG8KICAgICAgICAgam9pbiB0aGUgdHdvIHRhYmxlcyBiYXNlZCBvbiBhIGZvcmVpZ24ga2V5IHJlbGF0aW9uc2hpcC4KCiAgICAgICAgOnBhcmFtIGlzb3V0ZXI6IGlmIFRydWUsIHJlbmRlciBhIExFRlQgT1VURVIgSk9JTiwgaW5zdGVhZCBvZiBKT0lOLgoKICAgICAgICA6cGFyYW0gZnVsbDogaWYgVHJ1ZSwgcmVuZGVyIGEgRlVMTCBPVVRFUiBKT0lOLCBpbnN0ZWFkIG9mIExFRlQgT1VURVIKICAgICAgICAgSk9JTi4gIEltcGxpZXMgOnBhcmFtcmVmOmAuRnJvbUNsYXVzZS5qb2luLmlzb3V0ZXJgLgoKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOmZ1bmM6YC5qb2luYCAtIHN0YW5kYWxvbmUgZnVuY3Rpb24KCiAgICAgICAgICAgIDpjbGFzczpgLkpvaW5gIC0gdGhlIHR5cGUgb2Ygb2JqZWN0IHByb2R1Y2VkCgogICAgICAgICkB2gRKb2luKQVyOAAAANoFcmlnaHTaCG9uY2xhdXNl2gdpc291dGVy2gRmdWxsci8AAAByLwAAAHIwAAAAclcAAABNAQAAcwIAAAAAKXoPRnJvbUNsYXVzZS5qb2luYwQAAAAAAAAABAAAAAYAAABDAAAAcxAAAAB0AHwAfAF8AmQBfAODBVMAKQJhqAQAAFJldHVybiBhIDpjbGFzczpgLkpvaW5gIGZyb20gdGhpcyA6Y2xhc3M6YC5Gcm9tQ2xhdXNlYAogICAgICAgIHRvIGFub3RoZXIgOmNsYXNzOmBGcm9tQ2xhdXNlYCwgd2l0aCB0aGUgImlzb3V0ZXIiIGZsYWcgc2V0IHRvCiAgICAgICAgVHJ1ZS4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IG91dGVyam9pbgoKICAgICAgICAgICAgaiA9IHVzZXJfdGFibGUub3V0ZXJqb2luKGFkZHJlc3NfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3RhYmxlLmMuaWQgPT0gYWRkcmVzc190YWJsZS5jLnVzZXJfaWQpCgogICAgICAgIFRoZSBhYm92ZSBpcyBlcXVpdmFsZW50IHRvOjoKCiAgICAgICAgICAgIGogPSB1c2VyX3RhYmxlLmpvaW4oCiAgICAgICAgICAgICAgICBhZGRyZXNzX3RhYmxlLAogICAgICAgICAgICAgICAgdXNlcl90YWJsZS5jLmlkID09IGFkZHJlc3NfdGFibGUuYy51c2VyX2lkLAogICAgICAgICAgICAgICAgaXNvdXRlcj1UcnVlKQoKICAgICAgICA6cGFyYW0gcmlnaHQ6IHRoZSByaWdodCBzaWRlIG9mIHRoZSBqb2luOyB0aGlzIGlzIGFueQogICAgICAgICA6Y2xhc3M6YC5Gcm9tQ2xhdXNlYCBvYmplY3Qgc3VjaCBhcyBhIDpjbGFzczpgLlRhYmxlYCBvYmplY3QsIGFuZAogICAgICAgICBtYXkgYWxzbyBiZSBhIHNlbGVjdGFibGUtY29tcGF0aWJsZSBvYmplY3Qgc3VjaCBhcyBhbiBPUk0tbWFwcGVkCiAgICAgICAgIGNsYXNzLgoKICAgICAgICA6cGFyYW0gb25jbGF1c2U6IGEgU1FMIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBPTiBjbGF1c2Ugb2YgdGhlCiAgICAgICAgIGpvaW4uICBJZiBsZWZ0IGF0IGBgTm9uZWBgLCA6bWV0aDpgLkZyb21DbGF1c2Uuam9pbmAgd2lsbCBhdHRlbXB0IHRvCiAgICAgICAgIGpvaW4gdGhlIHR3byB0YWJsZXMgYmFzZWQgb24gYSBmb3JlaWduIGtleSByZWxhdGlvbnNoaXAuCgogICAgICAgIDpwYXJhbSBmdWxsOiBpZiBUcnVlLCByZW5kZXIgYSBGVUxMIE9VVEVSIEpPSU4sIGluc3RlYWQgb2YKICAgICAgICAgTEVGVCBPVVRFUiBKT0lOLgoKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5Gcm9tQ2xhdXNlLmpvaW5gCgogICAgICAgICAgICA6Y2xhc3M6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bHVtbiBhZGRlZCB0byB0aGUgLmMgY29sbGVjdGlvbiBvZiBhbiB1bmRlcmx5aW5nCiAgICAgICAgc2VsZWN0YWJsZSwgcHJvZHVjZSB0aGUgbG9jYWwgdmVyc2lvbiBvZiB0aGF0IGNvbHVtbiwgYXNzdW1pbmcgdGhpcwogICAgICAgIHNlbGVjdGFibGUgdWx0aW1hdGVseSBzaG91bGQgcHJveHkgdGhpcyBjb2x1bW4uCgogICAgICAgIHRoaXMgaXMgdXNlZCB0byAicGluZyIgYSBkZXJpdmVkIHNlbGVjdGFibGUgdG8gYWRkIGEgbmV3IGNvbHVtbgogICAgICAgIHRvIGl0cyAuYy4gY29sbGVjdGlvbiB3aGVuIGEgQ29sdW1uIGhhcyBiZWVuIGFkZGVkIHRvIG9uZSBvZiB0aGUKICAgICAgICBUYWJsZSBvYmplY3RzIGl0IHVsdGltdGVseSBkZXJpdmVzIGZyb20uCgogICAgICAgIElmIHRoZSBnaXZlbiBzZWxlY3RhYmxlIGhhc24ndCBwb3B1bGF0ZWQgaXRzIC5jLiBjb2xsZWN0aW9uIHlldCwKICAgICAgICBpdCBzaG91bGQgYXQgbGVhc3QgcGFzcyBvbiB0aGUgbWVzc2FnZSB0byB0aGUgY29udGFpbmVkIHNlbGVjdGFibGVzLAogICAgICAgIGJ1dCBpdCB3aWxsIHJldHVybiBOb25lLgoKICAgICAgICBUaGlzIG1ldGhvZCBpcyBjdXJyZW50bHkgdXNlZCBieSBEZWNsYXJhdGl2ZSB0byBhbGxvdyBUYWJsZQogICAgICAgIGNvbHVtbnMgdG8gYmUgYWRkZWQgdG8gYSBwYXJ0aWFsbHkgY29uc3RydWN0ZWQgaW5oZXJpdGFuY2UKICAgICAgICBtYXBwaW5nIHRoYXQgbWF5IGhhdmUgYWxyZWFkeSBwcm9kdWNlZCBqb2lucy4gIFRoZSBtZXRob2QKICAgICAgICBpc24ndCBwdWJsaWMgcmlnaHQgbm93LCBhcyB0aGUgZnVsbCBzcGFuIG9mIGltcGxpY2F0aW9ucwogICAgICAgIGFuZC9vciBjYXZlYXRzIGFyZW4ndCB5ZXQgY2xlYXIuCgogICAgICAgIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0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CiAgICAgICAgd291bGQgcHJvZHVjZSBhbiBleHByZXNzaW9uIGFsb25nIHRoZSBsaW5lcyBvZjo6CgogICAgICAgICAgICB0YWJsZWEuYy5pZD09dGFibGViLmMudGFibGVhX2lkCgogICAgICAgIFRoZSBqb2luIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIGZvcmVpZ24ga2V5IHJlbGF0aW9uc2hpcHMKICAgICAgICBiZXR3ZWVuIHRoZSB0d28gc2VsZWN0YWJsZXMuICAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHdheXMKICAgICAgICB0byBqb2luLCBvciBubyB3YXkgdG8gam9pbiwgYW4gZXJyb3IgaXMgcmFpc2VkLgoKICAgICAgICA6cGFyYW0gaWdub3JlX25vbmV4aXN0ZW50X3RhYmxlczogdW51c2VkIC0gdGFibGVzIG91dHNpZGUgb2YgdGhlCiAgICAgICAgIHR3byB0YWJsZXMgYmVpbmcgaGFuZGxlZCBhcmUgbm90IGNvbnNpZGVyZWQuCgogICAgICAgIDpwYXJhbSBhX3N1YnNldDogQW4gb3B0aW9uYWwgZXhwcmVzc2lvbiB0aGF0IGlzIGEgc3ViLWNvbXBvbmVudAogICAgICAgICBvZiBgYGFgYC4gIEFuIGF0dGVtcHQgd2lsbCBiZSBtYWRlIHRvIGpvaW4gdG8ganVzdCB0aGlzIHN1Yi1jb21wb25lbnQKICAgICAgICAgZmlyc3QgYmVmb3JlIGxvb2tpbmcgYXQgdGhlIGZ1bGwgYGBhYGAgY29uc3RydWN0LCBhbmQgaWYgZm91bmQKICAgICAgICAgd2lsbCBiZSBzdWNjZXNzZnVsIGV2ZW4gaWYgdGhlcmUgYXJlIG90aGVyIHdheXMgdG8gam9pbiB0byBgYGFgYC4KICAgICAgICAgVGhpcyBhbGxvd3MgdGhlICJyaWdodCBzaWRlIiBvZiBhIGpvaW4gdG8gYmUgcGFzc2VkIHRoZXJlYnkKICAgICAgICAgcHJvdmlkaW5nIGEgIm5hdHVyYWwgam9pbiIuCgogICAgICAgIHIEAAAAcgEAAAB6SSBQZXJoYXBzIHlvdSBtZWFudCB0byBjb252ZXJ0IHRoZSByaWdodCBzaWRlIHRvIGEg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U0VMRUNUCiAgICAgICAgY29uc3RydWN0IGZyb20gdGhpcyA6Y2xhc3M6YC5Kb2luYCwgdGhlbiB0byBwcm9kdWNlIGFuCiAgICAgICAgOmNsYXNzOmAuQWxpYXNgIGZyb20gdGhhdC4gIFNvIGdpdmVuIGEgam9pbiBvZiB0aGUgZm9ybTo6CgogICAgICAgICAgICBqID0gdGFibGVfYS5qb2luKHRhYmxlX2IsIHRhYmxlX2EuYy5pZCA9PSB0YWJsZV9iLmMuYV9pZCkKCiAgICAgICAgVGhlIEpPSU4gYnkgaXRzZWxmIHdvdWxkIGxvb2sgbGlrZTo6CgogICAgICAgICAgICB0YWJsZV9hIEpPSU4gdGFibGVfYiBPTiB0YWJsZV9hLmlkID0gdGFibGVfYi5hX2lkCgogICAgICAgIFdoZXJlYXMgdGhlIGFsaWFzIG9mIHRoZSBhYm92ZSwgYGBqLmFsaWFzKClgYCwgd291bGQgaW4gYQogICAgICAgIFNFTEVDVCBjb250ZXh0IGxvb2sgbGlrZTo6CgogICAgICAgICAgICAoU0VMRUNUIHRhYmxlX2EuaWQgQVMgdGFibGVfYV9pZCwgdGFibGVfYi5pZCBBUyB0YWJsZV9iX2lkLAogICAgICAgICAgICAgICAgdGFibGVfYi5hX2lkIEFTIHRhYmxlX2JfYV9pZAogICAgICAgICAgICAgICAgRlJPTSB0YWJsZV9hCiAgICAgICAgICAgICAgICBKT0lOIHRhYmxlX2IgT04gdGFibGVfYS5pZCA9IHRhYmxlX2IuYV9pZCkgQVMgYW5vbl8xCgogICAgICAgIFRoZSBlcXVpdmFsZW50IGxvbmctaGFuZCBmb3JtLCBnaXZlbiBhIDpjbGFzczpgLkpvaW5gIG9iamVjdAogICAgICAgIGBgamBgLCBpczo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IHNlbGVjdCwgYWxpYXMKICAgICAgICAgICAgaiA9IGFsaWFzKAogICAgICAgICAgICAgICAgc2VsZWN0KFtqLmxlZnQsIGoucmlnaHRdKS5cCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0X2Zyb20oaikuXAogICAgICAgICAgICAgICAgICAgIHdpdGhfbGFiZWxzKFRydWUpLlwKICAgICAgICAgICAgICAgICAgICBjb3JyZWxhdGUoRmFsc2UpLAogICAgICAgICAgICAgICAgbmFtZT1uYW1lCiAgICAgICAgICAgICkKCiAgICAgICAgVGhlIHNlbGVjdGFibGUgcHJvZHVjZWQgYnkgOm1ldGg6YC5Kb2luLmFsaWFzYCBmZWF0dXJlcyB0aGUgc2FtZQogICAgICAgIGNvbHVtbnMgYXMgdGhhdCBvZiB0aGUgdHdvIGluZGl2aWR1YWwgc2VsZWN0YWJsZXMgcHJlc2VudGVkIHVuZGVyCiAgICAgICAgYSBzaW5nbGUgbmFtZSAtIHRoZSBpbmRpdmlkdWFsIGNvbHVtbnMgYXJlICJhdXRvLWxhYmVsZWQiLCBtZWFuaW5nCiAgICAgICAgdGhlIGBgLmMuYGAgY29sbGVjdGlvbiBvZiB0aGUgcmVzdWx0aW5nIDpjbGFzczpgLkFsaWFzYCByZXByZXNlbnRzCiAgICAgICAgdGhlIG5hbWVzIG9mIHRoZSBpbmRpdmlkdWFsIGNvbHVtbnMgdXNpbmcgYQogICAgICAgIGBgPHRhYmxlbmFtZT5fPGNvbHVtbmFtZT5gYCBzY2hlbWU6OgoKICAgICAgICAgICAgai5jLnRhYmxlX2FfaWQKICAgICAgICAgICAgai5jLnRhYmxlX2JfYV9pZAoKICAgICAgICA6bWV0aDpgLkpvaW4uYWxpYXNgIGFsc28gZmVhdHVyZXMgYW4gYWx0ZXJuYXRlCiAgICAgICAgb3B0aW9uIGZvciBhbGlhc2luZyBqb2lucyB3aGljaCBwcm9kdWNlcyBubyBlbmNsb3NpbmcgU0VMRUNUIGFuZAogICAgICAgIGRvZXMgbm90IG5vcm1hbGx5IGFwcGx5IGxhYmVscyB0byB0aGUgY29sdW1uIG5hbWVzLiAgVGhlCiAgICAgICAgYGBmbGF0PVRydWVgYCBvcHRpb24gd2lsbCBjYWxsIDptZXRoOmAuRnJvbUNsYXVzZS5hbGlhc2AKICAgICAgICBhZ2FpbnN0IHRoZSBsZWZ0IGFuZCByaWdodCBzaWRlcyBpbmRpdmlkdWFsbHkuCiAgICAgICAgVXNpbmcgdGhpcyBvcHRpb24sIG5vIG5ldyBgYFNFTEVDVGBgIGlzIHByb2R1Y2VkOwogICAgICAgIHdlIGluc3RlYWQsIGZyb20gYSBjb25zdHJ1Y3QgYXMgYmVsb3c6OgoKICAgICAgICAgICAgaiA9IHRhYmxlX2Euam9pbih0YWJsZV9iLCB0YWJsZV9hLmMuaWQgPT0gdGFibGVfYi5jLmFfaWQpCiAgICAgICAgICAgIGogPSBqLmFsaWFzKGZsYXQ9VHJ1ZSkKCiAgICAgICAgd2UgZ2V0IGEgcmVzdWx0IGxpa2UgdGhpczo6CgogICAgICAgICAgICB0YWJsZV9hIEFTIHRhYmxlX2FfMSBKT0lOIHRhYmxlX2IgQVMgdGFibGVfYl8xIE9OCiAgICAgICAgICAgIHRhYmxlX2FfMS5pZCA9IHRhYmxlX2JfMS5hX2lkCgogICAgICAgIFRoZSBgYGZsYXQ9VHJ1ZWBgIGFyZ3VtZW50IGlzIGFsc28gcHJvcGFnYXRlZCB0byB0aGUgY29udGFpbmVkCiAgICAgICAgc2VsZWN0YWJsZXMsIHNvIHRoYXQgYSBjb21wb3NpdGUgam9pbiBzdWNoIGFzOjoKCiAgICAgICAgICAgIGogPSB0YWJsZV9hLmpvaW4oCiAgICAgICAgICAgICAgICAgICAgdGFibGVfYi5qb2luKHRhYmxlX2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9iLmMuaWQgPT0gdGFibGVfYy5jLmJfaWQpLAogICAgICAgICAgICAgICAgICAgIHRhYmxlX2IuYy5hX2lkID09IHRhYmxlX2EuYy5pZAogICAgICAgICAgICAgICAgKS5hbGlhcyhmbGF0PVRydWUpCgogICAgICAgIFdpbGwgcHJvZHVjZSBhbiBleHByZXNzaW9uIGxpa2U6OgoKICAgICAgICAgICAgdGFibGVfYSBBUyB0YWJsZV9hXzEgSk9JTiAoCiAgICAgICAgICAgICAgICAgICAgdGFibGVfYiBBUyB0YWJsZV9iXzEgSk9JTiB0YWJsZV9jIEFTIHRhYmxlX2NfMQogICAgICAgICAgICAgICAgICAgIE9OIHRhYmxlX2JfMS5pZCA9IHRhYmxlX2NfMS5iX2lkCiAgICAgICAgICAgICkgT04gdGFibGVfYV8xLmlkID0gdGFibGVfYl8xLmFfaWQKCiAgICAgICAgVGhlIHN0YW5kYWxvbmUgOmZ1bmM6YH4uZXhwcmVzc2lvbi5hbGlhc2AgZnVuY3Rpb24gYXMgd2VsbCBhcyB0aGUKICAgICAgICBiYXNlIDptZXRoOmAuRnJvbUNsYXVzZS5hbGlhc2AgbWV0aG9kIGFsc28gc3VwcG9ydCB0aGUgYGBmbGF0PVRydWVgYAogICAgICAgIGFyZ3VtZW50IGFzIGEgbm8tb3AsIHNvIHRoYXQgdGhlIGFyZ3VtZW50IGNhbiBiZSBwYXNzZWQgdG8gdGhlCiAgICAgICAgYGBhbGlhcygpYGAgbWV0aG9kIG9mIGFueSBzZWxlY3RhYmxlLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuMCBBZGRlZCB0aGUgYGBmbGF0PVRydWVgYCBvcHRpb24gdG8gY3JlYXRlCiAgICAgICAgICAiYWxpYXNlcyIgb2Ygam9pbnMgd2l0aG91dCBlbmNsb3NpbmcgaW5zaWRlIG9mIGEgU0VMRUNUCiAgICAgICAgICBzdWJxdWVyeS4KCiAgICAgICAgOnBhcmFtIG5hbWU6IG5hbWUgZ2l2ZW4gdG8gdGhlIGFsaWFzLgoKICAgICAgICA6cGFyYW0gZmxhdDogaWYgVHJ1ZSwgcHJvZHVjZSBhbiBhbGlhcyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQKICAgICAgICAgc2lkZXMgb2YgdGhpcyA6Y2xhc3M6YC5Kb2luYCBhbmQgcmV0dXJuIHRoZSBqb2luIG9mIHRob3NlCiAgICAgICAgIHR3byBzZWxlY3RhYmxlcy4gICBUaGlzIHByb2R1Y2VzIGpvaW4gZXhwcmVzc2lvbiB0aGF0IGRvZXMgbm90CiAgICAgICAgIGluY2x1ZGUgYW4gZW5jbG9zaW5nIFNFTEVDVC4KCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS4wCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgY29yZV90dXRvcmlhbF9hbGlhc2VzYAoKICAgICAgICAgICAgOmZ1bmM6YH4uZXhwcmVzc2lvbi5hbGlhc2AKCiAgICAgICAgTnoiQ2FuJ3Qgc2VuZCBuYW1lIGFyZ3VtZW50IHdpdGggZmxhdFQpAXJ+AAAAKQJyegAAAHJ7AAAARikC2gp1c2VfbGFiZWxz2gljb3JyZWxhdGUpDHKxAAAAcr8AAABySwAAAHJ4AAAAcooAAAByzwAAAHJXAAAAcosAAAByeQAAAHJ6AAAAcnsAAAByNQAAACkHcjgAAAByjAAAAHJDAAAAcn4AAABaBmxlZnRfYVoHcmlnaHRfYVoHYWRhcHRlcnIvAAAAci8AAAByMAAAAHJLAAAANwQAAHMYAAAAAGUEARACDAESAgoBDAMEAQIBCgEEAQoDegpKb2luLmFsaWFzYwEAAAAAAAAAAQAAAAMAAABDAAAAcxYAAAB0AGoBZAFkAoQAfABqAkQAgwGOAFMAKQNOYwEAAAAAAAAAAgAAAAUAAABTAAAAcxoAAABnAHwAXRJ9AXQAfAFqAXwBagKDApECcQRTAHIvAAAAKQNyCAAAAHK/AAAAcngAAAApAnJcAAAActgAAAByLwAAAHIvAAAAcjAAAAByXgAAALIEAABzAgAAAAYAeiRKb2luLl9oaWRlX2Zyb21zLjxsb2NhbHM+LjxsaXN0Y29tcD4pA3LOAAAAcs8AAAByhQAAACkBcjgAAAByLwAAAHIvAAAAcjAAAABytgAAAK8EAABzBAAAAAACBAF6EEpvaW4uX2hpZGVfZnJvbXNjAQAAAAAAAAABAAAAAgAAAEMAAABzHgAAAHwAZwF8AGoAagEXAHwAagJqARcAfABqA2oBFwBTACkBTikEcnkAAAByCAAAAHK/AAAAcngAAAApAXI4AAAAci8AAAByLwAAAHIwAAAAcggAAAC1BAAAcwIAAAAABnoSSm9pbi5fZnJvbV9vYmplY3RzKQNORkYpAk5GKQNORkYpAU4pA0ZOTikBTikBTikCTkYpIHI6AAAAcjsAAAByPAAAAHJQAAAAclEAAABytwAAAHLCAAAA2gtjbGFzc21ldGhvZHLEAAAAcsUAAAByPQAAAHKpAAAAcoYAAABywAAAAHInAAAAcr0AAAByrgAAAHK0AAAAchEAAABy0QAAAHLSAAAAcsEAAADaEWRlcHJlY2F0ZWRfcGFyYW1zctQAAABy5AAAAHLaAAAActsAAAByNQAAAHLxAAAAcksAAABytgAAAHIIAAAAci8AAAByLwAAAHIvAAAAcjAAAABydwAAAMMCAABzQAAAAAgOBAIEAgQCChMCAQwYAgIMLwwJCAcKAxIQCA0MBggDCAcCAQQCBgsAAQABDjgCAQwPDDIMHwoWDAQIAQx3DAZydwAAAGMAAAAAAAAAAAAAAAAEAAAAAAAAAHO0AAAAZQBaAWQAWgJkAVoDZAJaBGQDWgVkA1oGZARkBYQAWgdlCGQGZAeEAIMBWgllCGQiZApkC4QBgwFaCmQjZAxkDYQBWgtkJIcAZgFkDmQPhAlaDGUNZBBkEYQAgwFaDmQSZBOEAFoPZBRkFYQAWhBkFmQXhABaEWQYZBmEAFoSZRNmAWQaZBuEAVoUZCVkHGQdhAFaFWUNZB5kH4QAgwFaFmUNZCBkIYQAgwFaF4cABABaGFMAKSZyMgAAAGG3AQAAUmVwcmVzZW50cyBhbiB0YWJsZSBvciBzZWxlY3RhYmxlIGFsaWFzIChBUykuCgogICAgUmVwcmVzZW50cyBhbiBhbGlhcywgYXMgdHlwaWNhbGx5IGFwcGxpZWQgdG8gYW55IHRhYmxlIG9yCiAgICBzdWItc2VsZWN0IHdpdGhpbiBhIFNRTCBzdGF0ZW1lbnQgdXNpbmcgdGhlIGBgQVNgYCBrZXl3b3JkIChvcgogICAgd2l0aG91dCB0aGUga2V5d29yZCBvbiBjZXJ0YWluIGRhdGFiYXNlcyBzdWNoIGFzIE9yYWNsZSkuCgogICAgVGhpcyBvYmplY3QgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgOmZ1bmM6YH4uZXhwcmVzc2lvbi5hbGlhc2AgbW9kdWxlCiAgICBsZXZlbCBmdW5jdGlvbiBhcyB3ZWxsIGFzIHRoZSA6bWV0aDpgLkZyb21DbGF1c2UuYWxpYXNgIG1ldGhvZCBhdmFpbGFibGUKICAgIG9uIGFsbCA6Y2xhc3M6YC5Gcm9tQ2xhdXNlYCBzdWJjbGFzc2VzLgoKICAgIHJLAAAAVGMBAAAAAAAAAAMAAAAGAAAATwAAAHMqAAAAdABkAXwAagFqAnwAagFqAqADoQB8AGoBagKgA6EAZgMWAIMBggFkAFMAKQJOeqNUaGUgJXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5LiAgUGxlYXNlIHVzZSB0aGUgJXMoKSBzdGFuZGFsb25lIGZ1bmN0aW9uIG9yIHRoZSAlcygpIG1ldGhvZCBhdmFpbGFibGUgZnJvbSBhcHByb3ByaWF0ZSBzZWxlY3RhYmxlIG9iamVjdHMuKQTaE05vdEltcGxlbWVudGVkRXJyb3JyqAAAAHI6AAAA2gVsb3dlcikDcjgAAADaA2FyZ3JZAAAAci8AAAByLwAAAHIwAAAAcsIAAADRBAAAcwoAAAAAAQIBAgUGAQoBeg5BbGlhcy5fX2luaXRfX2MBAAAAAAAAAAQAAAADAAAATwAAAHMaAAAAfACgAHwAoQF9A3wDagF8AXwCjgEBAHwDUwApAU4pAtoHX19uZXdfX9oFX2luaXQpBHLDAAAAcvgAAAByWQAAANoDb2Jqci8AAAByLwAAAHIwAAAAcn0AAADeBAAAcwYAAAAAAgoBDAF6EEFsaWFzLl9jb25zdHJ1Y3RORmMEAAAAAAAAAAQAAAAEAAAAQwAAAHMSAAAAdAB8AYMBagF8AnwDZAGNAlMAKQJhTQcAAFJldHVybiBhbiA6Y2xhc3M6YC5BbGlhc2Agb2JqZWN0LgoKICAgICAgICBBbiA6Y2xhc3M6YC5BbGlhc2AgcmVwcmVzZW50cyBhbnkgOmNsYXNzOmAuRnJvbUNsYXVzZWAKICAgICAgICB3aXRoIGFuIGFsdGVybmF0ZSBuYW1lIGFzc2lnbmVkIHdpdGhpbiBTUUwsIHR5cGljYWxseSB1c2luZyB0aGUgYGBBU2BgCiAgICAgICAgY2xhdXNlIHdoZW4gZ2VuZXJhdGVkLCBlLmcuIGBgU0VMRUNUICogRlJPTSB0YWJsZSBBUyBhbGlhc25hbWVgYC4KCiAgICAgICAgU2ltaWxhciBmdW5jdGlvbmFsaXR5IGlzIGF2YWlsYWJsZSB2aWEgdGhlCiAgICAgICAgOm1ldGg6YH4uRnJvbUNsYXVzZS5hbGlhc2AgbWV0aG9kCiAgICAgICAgYXZhaWxhYmxlIG9uIGFsbCA6Y2xhc3M6YC5Gcm9tQ2xhdXNlYCBzdWJjbGFzc2VzLiAgIEluIHRlcm1zIG9mIGEKICAgICAgICBTRUxFQ1Qgb2JqZWN0IGFzIGdlbmVyYXRlZCBmcm9tIHRoZSA6ZnVuYzpgLnNlbGVjdGAgZnVuY3Rpb24sIHRoZQogICAgICAgIDptZXRoOmAuU2VsZWN0QmFzZS5hbGlhc2AgbWV0aG9kIHJldHVybnMgYW4gOmNsYXNzOmAuQWxpYXNgIG9yCiAgICAgICAgc2ltaWxhciBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBhIG5hbWVkLCBwYXJlbnRoZXNpemVkIHN1YnF1ZXJ5LgoKICAgICAgICBXaGVuIGFuIDpjbGFzczpgLkFsaWFzYCBpcyBjcmVhdGVkIGZyb20gYSA6Y2xhc3M6YC5UYWJsZWAgb2JqZWN0LAogICAgICAgIHRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgdGhlIHRhYmxlIGJlaW5nIHJlbmRlcmVkCiAgICAgICAgYXMgYGB0YWJsZW5hbWUgQVMgYWxpYXNuYW1lYGAgaW4gYSBTRUxFQ1Qgc3RhdGVtZW50LgoKICAgICAgICBGb3IgOmZ1bmM6YC5zZWxlY3RgIG9iamVjdHMsIHRoZSBlZmZlY3QgaXMgdGhhdCBvZiBjcmVhdGluZyBhIG5hbWVkCiAgICAgICAgc3VicXVlcnksIGkuZS4gYGAoc2VsZWN0IC4uLikgQVMgYWxpYXNuYW1lYGAuCgogICAgICAgIFRoZSBgYG5hbWVgYCBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwsIGFuZCBwcm92aWRlcyB0aGUgbmFtZQogICAgICAgIHRvIHVzZSBpbiB0aGUgcmVuZGVyZWQgU1FMLiAgSWYgYmxhbmssIGFuICJhbm9ueW1vdXMiIG5hbWUKICAgICAgICB3aWxsIGJlIGRldGVybWluaXN0aWNhbGx5IGdlbmVyYXRlZCBhdCBjb21waWxlIHRpbWUuCiAgICAgICAgRGV0ZXJtaW5pc3RpYyBtZWFucyB0aGUgbmFtZSBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhZ2FpbnN0CiAgICAgICAgb3RoZXIgY29uc3RydWN0cyB1c2VkIGluIHRoZSBzYW1lIHN0YXRlbWVudCwgYW5kIHdpbGwgYWxzbyBiZSB0aGUKICAgICAgICBzYW1lIG5hbWUgZm9yIGVhY2ggc3VjY2Vzc2l2ZSBjb21waWxhdGlvbiBvZiB0aGUgc2FtZSBzdGF0ZW1lbnQKICAgICAgICBvYmplY3QuCgogICAgICAgIDpwYXJhbSBz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IG1vZHVsZQogICAgbGV2ZWwgZnVuY3Rpb24gYXMgd2VsbCBhcyB0aGUgOm1ldGg6YC5Gcm9tQ2xhdXNlLnRhYmxlc2FtcGxlYCBtZXRob2QKICAgIGF2YWlsYWJsZSBvbiBhbGwgOmNsYXNzOmAuRnJvbUNsYXVzZWAgc3ViY2xhc3Nlcy4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEKCiAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgOmZ1bmM6YH4uZXhwcmVzc2lvbi50YWJsZXNhbXBsZWAKCiAgICByhAAAAE5jBQAAAAAAAAAFAAAABQAAAEMAAABzFAAAAHQAfAGDAWoBfAJ8A3wEZAGNA1MAKQJhZQUAAFJldHVybiBhIDpjbGFzczpgLlRhYmxlU2FtcGxlYCBvYmplY3QuCgogICAgICAgIDpjbGFzczpgLlRhYmxlU2FtcGxlYCBpcyBhbiA6Y2xhc3M6YC5BbGlhc2Agc3ViY2xhc3MgdGhhdCByZXByZXNlbnRzCiAgICAgICAgYSB0YWJsZSB3aXRoIHRoZSBUQUJMRVNBTVBMRSBjbGF1c2UgYXBwbGllZCB0byBpdC4KICAgICAgICA6ZnVuYzpgfi5leHByZXNzaW9uLnRhYmxlc2FtcGxlYAogICAgICAgIGlzIGFsc28gYXZhaWxhYmxlIGZyb20gdGhlIDpjbGFzczpgLkZyb21DbGF1c2VgIGNsYXNzIHZpYSB0aGUKICAgICAgICA6bWV0aDpgLkZyb21DbGF1c2UudGFibGVzYW1wbGVgIG1ldGhvZC4KCiAgICAgICAgVGhlIFRBQkxFU0FNUExFIGNsYXVzZSBhbGxvd3Mgc2VsZWN0aW5nIGEgcmFuZG9tbHkgc2VsZWN0ZWQgYXBwcm94aW1hdGUKICAgICAgICBwZXJjZW50YWdlIG9mIHJvd3MgZnJvbSBhIHRhYmxlLiBJdCBzdXBwb3J0cyBtdWx0aXBsZSBzYW1wbGluZyBtZXRob2RzLAogICAgICAgIG1vc3QgY29tbW9ubHkgQkVSTk9VTExJIGFuZCBTWVNURU0uCgogICAgICAgIGUuZy46OgoKICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBmdW5jCgogICAgICAgICAgICBzZWxl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IHF1ZXJpZXMsIHdoZXJlIGEgU0VMRUNUIHN0YXRlbWVudCBjYW4gZHJhdwogICAgICAgIHVwb24gdGhlIHNldCBvZiByb3dzIHRoYXQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gc2VsZWN0ZWQuCgogICAgICAgIENURXMgY2FuIGFsc28gYmUgYXBwbGllZCB0byBETUwgY29uc3RydWN0cyBVUERBVEUsIElOU0VSVAogICAgICAgIGFuZCBERUxFVEUgb24gc29tZSBkYXRhYmFzZXMsIGJvdGggYXMgYSBzb3VyY2Ugb2YgQ1RFIHJvd3MKICAgICAgICB3aGVuIGNvbWJpbmVkIHdpdGggUkVUVVJOSU5HLCBhcyB3ZWxsIGFzIGEgY29uc3VtZXIgb2YKICAgICAgICBDVEUgcm93cy4KCiAgICAgICAgU1FMQWxjaGVteSBkZXRlY3RzIDpjbGFzczpgLkNURWAgb2JqZWN0cywgd2hpY2ggYXJlIHRyZWF0ZWQKICAgICAgICBzaW1pbGFybHkgdG8gOmNsYXNzOmAuQWxpYXNgIG9iamVjdHMsIGFzIHNwZWNpYWwgZWxlbWVudHMKICAgICAgICB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIEZST00gY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQgYXMgd2VsbAogICAgICAgIGFzIHRvIGEgV0lUSCBjbGF1c2UgYXQgdGhlIHRvcCBvZiB0aGUgc3RhdGVtZW50LgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDEuMSBBZGRlZCBzdXBwb3J0IGZvciBVUERBVEUvSU5TRVJUL0RFTEVURSBhcwogICAgICAgICAgIENURSwgQ1RFcyBhZGRlZCB0byBVUERBVEUvSU5TRVJUL0RFTEVURS4KCiAgICAgICAgOnBhcmFtIG5hbWU6IG5hbWUgZ2l2ZW4gdG8gdGhlIGNvbW1vbiB0YWJsZSBleHByZXNzaW9uLiAgTGlrZQogICAgICAgICA6bWV0aDpgLl9Gcm9tQ2xhdXNlLmFsaWFzYCwgdGhlIG5hbWUgY2FuIGJlIGxlZnQgYXMgYGBOb25lYGAKICAgICAgICAgaW4gd2hpY2ggY2FzZSBhbiBhbm9ueW1vdXMgc3ltYm9sIHdpbGwgYmUgdXNlZCBhdCBxdWVyeQogICAgICAgICBjb21waWxlIHRpbWUuCiAgICAgICAgOnBhcmFtIHJlY3Vyc2l2ZTogaWYgYGBUcnVlYGAsIHdpbGwgcmVuZGVyIGBgV0lUSCBSRUNVUlNJVkVgYC4KICAgICAgICAgQSByZWN1cnNpdmUgY29tbW9uIHRhYmxlIGV4cHJlc3Npb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbgogICAgICAgICBjb25qdW5jdGlvbiB3aXRoIFVOSU9OIEFMTCBpbiBvcmRlciB0byBkZXJpdmUgcm93cwogICAgICAgICBmcm9tIHRob3NlIGFscmVhZHkgc2VsZWN0ZWQuCgogICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgaW5jbHVkZSB0d28gZnJvbSBQb3N0Z3JlU1FMJ3MgZG9jdW1lbnRhdGlvbiBhdAogICAgICAgIGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3N0YXRpYy9xdWVyaWVzLXdpdGguaHRtbCwKICAgICAgICBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZXhhbXBsZXMuCgogICAgICAgIEV4YW1wbGUgMSwgbm9uIHJlY3Vyc2l2ZTo6CgogICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IChUYWJsZSwgQ29sdW1uLCBTdHJpbmcsIEludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldGFEYXRhLCBzZWxlY3QsIGZ1bmMpCgogICAgICAgICAgICBtZXRhZGF0YSA9IE1ldGFEYXRhKCkKCiAgICAgICAgICAgIG9yZGVycyA9IFRhYmxlKCdvcmRlcnMnLCBtZXRhZGF0YSwKICAgICAgICAgICAgICAgIENvbHVtbigncmVnaW9uJywgU3RyaW5nKSwKICAgICAgICAgICAgICAgIENvbHVtbignYW1vdW50JywgSW50ZWdlciksCiAgICAgICAgICAgICAgICBDb2x1bW4oJ3Byb2R1Y3QnLCBTdHJpbmcpLAogICAgICAgICAgICAgICAgQ29sdW1uKCdxdWFudGl0eScsIEludGVnZXIpCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIHJlZ2lvbmFsX3NhbGVzID0gc2VsZWN0KFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcnMuYy5yZWdpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5zdW0ob3JkZXJzLmMuYW1vdW50KS5sYWJlbCgndG90YWxfc2FsZXMnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkuZ3JvdXBfYnkob3JkZXJzLmMucmVnaW9uKS5jdGUoInJlZ2lvbmFsX3NhbGVzIikKCgogICAgICAgICAgICB0b3BfcmVnaW9ucyA9IHNlbGVjdChbcmVnaW9uYWxfc2FsZXMuYy5yZWdpb25dKS5cCiAgICAgICAgICAgICAgICAgICAgd2hlcmUoCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbmFsX3NhbGVzLmMudG90YWxfc2FsZXMgPgogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5zdW0ocmVnaW9uYWxfc2FsZXMuYy50b3RhbF9zYWxlcykvMTAKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICApLmN0ZSgidG9wX3JlZ2lvbnMiKQoKICAgICAgICAgICAgc3RhdGVtZW50ID0gc2VsZWN0KFsKICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJzLmMucmVnaW9uLAogICAgICAgICAgICAgICAgICAgICAgICBvcmRlcnMuYy5wcm9kdWN0LAogICAgICAgICAgICAgICAgICAgICAgICBmdW5jLnN1bShvcmRlcnMuYy5xdWFudGl0eSkubGFiZWwoInByb2R1Y3RfdW5pdHMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5zdW0ob3JkZXJzLmMuYW1vdW50KS5sYWJlbCgicHJvZHVjdF9zYWxlcyIpCiAgICAgICAgICAgICAgICBdKS53aGVyZShvcmRlcnMuYy5yZWdpb24uaW5fKAogICAgICAgICAgICAgICAgICAgIHNlbGVjdChbdG9wX3JlZ2lvbnMuYy5yZWdpb25dKQogICAgICAgICAgICAgICAgKSkuZ3JvdXBfYnkob3JkZXJzLmMucmVnaW9uLCBvcmRlcnMuYy5wcm9kdWN0KQoKICAgICAgICAgICAgcmVzdWx0ID0gY29ubi5leGVjdXRlKHN0YXRlbWVudCkuZmV0Y2hhbGwoKQoKICAgICAgICBFeGFtcGxlIDIsIFdJVEggUkVDVVJTSVZFOjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgKFRhYmxlLCBDb2x1bW4sIFN0cmluZywgSW50ZWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0YURhdGEsIHNlbGVjdCwgZnVuYykKCiAgICAgICAgICAgIG1ldGFkYXRhID0gTWV0YURhdGEoKQoKICAgICAgICAgICAgcGFydHMgPSBUYWJsZSgncGFydHMnLCBtZXRhZGF0YSwKICAgICAgICAgICAgICAgIENvbHVtbigncGFydCcsIFN0cmluZyksCiAgICAgICAgICAgICAgICBDb2x1bW4oJ3N1Yl9wYXJ0JywgU3RyaW5nKSwKICAgICAgICAgICAgICAgIENvbHVtbigncXVhbnRpdHknLCBJbnRlZ2VyKSwKICAgICAgICAgICAgKQoKICAgICAgICAgICAgaW5jbHVkZWRfcGFydHMgPSBzZWxlY3QoWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLmMuc3ViX3BhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuYy5wYXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLmMucXVhbnRpdHldKS5cCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUocGFydHMuYy5wYXJ0PT0nb3VyIHBhcnQnKS5cCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RlKHJlY3Vyc2l2ZT1UcnVlKQoKCiAgICAgICAgICAgIGluY2xfYWxpYXMgPSBpbmNsdWRlZF9wYXJ0cy5hbGlhcygpCiAgICAgICAgICAgIHBhcnRzX2FsaWFzID0gcGFydHMuYWxpYXMoKQogICAgICAgICAgICBpbmNsdWRlZF9wYXJ0cyA9IGluY2x1ZGVkX3BhcnRzLnVuaW9uX2FsbCgKICAgICAgICAgICAgICAgIHNlbGVjdChbCiAgICAgICAgICAgICAgICAgICAgcGFydHNfYWxpYXMuYy5zdWJfcGFydCwKICAgICAgICAgICAgICAgICAgICBwYXJ0c19hbGlhcy5jLnBhcnQsCiAgICAgICAgICAgICAgICAgICAgcGFydHNfYWxpYXMuYy5xdWFudGl0eQogICAgICAgICAgICAgICAgXSkuCiAgICAgICAgICAgICAgICAgICAgd2hlcmUocGFydHNfYWxpYXMuYy5wYXJ0PT1pbmNsX2FsaWFzLmMuc3ViX3BhcnQpCiAgICAgICAgICAgICkKCiAgICAgICAgICAgIHN0YXRlbWVudCA9IHNlbGVjdChbCiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkX3BhcnRzLmMuc3ViX3BhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuc3VtKGluY2x1ZGVkX3BhcnRzLmMucXVhbnRpdHkpLgogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsKCd0b3RhbF9xdWFudGl0eScpCiAgICAgICAgICAgICAgICAgICAgXSkuXAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KGluY2x1ZGVkX3BhcnRzLmMuc3ViX3BhcnQpCgogICAgICAgICAgICByZXN1bHQgPSBjb25uLmV4ZWN1dGUoc3RhdGVtZW50KS5mZXRjaGFsbCgpCgogICAgICAgIEV4YW1wbGUgMywgYW4gdXBzZXJ0IHVzaW5nIFVQREFURSBhbmQgSU5TRVJUIHdpdGggQ1RFczo6CgogICAgICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgKE1ldGFEYXRhLCBUYWJsZSwgQ29sdW1uLCBJbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlLCBzZWxlY3QsIGxpdGVyYWwsIGFuZF8sIGV4aXN0cykKCiAgICAgICAgICAgIG1ldGFkYXRhID0gTWV0YURhdGEoKQoKICAgICAgICAgICAgdmlzaXRvcnMgPSBUYWJsZSgndmlzaXRvcnMnLCBtZXRhZGF0YSwKICAgICAgICAgICAgICAgIENvbHVtbigncHJvZHVjdF9pZCcsIEludGVnZXIsIHByaW1hcnlfa2V5PVRydWUpLAogICAgICAgICAgICAgICAgQ29sdW1uKCdkYXRlJywgRGF0ZSwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICBDb2x1bW4oJ2NvdW50JywgSW50ZWdlciksCiAgICAgICAgICAgICkKCiAgICAgICAgICAgICMgYWRkIDUgdmlzaXRvcnMgZm9yIHRoZSBwcm9kdWN0X2lkID09IDEKICAgICAgICAgICAgcHJvZHVjdF9pZCA9IDEKICAgICAgICAgICAgZGF5ID0gZGF0ZS50b2RheSgpCiAgICAgICAgICAgIGNvdW50ID0gNQoKICAgICAgICAgICAgdXBkYXRlX2N0ZSA9ICgKICAgICAgICAgICAgICAgIHZpc2l0b3JzLnVwZGF0ZSgpCiAgICAgICAgICAgICAgICAud2hlcmUoYW5kXyh2aXNpdG9ycy5jLnByb2R1Y3RfaWQgPT0gcHJvZHVjdF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3JzLmMuZGF0ZSA9PSBkYXkpKQogICAgICAgICAgICAgICAgLnZhbHVlcyhjb3VudD12aXNpdG9ycy5jLmNvdW50ICsgY291bnQpCiAgICAgICAgICAgICAgICAucmV0dXJuaW5nKGxpdGVyYWwoMSkpCiAgICAgICAgICAgICAgICAuY3RlKCd1cGRhdGVfY3RlJykKICAgICAgICAgICAgKQoKICAgICAgICAgICAgdXBzZXJ0ID0gdmlzaXRvcnMuaW5zZXJ0KCkuZnJvbV9zZWxlY3QoCiAgICAgICAgICAgICAgICBbdmlzaXRvcnMuYy5wcm9kdWN0X2lkLCB2aXNpdG9ycy5jLmRhdGUsIHZpc2l0b3JzLmMuY291bnRdLAogICAgICAgICAgICAgICAgc2Vs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HGQVZBaEAYMBWhJlE2QXZBiEAIMBWhSHAAQAWhVTACkdcggBAABhEQQAAFJlcHJlc2VudHMgYSBtaW5pbWFsICJ0YWJsZSIgY29uc3RydWN0LgoKICAgIFRoaXMgaXMgYSBsaWdodHdlaWdodCB0YWJsZSBvYmplY3QgdGhhdCBoYXMgb25seSBhIG5hbWUgYW5kIGEKICAgIGNvbGxlY3Rpb24gb2YgY29sdW1ucywgd2hpY2ggYXJlIHR5cGljYWxseSBwcm9kdWNlZAogICAgYnkgdGhlIDpmdW5jOmAuZXhwcmVzc2lvbi5jb2x1bW5gIGZ1bmN0aW9uOjoKCiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCB0YWJsZSwgY29sdW1uCgogICAgICAgIHVzZXIgPSB0YWJsZSgidXNlciIsCiAgICAgICAgICAgICAgICBjb2x1bW4oImlkIiksCiAgICAgICAgICAgICAgICBjb2x1bW4oIm5hbWUiKSwKICAgICAgICAgICAgICAgIGNvbHVtbigiZGVzY3JpcHRpb24iKSwKICAgICAgICApCgogICAgVGhlIDpjbGFzczpgLlRhYmxlQ2xhdXNlYCBjb25zdHJ1Y3Qgc2VydmVzIGFzIHRoZSBiYXNlIGZvcgogICAgdGhlIG1vcmUgY29tbW9ubHkgdXNlZCA6Y2xhc3M6YH4uc2NoZW1hLlRhYmxlYCBvYmplY3QsIHByb3ZpZGluZwogICAgdGhlIHVzdWFsIHNldCBvZiA6Y2xhc3M6YH4uZXhwcmVzc2lvbi5Gcm9tQ2xhdXNlYCBzZXJ2aWNlcyBpbmNsdWRpbmcKICAgIHRoZSBgYC5jLmBgIGNvbGxlY3Rpb24gYW5kIHN0YXRlbWVudCBnZW5lcmF0aW9uIG1ldGhvZHMuCgogICAgSXQgZG9lcyAqKm5vdCoqIHByb3ZpZGUgYWxsIHRoZSBhZGRpdGlvbmFsIHNjaGVtYS1sZXZlbCBzZXJ2aWNlcwogICAgb2YgOmNsYXNzOmB+LnNjaGVtYS5UYWJsZWAsIGluY2x1ZGluZyBjb25zdHJhaW50cywgcmVmZXJlbmNlcyB0byBvdGhlcgogICAgdGFibGVzLCBvciBzdXBwb3J0IGZvciA6Y2xhc3M6YC5NZXRhRGF0YWAt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ZCCEAFoaZQtkIWQihACDAVobZRxmAWQjZCSEAVodZAJTACkn2hBHZW5lcmF0aXZlU2VsZWN0Yf4CAABCYXNlIGNsYXNzIGZvciBTRUxFQ1Qgc3RhdGVtZW50cyB3aGVyZSBhZGRpdGlvbmFsIGVsZW1lbnRzIGNhbiBiZQogICAgYWRkZWQuCgogICAgVGhpcyBzZXJ2ZXMgYXMgdGhlIGJhc2UgZm9yIDpjbGFzczpgLlNlbGVjdGAgYW5kIDpjbGFzczpgLkNvbXBvdW5kU2VsZWN0YAogICAgd2hlcmUgZWxlbWVudHMgc3VjaCBhcyBPUkRFUiBCWSwgR1JPVVAgQlkgY2FuIGJlIGFkZGVkIGFuZCBjb2x1bW4KICAgIHJlbmRlcmluZyBjYW4gYmUgY29udHJvbGxlZC4gIENvbXBhcmUgdG8gOmNsYXNzOmAuVGV4dEFzRnJvbWAsIHdoaWNoLAogICAgd2hpbGUgaXQgc3ViY2xhc3NlcyA6Y2xhc3M6YC5TZWxlY3RCYXNlYCBhbmQgaXMgYWxzbyBhIFNFTEVDVCBjb25zdHJ1Y3QsCiAgICByZXByZXNlbnRzIGEgZml4ZWQgdGV4dHVhbCBzdHJpbmcgd2hpY2ggY2Fubm90IGJlIGFsdGVyZWQgYXQgdGhpcyBsZXZlbCwKICAgIG9ubHkgd3JhcHBlZCBhcyBhIHN1YnF1ZXJ5LgoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDAuOS4wIDpjbGFzczpgLkdlbmVyYXRpdmVTZWxlY3RgIHdhcyBhZGRlZCB0bwogICAgICAgcHJvdmlkZSBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIDpjbGFzczpgLlNlbGVjdGAgYW5kCiAgICAgICA6Y2xhc3M6YC5Db21wb3VuZFNlbGVjdGAgd2hpbGUgYWxsb3dpbmcgOmNsYXNzOmAuU2VsZWN0QmFzZWAgdG8gYmUKICAgICAgIHVzZWQgZm9yIG90aGVyIFNFTEVDVC1saWtlIG9iamVjdHMsIGUuZy4gOmNsYXNzOmAuVGV4dEFzRnJvbWAuCgogICAgTkZjCQAAAAAAAAAJAAAABAAAAEMAAABzqAAAAHwBfABfAHwCZAFrCXIadAGgAnwCoQF8AF8DfAhkAGsJcj50BKAFZAKhAQEAfABqBqAHZAN8CGkBoQF8AF8GfANkAGsJclB0CHwDgwF8AF8JfARkAGsJcmJ0CHwEgwF8AF8KfAd8AF8LfAVkAGsJcoZ0DHQEoA18BaEBZAR0DmkBjgF8AF8PfAZkAGsJcqR0DHQEoA18BqEBZAR0EGkBjgF8AF8RZABTACkFTkZ6m1RoZSBzZWxlY3QuYXV0b2NvbW1pdCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuICBQbGVhc2UgcmVmZXIgdG8gdGhlIFNlbGVjdC5leGVjdXRpb25fb3B0aW9ucy5hdXRvY29tbWl0YCBwYXJhbWV0ZXIucjIBAAByGQAAACkScvIAAAByJQEAAHIpAQAA2g9fZm9yX3VwZGF0ZV9hcmdyJwAAAFoPd2Fybl9kZXByZWNhdGVkcv0AAAByFQEAAHJFAAAA2g1fbGltaXRfY2xhdXNl2g5fb2Zmc2V0X2NsYXVzZdoFX2JpbmRyHwAAAHIwAQAAchcAAADaEF9vcmRlcl9ieV9jbGF1c2VyGAAAANoQX2dyb3VwX2J5X2NsYXVzZSkJcjgAAABy8gAAANoKZm9yX3VwZGF0ZdoFbGltaXTaBm9mZnNldNoIb3JkZXJfYnnaCGdyb3VwX2J5cvEAAAByMgEAAHIvAAAAci8AAAByMAAAAHLCAAAAYwgAAHMqAAAAAAsGAggBDAIIAQQBBgQGAQwCCAEKAQgBCgEGAggBAgEKAQoCCAECAQoBehlHZW5lcmF0aXZlU2VsZWN0Ll9faW5pdF9fYwEAAAAAAAAAAQAAAAIAAABDAAAAcxoAAAB8AGoAZAFrCXISfABqAGoBUwBkAVMAZAFTACkCeklQcm92aWRlIGxlZ2FjeSBkaWFsZWN0IHN1cHBvcnQgZm9yIHRoZSBgYGZvcl91cGRhdGVgYCBhdHRyaWJ1dGUuCiAgICAgICAgTikCcjcBAAByKgEAACkBcjgAAAByLwAAAHIvAAAAcjAAAAByPQEAAI0IAABzBgAAAAAECgEIAnobR2VuZXJhdGl2ZVNlbGVjdC5mb3JfdXBkYXRlYwIAAAAAAAAAAgAAAAMAAABDAAAAcxAAAAB0AKABfAGhAXwAXwJkAFMAKQFOKQNyJQEAAHIpAQAAcjcBAAApAnI4AAAAckQAAAByLwAAAHIvAAAAcjAAAAByPQEAAJYIAABzAgAAAAACYwYAAAAAAAAABgAAAAcAAABDAAAAcxgAAAB0AHwBfAJ8A3wEfAVkAY0FfABfAWQCUwApA2HtBgAAU3BlY2lmeSBhIGBgRk9SIFVQREFURWBgIGNsYXVzZSBmb3IgdGhpcyA6Y2xhc3M6YC5HZW5lcmF0aXZlU2VsZWN0YC4KCiAgICAgICAgRS5nLjo6CgogICAgICAgICAgICBzdG10ID0gc2VsZWN0KFt0YWJsZV0pLndpdGhfZm9yX3VwZGF0ZShub3dhaXQ9VHJ1ZSkKCiAgICAgICAgT24gYSBkYXRhYmFzZSBsaWtlIFBvc3RncmVTUUwgb3IgT3JhY2xlLCB0aGUgYWJvdmUgd291bGQgcmVuZGVyIGEKICAgICAgICBzdGF0ZW1lbnQgbGlrZTo6CgogICAgICAgICAgICBTRUxFQ1QgdGFibGUuYSwgdGFibGUuYiBGUk9NIHRhYmxlIEZPUiBVUERBVEUgTk9XQUlUCgogICAgICAgIG9uIG90aGVyIGJhY2tlbmRzLCB0aGUgYGBub3dhaXRgYCBvcHRpb24gaXMgaWdub3JlZCBhbmQgaW5zdGVhZAogICAgICAgIHdvdWxkIHByb2R1Y2U6OgoKICAgICAgICAgICAgU0VMRUNUIHRhYmxlLmEsIHRhYmxlLmIgRlJPTSB0YWJsZSBGT1IgVVBEQVRFCgogICAgICAgIFdoZW4gY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLCB0aGUgc3RhdGVtZW50IHdpbGwgcmVuZGVyIHdpdGgKICAgICAgICB0aGUgc3VmZml4IGBgRk9SIFVQREFURWBgLiAgIEFkZGl0aW9uYWwgYXJndW1lbnRzIGNhbiB0aGVuIGJlCiAgICAgICAgcHJvdmlkZWQgd2hpY2ggYWxsb3cgZm9yIGNvbW1vbiBkYXRhYmFzZS1zcGVjaWZpYwogICAgICAgIHZhcmlhbnRzLgoKICAgICAgICA6cGFyYW0gbm93YWl0OiBib29sZWFuOyB3aWxsIHJlbmRlciBgYEZPUiBVUERBVEUgTk9XQUlUYGAgb24gT3JhY2xlCiAgICAgICAgIGFuZCBQb3N0Z3JlU1FMIGRpYWxlY3RzLgoKICAgICAgICA6cGFyYW0gcmVhZDogYm9vbGVhbjsgd2lsbCByZW5kZXIgYGBMT0NLIElOIFNIQVJFIE1PREVgYCBvbiBNeVNRTCwKICAgICAgICAgYGBGT1IgU0hBUkVgYCBvbiBQb3N0Z3JlU1FMLiAgT24gUG9zdGdyZVNRTCwgd2hlbiBjb21iaW5lZCB3aXRoCiAgICAgICAgIGBgbm93YWl0YGAsIHdpbGwgcmVuZGVyIGBgRk9SIFNIQVJFIE5PV0FJVGBgLgoKICAgICAgICA6cGFyYW0gb2Y6IFNRTCBleHByZXNzaW9uIG9yIGxpc3Qgb2YgU1FMIGV4cHJlc3Npb24gZWxlbWVudHMKICAgICAgICAgKHR5cGljYWxseSA6Y2xhc3M6YC5Db2x1bW5gIG9iamVjdHMgb3IgYSBjb21wYXRpYmxlIGV4cHJlc3Npb24pIHdoaWNoCiAgICAgICAgIHdpbGwgcmVuZGVyIGludG8gYSBgYEZPUiBVUERBVEUgT0ZgYCBjbGF1c2U7IHN1cHBvcnRlZCBieSBQb3N0Z3JlU1FMCiAgICAgICAgIGFuZCBPcmFjbGUuICBNYXkgcmVuZGVyIGFzIGEgdGFibGUgb3IgYXMgYSBjb2x1bW4gZGVwZW5kaW5nIG9uCiAgICAgICAgIGJhY2tlbmQuCgogICAgICAgIDpwYXJhbSBza2lwX2xvY2tlZDogYm9vbGVhbiwgd2lsbCByZW5kZXIgYGBGT1IgVVBEQVRFIFNLSVAgTE9DS0VEYGAKICAgICAgICAgb24gT3JhY2xlIGFuZCBQb3N0Z3JlU1FMIGRpYWxlY3RzIG9yIGBgRk9SIFNIQVJFIFNLSVAgTE9DS0VEYGAgaWYKICAgICAgICAgYGByZWFkPVRydWVgYCBpcyBhbHNvIHNwZWNpZmllZC4KCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMS4wCgogICAgICAgIDpwYXJhbSBrZXlfc2hhcmU6IGJvb2xlYW4sIHdpbGwgcmVuZGVyIGBgRk9SIE5PIEtFWSBVUERBVEVgYCwKICAgICAgICAgb3IgaWYgY29tYmluZWQgd2l0aCBgYHJlYWQ9VHJ1ZWBgIHdpbGwgcmVuZGVyIGBgRk9SIEtFWSBTSEFSRWBgLAogICAgICAg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dChbdGFibGVdKS5vcmRlcl9ieSh0YWJsZS5jLmlkLCB0YWJsZS5jLm5hbWUpCgogICAgICAgIDpwYXJhbSBcKm9yZGVyX2J5OiBhIHNlcmllcyBvZiA6Y2xhc3M6YC5Db2x1bW5FbGVtZW50YCBjb25zdHJ1Y3RzCiAgICAgICAgIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhbiBPUkRFUiBCWSBjbGF1c2UuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgY29yZV90dXRvcmlhbF9vcmRlcmluZ2AKCiAgICAgICAgTikB2g9hcHBlbmRfb3JkZXJfYnkpAnI4AAAA2gdjbGF1c2Vzci8AAAByLwAAAHIwAAAAckABAAAzCQAAcwIAAAAAEnoZR2VuZXJhdGl2ZVNlbGVjdC5vcmRlcl9ieWMBAAAAAAAAAAIAAAACAAAARwAAAHMOAAAAfABqAHwBjgABAGQBUwApAmGcAQAAcmV0dXJuIGEgbmV3IHNlbGVjdGFibGUgd2l0aCB0aGUgZ2l2ZW4gbGlzdCBvZiBHUk9VUCBCWQogICAgICAgIGNyaXRlcmlvbiBhcHBsaWVkLgoKICAgICAgICBlLmcuOjoKCiAgICAgICAgICAgIHN0bXQgPSBzZWxlY3QoW3RhYmxlLmMubmFtZSwgZnVuYy5tYXgodGFibGUuYy5zdGF0KV0pLlwKICAgICAgICAgICAgZ3JvdXBfYnkodGFibGUuYy5uYW1lKQoKICAgICAgICA6cGFyYW0gXCpncm91cF9ieTogYSBzZXJpZXMgb2YgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgY29uc3RydWN0cwogICAgICAgICB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYW4gR1JPVVAgQlkgY2xhdXNlLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YGNvcmVfdHV0b3JpYWxfb3JkZXJpbmdgCgogICAgICAgIE4pAdoPYXBwZW5kX2dyb3VwX2J5KQJyOAAAAHJJAQAAci8AAAByLwAAAHIwAAAAckEBAABHCQAAcwIAAAAAE3oZR2VuZXJhdGl2ZVNlbGVjdC5ncm91cF9ieWMB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YCBtZXRob2Qgb24gYW55IDpjbGFzczpgLkZyb21DbGF1c2VgLgoKICAgICAgICBBbGwgYXJndW1lbnRzIHdoaWNoIGFjY2VwdCA6Y2xhc3M6YC5DbGF1c2VFbGVtZW50YCBhcmd1bWVudHMgYWxzbwogICAgICAgIGFjY2VwdCBzdHJpbmcgYXJndW1lbnRzLCB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCBhcyBhcHByb3ByaWF0ZSBpbnRvCiAgICAgICAgZWl0aGVyIDpmdW5jOmB0ZXh0KClgIG9yIDpmdW5jOmBsaXRlcmFsX2NvbHVtbigpYCBjb25zdHJ1Y3RzLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YGNvcmV0dXRvcmlhbF9zZWxlY3RpbmdgIC0gQ29yZSBUdXRvcmlhbCBkZXNjcmlwdGlvbiBvZgogICAgICAgICAgICA6ZnVuYzpgLnNlbGVjdGAuCgogICAgICAgIDpwYXJhbSBjb2x1bW5zOgogICAgICAgICAgQSBsaXN0IG9mIDpjbGFzczpgLkNvbHVtbkVsZW1lbnRgIG9yIDpjbGFzczpgLkZyb21DbGF1c2VgCiAgICAgICAgICBvYmplY3RzIHdoaWNoIHdpbGwgZm9ybSB0aGUgY29sdW1ucyBjbGF1c2Ugb2YgdGhlIHJlc3VsdGluZwogICAgICAgICAgc3RhdGVtZW50LiAgIEZvciB0aG9zZSBvYmplY3RzIHRoYXQgYXJlIGluc3RhbmNlcyBvZgogICAgICAgICAgOmNsYXNzOmAuRnJvbUNsYXVzZWAgKHR5cGljYWxseSA6Y2xhc3M6YC5UYWJsZWAgb3IgOmNsYXNzOmAuQWxpYXNgCiAgICAgICAgICBvYmplY3RzKSwgdGhlIDphdHRyOmAuRnJvbUNsYXVzZS5jYCBjb2xsZWN0aW9uIGlzIGV4dHJhY3RlZAogICAgICAgICAgdG8gZm9ybSBhIGNvbGxlY3Rpb24gb2YgOmNsYXNzOmAuQ29sdW1uRWxlbWVudGAgb2JqZWN0cy4KCiAgICAgICAgICBUaGlzIHBhcmFtZXRlciB3aWxsIGFsc28gYWNjZXB0IDpjbGFzczpgLlRleHRgIGNvbnN0cnVjdHMgYXMKICAgICAgICAgIGdpdmVuLCBhcyB3ZWxsIGFzIE9STS1tYXBwZWQgY2xhc3Nlcy4KCiAgICAgICAgICAuLiBub3RlOjoKCiAgICAgICAgICAgIFRoZSA6cGFyYW1yZWY6YC5zZWxlY3QuY29sdW1uc2AgcGFyYW1ldGVyIGlzIG5vdCBhdmFpbGFibGUKICAgICAgICAgICAgaW4gdGhlIG1ldGhvZCBmb3JtIG9mIDpmdW5jOmAuc2VsZWN0YCwgZS5nLgogICAgICAgICAgICA6bWV0aDpgLkZyb21DbGF1c2Uuc2VsZWN0YC4KCiAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmAuU2VsZWN0LmNvbHVtbmAKCiAgICAgICAgICAgIDptZXRoOmAuU2VsZWN0LndpdGhfb25seV9jb2x1bW5zYAoKICAgICAgICA6cGFyYW0gd2hlcmVjbGF1c2U6CiAgICAgICAgICBBIDpjbGFzczpgLkNsYXVzZUVsZW1lbnRgIGV4cHJlc3Npb24gd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGZvcm0gdGhlCiAgICAgICAgICBgYFdIRVJFYGAgY2xhdXNlLiAgIEl0IGlzIHR5cGljYWxseSBwcmVmZXJhYmxlIHRvIGFkZCBXSEVSRQogICAgICAgICAgY3JpdGVyaW9uIHRvIGFuIGV4aXN0aW5nIDpjbGFzczpgLlNlbGVjdGAgdXNpbmcgbWV0aG9kIGNoYWluaW5nCiAgICAgICAgICB3aXRoIDptZXRoOmAuU2VsZWN0LndoZXJlYC4KCiAgICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmAuU2VsZWN0LndoZXJlYAoKICAgICAgICA6cGFyYW0gZnJvbV9vYmo6CiAgICAgICAgICBBIGxpc3Qgb2YgOmNsYXNzOmAuQ2xhdXNlRWxlbWVudGAgb2JqZWN0cyB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZQogICAgICAgICAgYGBGUk9NYGAgY2xhdXNlIG9mIHRoZSByZXN1bHRpbmcgc3RhdGVtZW50LiAgVGhpcyBpcyBlcXVpdmFsZW50CiAgICAgICAgICB0byBjYWxsaW5nIDptZXRoOmAuU2VsZWN0LnNlbGVjdF9mcm9tYCB1c2luZyBtZXRob2QgY2hhaW5pbmcgb24KICAgICAgICAgIGFuIGV4aXN0aW5nIDpjbGFzczpgLlNlbGVjdGAgb2JqZWN0LgoKICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5TZWxlY3Quc2VsZWN0X2Zyb21gIC0gZnVsbCBkZXNjcmlwdGlvbiBvZiBleHBsaWNpdAogICAgICAgICAgICBGUk9NIGNsYXVzZSBzcGVjaWZpY2F0aW9uLgoKICAgICAgICA6cGFyYW0gYXV0b2NvbW1pdDogbGVnYWN5IGF1dG9jb21taXQgcGFyYW1ldGVyLgoKICAgICAgICA6cGFyYW0gYmluZD1Ob25lOgogICAgICAgICAgYW4gOmNsYXNzOmB+LkVuZ2luZWAgb3IgOmNsYXNzOmB+LkNvbm5lY3Rpb25gIGluc3RhbmNlCiAgICAgICAgICB0byB3aGljaCB0aGUKICAgICAgICAgIHJlc3VsdGluZyA6Y2xhc3M6YC5TZWxlY3RgIG9iamVjdCB3aWxsIGJlIGJvdW5kLiAgVGhlCiAgICAgICAgICA6Y2xhc3M6YC5TZWxlY3RgIG9iamVjdCB3aWxsIG90aGVyd2lzZSBhdXRvbWF0aWNhbGx5IGJpbmQgdG8KICAgICAgICAgIHdoYXRldmVyIDpjbGFzczpgfi5iYXNlLkNvbm5lY3RhYmxlYCBpbnN0YW5jZXMgY2FuIGJlIGxvY2F0ZWQgd2l0aGluCiAgICAgICAgICBpdHMgY29udGFpbmVkIDpjbGFzczpgLkNsYXVzZUVsZW1lbnRgIG1lbWJlcnMuCgogICAgICAgIDpwYXJhbSBjb3JyZWxhdGU9VHJ1ZToKICAgICAgICAgIGluZGljYXRlcyB0aGF0IHRoaXMgOmNsYXNzOmAuU2VsZWN0YCBvYmplY3Qgc2hvdWxkIGhhdmUgaXRzCiAgICAgICAgICBjb250YWluZWQgOmNsYXNzOmAuRnJvbUNsYXVzZWAgZWxlbWVudHMgImNvcnJlbGF0ZWQiIHRvIGFuIGVuY2xvc2luZwogICAgICAgICAgOmNsYXNzOmAuU2VsZWN0YCBvYmplY3QuICBJdCBpcyB0eXBpY2FsbHkgcHJlZmVyYWJsZSB0byBzcGVjaWZ5CiAgICAgICAgICBjb3JyZWxhdGlvbnMgb24gYW4gZXhpc3RpbmcgOmNsYXNzOmAuU2VsZWN0YCBjb25zdHJ1Y3QgdXNpbmcKICAgICAgICAgIDptZXRoOmAuU2VsZWN0LmNvcnJlbGF0ZWAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLlNlbGVjdC5jb3JyZWxhdGVgIC0gZnVsbCBkZXNjcmlwdGlvbiBvZiBjb3JyZWxhdGlvbi4KCiAgICAgICAgOnBhcmFtIGRpc3RpbmN0PUZhbHNlOgogICAgICAgICAgd2hlbiBgYFRydWVgYCwgYXBwbGllcyBhIGBgRElTVElOQ1RgYCBxdWFsaWZpZXIgdG8gdGhlIGNvbHVtbnMKICAgICAgICAgIGNsYXVzZSBvZiB0aGUgcmVzdWx0aW5nIHN0YXRlbWVudC4KCiAgICAgICAgICBUaGUgYm9vbGVhbiBhcmd1bWVudCBtYXkgYWxzbyBiZSBhIGNvbHVtbiBleHByZXNzaW9uIG9yIGxpc3QKICAgICAgICAgIG9mIGNvbHVtbiBleHByZXNzaW9ucyAtIHRoaXMgaXMgYSBzcGVjaWFsIGNhbGxpbmcgZm9ybSB3aGljaAogICAgICAgICAgaXMgdW5kZXJzdG9vZCBieSB0aGUgUG9zdGdyZVNRTCBkaWFsZWN0IHRvIHJlbmRlciB0aGUKICAgICAgICAgIGBgRElTVElOQ1QgT04gKDxjb2x1bW5zPilgYCBzeW50YXguCgogICAgICAgICAgYGBkaXN0aW5jdGBgIGlzIGFsc28gYXZhaWxhYmxlIG9uIGFuIGV4aXN0aW5nIDpjbGFzczpgLlNlbGVjdGAKICAgICAgICAgIG9iamVjdCB2aWEgdGhlIDptZXRoOmB+LlNlbGVjdC5kaXN0aW5jdGAgbWV0aG9kLgoKICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5TZWxlY3QuZGlzdGluY3RgCgogICAgICAgIDpwYXJhbSBmb3JfdXBkYXRlPUZhbHNlOgogICAgICAgICAgd2hlbiBgYFRydWVgYCwgYXBwbGllcyBgYEZPUiBVUERBVEVgYCB0byB0aGUgZW5kIG9mIHRoZQogICAgICAgICAgcmVzdWx0aW5nIHN0YXRlbWVudC4KCiAgICAgICAgICBgYGZvcl91cGRhdGVgYCBhY2NlcHRzIHZhcmlvdXMgc3RyaW5nIHZhbHVlcyBpbnRlcnByZXRlZCBieQogICAgICAgICAgc3BlY2lmaWMgYmFja2VuZHMsIGluY2x1ZGluZzoKCiAgICAgICAgICAqIGBgInJlYWQiYGAgLSBvbiBNeVNRTCwgdHJhbnNsYXRlcyB0byBgYExPQ0sgSU4gU0hBUkUgTU9ERWBgOwogICAgICAgICAgICBvbiBQb3N0Z3JlU1FMLCB0cmFuc2xhdGVzIHRvIGBgRk9SIFNIQVJFYGAuCiAgICAgICAgICAqIGBgIm5vd2FpdCJgYCAtIG9uIFBvc3RncmVTUUwgYW5kIE9yYWNsZSwgdHJhbnNsYXRlcyB0bwogICAgICAgICAgICBgYEZPUiBVUERBVEUgTk9XQUlUYGAuCiAgICAgICAgICAqIGBgInJlYWRfbm93YWl0ImBgIC0gb24gUG9zdGdyZVNRTCwgdHJhbnNsYXRlcyB0bwogICAgICAgICAgICBgYEZPUiBTSEFSRSBOT1dBSVRgYC4KCiAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5TZWxlY3Qud2l0aF9mb3JfdXBkYXRlYCAtIGltcHJvdmVkIEFQSSBmb3IKICAgICAgICAgICAgc3BlY2lmeWluZyB0aGUgYGBGT1IgVVBEQVRFYGAgY2xhdXNlLgoKICAgICAgICA6cGFyYW0gZ3JvdXBfYnk6CiAgICAgICAgICBhIGxpc3Qgb2YgOmNsYXNzOmAuQ2xhdXNlRWxlbWVudGAgb2JqZWN0cyB3aGljaCB3aWxsIGNvbXByaXNlIHRoZQogICAgICAgICAgYGBHUk9VUCBCWWBgIGNsYXVzZSBvZiB0aGUgcmVzdWx0aW5nIHNlbGVjdC4gIFRoaXMgcGFyYW1ldGVyCiAgICAgICAgICBpcyB0eXBpY2FsbHkgc3BlY2lmaWVkIG1vcmUgbmF0dXJhbGx5IHVzaW5nIHRoZQogICAgICAgICAgOm1ldGg6YC5TZWxlY3QuZ3JvdXBfYnlgIG1ldGhvZCBvbiBhbiBleGlzdGluZyA6Y2xhc3M6YC5TZWxlY3RgLgoKICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5TZWxlY3QuZ3JvdXBfYnlgCgogICAgICAgIDpwYXJhbSBoYXZpbmc6CiAgICAgICAgICBhIDpjbGFzczpgLkNsYXVzZUVsZW1lbnRgIHRoYXQgd2lsbCBjb21wcmlzZSB0aGUgYGBIQVZJTkdgYCBjbGF1c2UKICAgICAgICAgIG9mIHRoZSByZXN1bHRpbmcgc2VsZWN0IHdoZW4gYGBHUk9VUCBCWWBgIGlzIHVzZWQuICBUaGlzIHBhcmFtZXRlcgogICAgICAgICAgaXMgdHlwaWNhbGx5IHNwZWNpZmllZCBtb3JlIG5hdHVyYWxseSB1c2luZyB0aGUKICAgICAgICAgIDptZXRoOmAuU2VsZWN0LmhhdmluZ2AgbWV0aG9kIG9uIGFuIGV4aXN0aW5nIDpjbGFzczpgLlNlbGVjdGAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLlNlbGVjdC5oYXZpbmdgCgogICAgICAgIDpwYXJhbSBsaW1pdD1Ob25lOgogICAgICAgICAgYSBudW1lcmljYWwgdmFsdWUgd2hpY2ggdXN1YWxseSByZW5kZXJzIGFzIGEgYGBMSU1JVGBgCiAgICAgICAgICBleHByZXNzaW9uIGluIHRoZSByZXN1bHRpbmcgc2VsZWN0LiAgQmFja2VuZHMgdGhhdCBkb24ndAogICAgICAgICAgc3VwcG9ydCBgYExJTUlUYGAgd2lsbCBhdHRlbXB0IHRvIHByb3ZpZGUgc2ltaWxhcgogICAgICAgICAgZnVuY3Rpb25hbGl0eS4gICAgVGhpcyBwYXJhbWV0ZXIgaXMgdHlwaWNhbGx5IHNwZWNpZmllZCBtb3JlCiAgICAgICAgICBuYXR1cmFsbHkgdXNpbmcgdGhlIDptZXRoOmAuU2VsZWN0LmxpbWl0YCBtZXRob2Qgb24gYW4gZXhpc3RpbmcKICAgICAgICAgIDpjbGFzczpgLlNlbGVjdGAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLlNlbGVjdC5saW1pdGAKCiAgICAgICAgOnBhcmFtIG9mZnNldD1Ob25lOgogICAgICAgICAgYSBudW1lcmljIHZhbHVlIHdoaWNoIHVzdWFsbHkgcmVuZGVycyBhcyBhbiBgYE9GRlNFVGBgCiAgICAgICAgICBleHByZXNzaW9uIGluIHRoZSByZXN1bHRpbmcgc2VsZWN0LiAgQmFja2VuZHMgdGhhdCBkb24ndAogICAgICAgICAgc3VwcG9ydCBgYE9GRlNFVGBgIHdpbGwgYXR0ZW1wdCB0byBwcm92aWRlIHNpbWlsYXIKICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuICBUaGlzIHBhcmFtZXRlciBpcyB0eXBpY2FsbHkgc3BlY2lmaWVkIG1vcmUgbmF0dXJhbGx5CiAgICAgICAgICB1c2luZyB0aGUgOm1ldGg6YC5TZWxlY3Qub2Zmc2V0YCBtZXRob2Qgb24gYW4gZXhpc3RpbmcKICAgICAgICAgIDpjbGFzczpgLlNlbGVjdGAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLlNlbGVjdC5vZmZzZXRgCgogICAgICAgIDpwYXJhbSBvcmRlcl9ieToKICAgICAgICAgIGEgc2NhbGFyIG9yIGxpc3Qgb2YgOmNsYXNzOmAuQ2xhdXNlRWxlbWVudGAgb2JqZWN0cyB3aGljaCB3aWxsCiAgICAgICAgICBjb21wcmlzZSB0aGUgYGBPUkRFUiBCWWBgIGNsYXVzZSBvZiB0aGUgcmVzdWx0aW5nIHNlbGVjdC4KICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIHR5cGljYWxseSBzcGVjaWZpZWQgbW9yZSBuYXR1cmFsbHkgdXNpbmcgdGhlCiAgICAgICAgICA6bWV0aDpgLlNlbGVjdC5vcmRlcl9ieWAgbWV0aG9kIG9uIGFuIGV4aXN0aW5nIDpjbGFzczpgLlNlbGVjdGAuCgogICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLlNlbGVjdC5vcmRlcl9ieWAKCiAgICAgICAgOnBhcmFtIHVzZV9sYWJlbHM9RmFsc2U6CiAgICAgICAgICB3aGVu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OjogMS4wLjAKCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgLlNlbGVjdC53aXRoX2hpbnRgCgogICAgICAgICAgICA6bWV0aDouYC5TZWxlY3QucHJlZml4X3dpdGhgIC0gZ2VuZXJpYyBTRUxFQ1QgcHJlZml4aW5nIHdoaWNoIGFsc28KICAgICAgICAgICAgY2FuIHN1aXQgc29tZSBkYXRhYmFzZS1zcGVjaWZpYyBISU5UIHN5bnRheGVzIHN1Y2ggYXMgTXlTUUwKICAgICAgICAgICAgb3B0aW1pemVyIGhpbnRzCgogICAgICAgIE4pAdoJd2l0aF9oaW50KQNyOAAAANoEdGV4dNoMZGlhbGVjdF9uYW1lci8AAAByLwAAAHIwAAAA2hN3aXRoX3N0YXRlbWVudF9oaW50PgwAAHMCAAAAABZ6GlNlbGVjdC53aXRoX3N0YXRlbWVudF9oaW50YwQAAAAAAAAABAAAAAQAAABDAAAAczgAAAB8AWQBawhyHnwABABqAHwDfAJmAmYBNwACAF8AbhZ8AGoBoAJ8AXwDZgJ8AmkBoQF8AF8BZAFTACkCYa8EAABBZGQgYW4gaW5kZXhpbmcgb3Igb3RoZXIgZXhlY3V0aW9uYWwgY29udGV4dCBoaW50IGZvciB0aGUgZ2l2ZW4KICAgICAgICBzZWxlY3RhYmxlIHRvIHRoaXMgOmNsYXNzOmAuU2VsZWN0YC4KCiAgICAgICAgVGhlIHRleHQgb2YgdGhlIGhpbnQgaXMgcmVuZGVyZWQgaW4gdGhlIGFwcHJvcHJpYXRlCiAgICAgICAgbG9jYXRpb24gZm9yIHRoZSBkYXRhYmFzZSBiYWNrZW5kIGluIHVzZSwgcmVsYXRpdmUKICAgICAgICB0byB0aGUgZ2l2ZW4gOmNsYXNzOmAuVGFibGVgIG9yIDpjbGFzczpgLkFsaWFzYCBwYXNzZWQgYXMgdGhlCiAgICAgICAgYGBzZWxlY3RhYmxlYGAgYXJndW1lbnQuIFRoZSBkaWFsZWN0IGltcGxlbWVudGF0aW9uCiAgICAgICAgdHlwaWNhbGx5IHVzZXMgUHl0aG9uIHN0cmluZyBzdWJzdGl0dXRpb24gc3ludGF4CiAgICAgICAgd2l0aCB0aGUgdG9r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aW5nIHRoZSBjb2x1bW5zIG9mIGEKICAgICAgICAgICAgOmNsYXNzOmAuU2VsZWN0YCBvYmplY3QuCgogICAgICAgIE4pAXIgAQAAKQJyOAAAAHKRAAAAci8AAAByLwAAAHIwAAAAcpEAAAAEDQAAcwIAAAAADnoNU2VsZWN0LmNvbHVtbnoTc3FsYWxjaGVteS5zcWwudXRpbGMDAAAAAAAAAAMAAAAHAAAAQwAAAHMsAAAAfACgAHwBagF8AGoCZgF8AGoDZgF0BHwAagWDARcAngJkAXwCaQGOAaEBUwApAmHxAwAAUmV0dXJuIGEgbmV3IDpmdW5jYC5zZWxlY3RgIGNvbnN0cnVjdCB3aXRoIHJlZHVuZGFudGx5CiAgICAgICAgbmFtZWQsIGVxdWl2YWxlbnRseS12YWx1ZWQgY29sdW1ucyByZW1vdmVkIGZyb20gdGhlIGNvbHVtbnMgY2xhdXNlLgoKICAgICAgICAiUmVkdW5kYW50IiBoZXJlIG1lYW5zIHR3byBjb2x1bW5zIHdoZXJlIG9uZSByZWZlcnMgdG8gdGhlCiAgICAgICAgb3RoZXIgZWl0aGVyIGJhc2VkIG9uIGZvcmVpZ24ga2V5LCBvciB2aWEgYSBzaW1wbGUgZXF1YWxpdHkKICAgICAgICBjb21wYXJpc29uIGluIHRoZSBXSEVSRSBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudC4gICBUaGUgcHJpbWFyeSBwdXJwb3NlCiAgICAgICAgb2YgdGhpcyBtZXRob2QgaXMgdG8gYXV0b21hdGljYWxseSBjb25zdHJ1Y3QgYSBzZWxlY3Qgc3RhdGVtZW50CiAgICAgICAgd2l0aCBhbGwgdW5pcXVlbHktbmFtZWQgY29sdW1ucywgd2l0aG91dCB0aGUgbmVlZCB0byB1c2UKICAgICAgICB0YWJsZS1xdWFsaWZpZWQgbGFiZWxzIGFzIDptZXRoOmAuYXBwbHlfbGFiZWxzYCBkb2VzLgoKICAgICAgICBXaGVuIGNvbHVtbnMgYXJlIG9taXR0ZWQgYmFzZWQgb24gZm9yZWlnbiBrZXksIHRoZSByZWZlcnJlZC10bwogICAgICAgIGNvbHVtbiBpcyB0aGUgb25lIHRoYXQncyBrZXB0LiAgV2hlbiBjb2x1bW5zIGFyZSBvbWl0dGVkIGJhc2VkIG9uCiAgICAgICAgV0hFUkUgZXF1aXZhbGVuY2UsIHRoZSBmaXJzdCBjb2x1bW4gaW4gdGhlIGNvbHVtbnMgY2xhdXNlIGlzIHRoZQogICAgICAgIG9uZSB0aGF0J3Mga2VwdC4KCiAgICAgICAgOnBhcmFtIG9ubHlfc3lub255bXM6IHdoZW4gVHJ1ZSwgbGltaXQgdGhlIHJlbW92YWwgb2YgY29sdW1ucwogICAgICAgICB0byB0aG9zZSB3aGljaCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGVxdWl2YWxlbnQuICAgT3RoZXJ3aXNlLAogICAgICAgICBhbGwgY29sdW1ucyB0aGF0IGFyZSBlcXVpdmFsZW50IHRvIGFub3RoZXIgYXJlIHJlbW92ZWQuCgogICAgICAgINoNb25seV9zeW5vbnltcykG2hF3aXRoX29ubHlfY29sdW1uc3LMAAAAcosBAABycAEAAHJgAAAAcmwBAAApA3I4AAAAcowAAABykAEAAHIvAAAAci8AAAByMAAAAHLMAAAAFA0AAHMIAAAAABYEAQQBBgJ6FVNlbGVjdC5yZWR1Y2VfY29sdW1uc2MCAAAAAAAAAAQAAAAEAAAAQwAAAHNOAAAAfACgAKEAAQBnAH0CeDZ8AUQAXS59A3QBfAODAX0DdAJ8A3QDgwJyNnwDagR0BWoGZAGNAX0DfAKgB3wDoQEBAHESVwB8AnwAXwhkAlMAKQNhCAoAAFJldHVybiBhIG5ldyA6ZnVuYzpgLnNlbGVjdGAgY29uc3RydWN0IHdpdGggaXRzIGNvbHVtbnMKICAgICAgICBjbGF1c2UgcmVwbGFjZWQgd2l0aCB0aGUgZ2l2ZW4gY29sdW1ucy4KCiAgICAgICAgVGhpcyBtZXRob2QgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGFzIGlmIHRoZSBvcmlnaW5hbAogICAgICAgIDpmdW5jOmAuc2VsZWN0YCBoYWQgYmVlbiBjYWxsZWQgd2l0aCB0aGUgZ2l2ZW4gY29sdW1ucwogICAgICAgIGNsYXVzZS4gICBJLmUuIGEgc3RhdGVtZW50OjoKCiAgICAgICAgICAgIHMgPSBzZWxlY3QoW3RhYmxlMS5jLmEsIHRhYmxlMS5jLmJdKQogICAgICAgICAgICBzID0gcy53aXRoX29ubHlfY29sdW1ucyhbdGFibGUxLmMuYl0pCgogICAgICAgIHNob3VsZCBiZSBleGFjdGx5IGVxdWl2YWxlbnQgdG86OgoKICAgICAgICAgICAgcyA9IHNlbGVjdChbdGFibGUxLmMuYl0pCgogICAgICAgIFRoaXMgbWVhbnMgdGhhdCBGUk9NIGNsYXVzZXMgd2hpY2ggYXJlIG9ubHkgZGVyaXZlZAogICAgICAgIGZyb20gdGhlIGNvbHVtbiBsaXN0IHdpbGwgYmUgZGlzY2FyZGVkIGlmIHRoZSBuZXcgY29sdW1uCiAgICAgICAgbGlzdCBubyBsb25nZXIgY29udGFpbnMgdGhhdCBGUk9NOjoKCiAgICAgICAgICAgID4+PiB0YWJsZTEgPSB0YWJsZSgndDEnLCBjb2x1bW4oJ2EnKSwgY29sdW1uKCdiJykpCiAgICAgICAgICAgID4+PiB0YWJsZTIgPSB0YWJsZSgndDInLCBjb2x1bW4oJ2EnKSwgY29sdW1uKCdiJykpCiAgICAgICAgICAgID4+PiBzMSA9IHNlbGVjdChbdGFibGUxLmMuYSwgdGFibGUyLmMuYl0pCiAgICAgICAgICAgID4+PiBwcmludCBzMQogICAgICAgICAgICBTRUxFQ1QgdDEuYSwgdDIuYiBGUk9NIHQxLCB0MgogICAgICAgICAgICA+Pj4gczIgPSBzMS53aXRoX29ubHlfY29sdW1ucyhbdGFibGUyLmMuYl0pCiAgICAgICAgICAgID4+PiBwcmludCBzMgogICAgICAgICAgICBTRUxFQ1QgdDIuYiBGUk9NIHQxCgogICAgICAgIFRoZSBwcmVmZXJyZWQgd2F5IHRvIG1haW50YWluIGEgc3BlY2lmaWMgRlJPTSBjbGF1c2UKICAgICAgICBpbiB0aGUgY29uc3RydWN0LCBhc3N1bWluZyBpdCB3b24ndCBiZSByZXByZXNlbnRlZCBhbnl3aGVyZQogICAgICAgIGVsc2UgKGkuZS4gbm90IGluIHRoZSBXSEVSRSBjbGF1c2UsIGV0Yy4pIGlzIHRvIHNldCBpdCB1c2luZwogICAgICAgIDptZXRoOmAuU2VsZWN0LnNlbGVjdF9mcm9tYDo6CgogICAgICAgICAgICA+Pj4gczEgPSBzZWxlY3QoW3RhYmxlMS5jLmEsIHRhYmxlMi5jLmJdKS5cCiAgICAgICAgICAgIC4uLiAgICAgICAgIHNlbGVjdF9mcm9tKHRhYmxlMS5qb2luKHRhYmxlMiwKICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICB0YWJsZTEuYy5hPT10YWJsZTIuYy5hKSkKICAgICAgICAgICAgPj4+IHMyID0gczEud2l0aF9vbmx5X2NvbHVtbnMoW3RhYmxlMi5jLmJdKQogICAgICAgICAgICA+Pj4gcHJpbnQgczIKICAgICAgICAgICAgU0VMRUNUIHQyLmIgRlJPTSB0MSBKT0lOIHQyIE9OIHQxLmE9dDIuYQoKICAgICAgICBDYXJlIHNob3VsZCBhbHNvIGJlIHRha2VuIHRvIHVzZSB0aGUgY29ycmVjdAogICAgICAgIHNldCBvZiBjb2x1bW4gb2JqZWN0cyBwYXNzZWQgdG8gOm1ldGg6YC5TZWxlY3Qud2l0aF9vbmx5X2NvbHVtbnNgLgogICAgICAgIFNpbmNlIHRoZSBtZXRob2QgaXMgZXNzZW50aWFsbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nIHRoZQogICAgICAgIDpmdW5jOmAuc2VsZWN0YCBjb25zdHJ1Y3QgaW4gdGhlIGZpcnN0IHBsYWNlIHdpdGggdGhlIGdpdmVuCiAgICAgICAgY29sdW1ucywgdGhlIGNvbHVtbnMgcGFzc2VkIHRvIDptZXRoOmAuU2VsZWN0LndpdGhfb25seV9jb2x1bW5zYAogICAgICAgIHNob3VsZCB1c3VhbGx5IGJlIGEgc3Vic2V0IG9mIHRob3NlIHdoaWNoIHdlcmUgcGFzc2VkCiAgICAgICAgdG8gdGhlIDpmdW5jOmAuc2VsZWN0YCBjb25zdHJ1Y3QsIG5vdCB0aG9zZSB3aGljaCBhcmUgYXZhaWxhYmxlCiAgICAgICAgZnJvbSB0aGUgYGAuY2BgIGNvbGxlY3Rpb24gb2YgdGhhdCA6ZnVuYzpgLnNlbGVjdGAuICBUaGF0CiAgICAgICAgaXM6OgoKICAgICAgICAgICAgcyA9IHNlbGVjdChbdGFibGUxLmMuYSwgdGFi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YzpgLnNlbGVjdGAgY29uc3RydWN0IHdpdGggdGhlCiAgICAgICAgZ2l2ZW4gRlJPTSBleHByZXNzaW9uCiAgICAgICAgbWVyZ2VkIGludG8gaXRzIGxpc3Qgb2YgRlJPTSBvYmplY3RzLgoKICAgICAgICBFLmcuOjoKCiAgICAgICAgICAgIHRhYmxlMSA9IHRhYmxlKCd0MScsIGNvbHVtbignYScpKQogICAgICAgICAgICB0YWJsZTIgPSB0YWJsZSgndDInLCBjb2x1bW4oJ2InKSkKICAgICAgICAgICAgcyA9IHNlbGVjdChbdGFibGUxLmMuYV0pLlwKICAgICAgICAgICAgICAgIHNlbGVjdF9mcm9tKAogICAgICAgICAgICAgICAgICAgIHRhYmxlMS5qb2luKHRhYmxlMiwgdGFibGUxLmMuYT09dGFibGUyLmMuYikKICAgICAgICAgICAgICAgICkKCiAgICAgICAgVGhlICJmcm9tIiBsaXN0IGlzIGEgdW5pcXVlIHNldCBvbiB0aGUgaWRlbnRpdHkgb2YgZWFjaCBlbGVtZW50LAogICAgICAgIHNvIGFkZGluZyBhbiBhbHJlYWR5IHByZXNlbnQgOmNsYXNzOmAuVGFibGVgIG9yIG90aGVyIHNlbGVjdGFibGUKICAgICAgICB3aWxsIGhhdmUgbm8gZWZmZWN0LiAgIFBhc3NpbmcgYSA6Y2xhc3M6YC5Kb2luYCB0aGF0IHJlZmVycwogICAgICAgIHRvIGFuIGFscmVhZHkgcHJlc2VudCA6Y2xhc3M6YC5UYWJsZWAgb3Igb3RoZXIgc2VsZWN0YWJsZSB3aWxsIGhhdmUKICAgICAgICB0aGUgZWZmZWN0IG9mIGNvbmNlYWxpbmcgdGhlIHByZXNlbmNlIG9mIHRoYXQgc2VsZWN0YWJsZSBhcwogICAgICAgIGFuIGluZGl2aWR1YWwgZWxlbWVudCBpbiB0aGUgcmVuZGVyZWQgRlJPTSBsaXN0LCBpbnN0ZWFkCiAgICAgICAgcmVuZGVyaW5nIGl0IGludG8gYSBKT0lOIGNsYXVzZS4KCiAgICAgICAgV2hpbGUgdGhlIHR5cGljYWwgcHVycG9zZSBvZiA6bWV0aDpgLlNlbGVjdC5zZWxlY3RfZnJvbWAgaXMgdG8KICAgICAgICByZXBsYWNlIHRoZSBkZWZhdWx0LCBkZXJpdmVkIEZST00gY2xhdXNlIHdpdGggYSBqb2luLCBpdCBjYW4KICAgICAgICBhbHNvIGJlIGNhbGxlZCB3aXRoIGluZGl2aWR1YWwgdGFibGUgZWxlbWVudHMsIG11bHRpcGxlIHRpbWVzCiAgICAgICAgaWYgZGVzaXJlZCwgaW4gdGhlIGNhc2UgdGhhdCB0aGUgRlJPTSBjbGF1c2UgY2Fubm90IGJlIGZ1bGx5CiAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSBjb2x1bW5zIGNsYXVzZTo6CgogICAgICAgICAgICBzZWxlY3QoW2Z1bmMuY291bnQoJyonKV0pLnNlbGVjdF9mcm9tKHRhYmxlMSkKCiAgICAgICAgTikB2gthcHBlbmRfZnJvbSkCcjgAAAByaAAAAHIvAAAAci8AAAByMAAAANoLc2VsZWN0X2Zyb22kDQAAcwIAAAAAIHoSU2VsZWN0LnNlbGVjdF9mcm9tYwEAAAAAAAAAAgAAAAQAAABHAAAAcz4AAABkAXwAXwB8AXIefAFkAhkAZANrCHIeZAR8AF8Bbhx0AnwAagGDAaADZAVkBoQAfAFEAIMBoQF8AF8BZANTACkHYWQHAAByZXR1cm4gYSBuZXcgOmNsYXNzOmAuU2VsZWN0YCB3aGljaCB3aWxsIGNvcnJlbGF0ZSB0aGUgZ2l2ZW4gRlJPTQogICAgICAgIGNsYXVzZXMgdG8gdGhhdCBvZiBhbiBlbmNsb3NpbmcgOmNsYXNzOmAuU2VsZWN0YC4KCiAgICAgICAgQ2FsbGluZyB0aGlzIG1ldGhvZCB0dXJucyBvZmYgdGhlIDpjbGFzczpgLlNlbGVjdGAgb2JqZWN0J3MKICAgICAgICBkZWZhdWx0IGJlaGF2aW9yIG9mICJhdXRvLWNvcnJlbGF0aW9uIi4gIE5vcm1hbGx5LCBGUk9NIGVsZW1lbnRzCiAgICAgICAgd2hpY2ggYXBwZWFyIGluIGEgOmNsYXNzOmAuU2VsZWN0YCB0aGF0IGVuY2xvc2VzIHRoaXMgb25lIHZpYQogICAgICAgIGl0cyA6dGVybTpgV0hFUkUgY2xhdXNlYCwgT1JERVIgQlksIEhBVklORyBvcgogICAgICAgIDp0ZXJtOmBjb2x1bW5zIGNsYXVzZWAgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhpcyA6Y2xhc3M6YC5TZWxlY3RgCiAgICAgICAgb2JqZWN0J3MgOnRlcm06YEZST00gY2xhdXNlYC4KICAgICAgICBTZXR0aW5nIGFuIGV4cGxpY2l0IGNvcnJlbGF0aW9uIGNvbGxlY3Rpb24gdXNpbmcgdGhlCiAgICAgICAgOm1ldGg6YC5TZWxlY3QuY29ycmVsYXRlYCBtZXRob2QgcHJvdmlkZXMgYSBmaXhlZCBsaXN0IG9mIEZST00gb2JqZWN0cwogICAgICAgIHRoYXQgY2FuIHBvdGVudGlhbGx5IHRha2UgcGxhY2UgaW4gdGhpcyBwcm9jZXNzLgoKICAgICAgICBXaGVuIDptZXRoOmAuU2VsZWN0LmNvcnJlbGF0ZWAgaXMgdXNlZCB0byBhcHBseSBzcGVjaWZpYyBGUk9NIGNsYXVzZXMKICAgICAgICBmb3IgY29ycmVsYXRpb24sIHRoZSBGUk9NIGVsZW1lbnRzIGJlY29tZSBjYW5kaWRhdGVzIGZvcgogICAgICAgIGNvcnJlbGF0aW9uIHJlZ2FyZGxlc3Mgb2YgaG93IGRlZXBseSBuZXN0ZWQgdGhpcyA6Y2xhc3M6YC5TZWxlY3RgCiAgICAgICAgb2JqZWN0IGlzLCByZWxhdGl2ZSB0byBhbiBlbmNsb3NpbmcgOmNsYXNzOmAuU2VsZWN0YCB3aGljaCByZWZlcnMgdG8KICAgICAgICB0aGUgc2FtZSBGUk9NIG9iamVjdC4gIFRoaXMgaXMgaW4gY29udHJhc3QgdG8gdGhlIGJlaGF2aW9yIG9mCiAgICAgICAgImF1dG8tY29ycmVsYXRpb24iIHdoaWNoIG9ubHkgY29ycmVsYXRlcyB0byBhbiBpbW1lZGlhdGUgZW5jbG9zaW5nCiAgICAgICAgOmNsYXNzOmAuU2VsZWN0YC4gICBNdWx0aS1sZXZlbCBjb3JyZWxhdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGxpbmsKICAgICAgICBiZXR3ZWVuIGVuY2xvc2VkIGFuZCBlbmNsb3NpbmcgOmNsYXNzOmAuU2VsZWN0YCBpcyBhbHdheXMgdmlhCiAgICAgICAgYXQgbGVhc3Qgb25lIFdIRVJFL09SREVSIEJZL0hBVklORy9jb2x1bW5zIGNsYXVzZSBpbiBvcmRlciBmb3IKICAgICAgICBjb3JyZWxhdGlvbiB0byB0YWtlIHBsYWNlLgoKICAgICAgICBJZiBgYE5vbmVgYCBpcyBwYXNzZWQsIHRoZSA6Y2xhc3M6YC5TZWxlY3RgIG9iamVjdCB3aWxsIGNvcnJlbGF0ZQogICAgICAgIG5vbmUgb2YgaXRzIEZST00gZW50cmllcywgYW5kIGFsbCB3aWxsIHJlbmRlciB1bmNvbmRpdGlvbmFsbHkKICAgICAgICBpbiB0aGUgbG9jYWwgRlJPTSBjbGF1c2UuCgogICAgICAgIDpwYXJhbSBcKmZyb21jbGF1c2VzOiBhIGxpc3Qgb2Ygb25lIG9yIG1vcmUgOmNsYXNzOmAuRnJvbUNsYXVzZWAKICAgICAgICAgY29uc3RydWN0cywgb3Igb3RoZXIgY29tcGF0aWJsZSBjb25zdHJ1Y3RzIChpLmUuIE9STS1tYXBwZWQKICAgICAgICAgY2xhc3NlcykgdG8gYmVjb21lIHBhcnQgb2YgdGhlIGNvcnJlbGF0ZSBjb2xsZWN0aW9uLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmAuU2VsZWN0LmNvcnJlbGF0ZV9leGNlcHRgCgogICAgICAgICAgICA6cmVmOmBjb3JyZWxhdGVkX3N1YnF1ZXJpZXNgCgogICAgICAgIEZyAQAAAE5yLwAAAGMBAAAAAAAAAAIAAAADAAAAcwAAAHMWAAAAfABdDn0BdAB8AYMBVgABAHECZABTACkBTikBcjEAAAApAnJcAAAAcu4AAAByLwAAAHIvAAAAcjAAAAByyQAAAPQNAABzAgAAAAQAeiNTZWxlY3QuY29ycmVsYXRlLjxsb2NhbHM+LjxnZW5leHByPikEclABAABygAEAAHKUAAAAchUBAAApAnI4AAAA2gtmcm9tY2xhdXNlc3IvAAAAci8AAAByMAAAAHLzAAAAxg0AAHMKAAAAACkGARABCAIKAXoQU2VsZWN0LmNvcnJlbGF0ZWMBAAAAAAAAAAIAAAAEAAAARwAAAHNCAAAAZAF8AF8AfAFyHnwBZAIZAGQDawhyHmQEfABfAW4gdAJ8AGoBcChkBIMBoANkBWQGhAB8AUQAgwGhAXwAXwFkA1MAKQdhhQMAAHJldHVybiBhIG5ldyA6Y2xhc3M6YC5TZWxlY3RgIHdoaWNoIHdpbGwgb21pdCB0aGUgZ2l2ZW4gRlJPTQogICAgICAgIGNsYXVzZXMgZnJvbSB0aGUgYXV0by1jb3JyZWxhdGlvbiBwcm9jZXNzLgoKICAgICAgICBDYWxsaW5nIDptZXRoOmAuU2VsZWN0LmNvcnJlbGF0ZV9leGNlcHRgIHR1cm5zIG9mZiB0aGUKICAgICAgICA6Y2xhc3M6YC5TZWxlY3RgIG9iamVjdCdzIGRlZmF1bHQgYmVoYXZpb3Igb2YKICAgICAgICAiYXV0by1jb3JyZWxhdGlvbiIgZm9yIHRoZSBnaXZlbiBGUk9NIGVsZW1lbnRzLiAgQW4gZWxlbWVudAogICAgICAgIHNwZWNpZmllZCBoZXJlIHdpbGwgdW5jb25kaXRpb25hbGx5IGFwcGVhciBpbiB0aGUgRlJPTSBsaXN0LCB3aGlsZQogICAgICAgIGFsbCBvdGhlciBGUk9NIGVsZW1lbnRzIHJlbWFpbiBzdWJqZWN0IHRvIG5vcm1hbCBhdXRvLWNvcnJlbGF0aW9uCiAgICAgICAgYmVoYXZpb3JzLgoKICAgICAgICBJZiBgYE5vbmVgYCBpcyBwYXNzZWQsIHRoZSA6Y2xhc3M6YC5TZWxlY3RgIG9iamVjdCB3aWxsIGNvcnJlbGF0ZQogICAgICAgIGFsbCBvZiBpdHMgRlJPTSBlbnRyaWVzLgoKICAgICAgICA6cGFyYW0gXCpmcm9tY2xhdXNlczogYSBsaXN0IG9mIG9uZSBvciBtb3JlIDpjbGFzczpgLkZyb21DbGF1c2VgCiAgICAgICAgIGNvbnN0cnVjdHMsIG9yIG90aGVyIGNvbXBhdGlibGUgY29uc3RydWN0cyAoaS5lLiBPUk0tbWFwcGVkCiAgICAgICAgIGNsYXNzZXMpIHRvIGJlY29tZSBwYXJ0IG9mIHRoZSBjb3JyZWxhdGUtZXhjZXB0aW9uIGNvbGxlY3Rpb24uCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5TZWxlY3QuY29ycmVsYXRlYAoKICAgICAg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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 19
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
annotation.cpython-37.pyc
5.57 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
base.cpython-37.pyc
23.16 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
compiler.cpython-37.pyc
93.70 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
crud.cpython-37.pyc
15.01 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ddl.cpython-37.pyc
36.50 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
default_comparator.cpython-37.pyc
7.21 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
dml.cpython-37.pyc
31.66 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
elements.cpython-37.pyc
146.00 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
expression.cpython-37.pyc
6.47 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
functions.cpython-37.pyc
32.50 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
naming.cpython-37.pyc
4.67 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
operators.cpython-37.pyc
45.37 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schema.cpython-37.pyc
142.91 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
selectable.cpython-37.pyc
122.08 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
sqltypes.cpython-37.pyc
86.91 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
type_api.cpython-37.pyc
47.55 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
util.cpython-37.pyc
23.63 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
visitors.cpython-37.pyc
10.00 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
3.02 KB
lrw-r--r--
2023-11-14 14:32:36
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).