REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 76.03 KB
Close
//opt/hc_python/lib/python3.12/site-packages/alembic/operations/__pycache__/base.cpython-312.pyc
Text
Base64
yw0NCgAAAAAAku9nvSIBAOMAAAAAAAAAAAAAAAAGAAAAAAAAAfNMAwAAlwBkAGQBbABtAVoBAQBkAGQCbAJtA1oDAQBkAGQDbARaBGQAZANsBVoFZABkBGwGbQdaBwEAZABkBWwGbQhaCAEAZABkBmwGbQlaCQEAZABkB2wGbQpaCgEAZABkCGwGbQtaCwEAZABkCWwGbQxaDAEAZABkCmwGbQ1aDQEAZABkC2wGbQ5aDgEAZABkDGwGbQ9aDwEAZABkDWwGbRBaEAEAZABkDmwGbRFaEQEAZABkD2wGbRJaEgEAZABkEGwGbRNaEwEAZABkEWwGbRRaFAEAZABkEmwGbRVaFQEAZABkE2wGbRZaFgEAZABkFGwXbRhaGAEAZBVkFmwZbRpaGgEAZBVkF2wZbRtaGwEAZBhkGWwZbRxaHAEAZBhkGmwcbR1aHQEAZBhkG2webR9aHwEAZBhkHGwebSBaIAEAZBhkHWwebSFaIQEAZBhkHmwibSNaIwEAZRRytGQAZB9sBm0kWiQBAGQAZCBsJW0mWiYBAGQAZCFsJ20oWigBAGQAZCJsKW0qWioBAGQAZCNsK20sWiwBAGQAZCRsK20tWi0BAGQAZCVsK20uWi4BAGQAZCZsL20wWjABAGQAZCdsL20xWjEBAGQAZChsL20yWjIBAGQAZClsL20zWjMBAGQAZCpsNG01WjUBAGQVZCtsGm02WjYBAGQVZCxsN204WjgBAGQVZC1sN205WjkBAGQVZC5sN206WjoBAGQVZC9sN207WjsBAGQVZDBsN208WjwBAGQVZDFsN209Wj0BAGQVZDJsN20+Wj4BAGQVZDNsN20/Wj8BAGQVZDRsN21AWkABAGQVZDVsN21BWkEBAGQVZDZsN21CWkIBAGQVZDdsN21DWkMBAGQVZDhsN21EWkQBAGQVZDlsN21FWkUBAGQVZDpsN21GWkYBAGQYZDtsR21IWkgBAGQYZDxsSW1KWkoBAGQ9WksCAGUVZD6rAQAAAAAAAFpMAgBlFWQ/ZQlkQGUHZgIZAAAArEGrAgAAAAAAAFpNAgBHAGRChABkQ2UcapwAAAAAAAAAAAAAAAAAAAAAAACrAwAAAAAAAFpPAgBHAGREhABkRWVPqwMAAAAAAABaUAIARwBkRoQAZEdlT6sDAAAAAAAAWlF5AylI6QAAAAApAdoLYW5ub3RhdGlvbnMpAdoOY29udGV4dG1hbmFnZXJOKQHaA0FueSkB2glBd2FpdGFibGUpAdoIQ2FsbGFibGUpAdoERGljdCkB2ghJdGVyYXRvcikB2gRMaXN0KQHaB01hcHBpbmcpAdoITm9SZXR1cm4pAdoIT3B0aW9uYWwpAdoIb3ZlcmxvYWQpAdoIU2VxdWVuY2UpAdoFVHVwbGUpAdoEVHlwZSkB2g1UWVBFX0NIRUNLSU5HKQHaB1R5cGVWYXIpAdoFVW5pb26pAdoEY29udukBAAAAKQHaBWJhdGNoKQHaCXNjaGVtYW9iaukCAAAAKQHaBHV0aWwpAdoLc3FsYV9jb21wYXQpAdoXZm9ybWF0YW5ub3RhdGlvbl9md2RyZWYpAdoVaW5zcGVjdF9mb3JtYXRhcmdzcGVjKQHaFmluc3BlY3RfZ2V0ZnVsbGFyZ3NwZWMpAdoSX2xpdGVyYWxfYmluZHBhcmFtKQHaB0xpdGVyYWwpAdoFVGFibGUpAdoKQ29ubmVjdGlvbikB2gpFeGVjdXRhYmxlKQHaDUNvbHVtbkVsZW1lbnQpAdoLVGFibGVDbGF1c2UpAdoKVGV4dENsYXVzZSkB2gZDb2x1bW4pAdoIQ29tcHV0ZWQpAdoISWRlbnRpdHkpAdoKU2NoZW1hSXRlbSkB2gpUeXBlRW5naW5lKQHaE0JhdGNoT3BlcmF0aW9uc0ltcGwpAdoLQWRkQ29sdW1uT3ApAdoPQWRkQ29uc3RyYWludE9wKQHaDUFsdGVyQ29sdW1uT3ApAdoMQWx0ZXJUYWJsZU9wKQHaDEJ1bGtJbnNlcnRPcCkB2g1DcmVhdGVJbmRleE9wKQHaFENyZWF0ZVRhYmxlQ29tbWVudE9wKQHaDUNyZWF0ZVRhYmxlT3ApAdoMRHJvcENvbHVtbk9wKQHaEERyb3BDb25zdHJhaW50T3ApAdoLRHJvcEluZGV4T3ApAdoSRHJvcFRhYmxlQ29tbWVudE9wKQHaC0Ryb3BUYWJsZU9wKQHaDEV4ZWN1dGVTUUxPcCkB2hBNaWdyYXRlT3BlcmF0aW9uKQHaC0RlZmF1bHRJbXBsKQHaEE1pZ3JhdGlvbkNvbnRleHQpAtoKT3BlcmF0aW9uc9oPQmF0Y2hPcGVyYXRpb25z2gJfVNoCX0MuKQHaBWJvdW5kYwAAAAAAAAAA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IGFyZSBwcmVzZW50IHdoaWNoIHJlcXVpcmUKICAgICAgICB0aGlzIGZvcm0sIGUuZy4gYW55dGhpbmcgb3RoZXIgdGhhbiBgYGFkZF9jb2x1bW4oKWBgLiAgIFRoZSBiYXRjaAogICAgICAgIG9wZXJhdGlvbiBvbiBvdGhlciBiYWNrZW5kcyB3aWxsIHByb2NlZWQgdXNpbmcgc3RhbmRhcmQgQUxURVIgVEFCTEUKICAgICAgICBvcGVyYXRpb25zLgoKICAgICAgICBUaGUgbWV0aG9kIGlzIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIHdoaWNoIHJldHVybnMgYW4gaW5zdGFuY2UKICAgICAgICBvZiA6Y2xhc3M6YC5CYXRjaE9wZXJhdGlvbnNgOyB0aGlzIG9iamVjdCBpcyB0aGUgc2FtZSBhcwogICAgICAgIDpjbGFzczpgLk9wZXJhdGlvbnNgIGV4Y2VwdCB0aGF0IHRhYmxlIG5hbWVzIGFuZCBzY2hlbWEgbmFtZXMKICAgICAgICBhcmUgb21pdHRlZC4gIEUuZy46OgoKICAgICAgICAgICAgd2l0aCBvcC5iYXRjaF9hbHRlcl90YWJsZSgic29tZV90YWJsZSIpIGFzIGJhdGNoX29wOgogICAgICAgICAgICAgICAgYmF0Y2hfb3AuYWRkX2NvbHVtbihDb2x1bW4oImZvbyIsIEludGVnZXIpKQogICAgICAgICAgICAgICAgYmF0Y2hfb3AuZHJvcF9jb2x1bW4oImJhciIpCgogICAgICAgIFRoZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgY29udGV4dCBtYW5hZ2VyIGFyZSBpbnZva2VkIGF0IG9uY2UKICAgICAgICB3aGVuIHRoZSBjb250ZXh0IGlzIGVuZGVkLiAgIFdoZW4gcnVuIGFnYWluc3QgU1FMaXRlLCBpZiB0aGUKICAgICAgICBtaWdyYXRpb25zIGluY2x1ZGUgb3BlcmF0aW9ucyBub3Qgc3VwcG9ydGVkIGJ5IFNRTGl0ZSdzIEFMVEVSIFRBQkxFLAogICAgICAgIHRoZSBlbnRpcmUgdGFibGUgd2lsbCBiZSBjb3BpZWQgdG8gYSBuZXcgb25lIHdpdGggdGhlIG5ldwogICAgICAgIHNwZWNpZmljYXRpb24sIG1vdmluZyBhbGwgZGF0YSBhY3Jvc3MgYXMgd2VsbC4KCiAgICAgICAgVGhlIGNvcHkgb3BlcmF0aW9uIGJ5IGRlZmF1bHQgdXNlcyByZWZsZWN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50CiAgICAgICAgc3RydWN0dXJlIG9mIHRoZSB0YWJsZSwgYW5kIHRoZXJlZm9yZSA6bWV0aDpgLmJhdGNoX2FsdGVyX3RhYmxlYAogICAgICAgIGluIHRoaXMgbW9kZSByZXF1aXJlcyB0aGF0IHRoZSBtaWdyYXRpb24gaXMgcnVuIGluICJvbmxpbmUiIG1vZGUuCiAgICAgICAgVGhlIGBgY29weV9mcm9tYGAgcGFyYW1ldGVyIG1heSBiZSBwYXNzZWQgd2hpY2ggcmVmZXJzIHRvIGFuIGV4aXN0aW5nCiAgICAgICAgOmNsYXNzOmAuVGFibGVgIG9iamVjdCwgd2hpY2ggd2lsbCBieXBhc3MgdGhpcyByZWZsZWN0aW9uIHN0ZXAuCgogICAgICAgIC4uIG5vdGU6OiAgVGhlIHRhYmxlIGNvcHkgb3BlcmF0aW9uIHdpbGwgY3VycmVudGx5IG5vdCBjb3B5CiAgICAgICAgICAgQ0hFQ0sgY29uc3RyYWludHMsIGFuZCBtYXkgbm90IGNvcHkgVU5JUVVFIGNvbnN0cmFpbnRzIHRoYXQgYXJlCiAgICAgICAgICAgdW5uYW1lZCwgYXMgaXMgcG9zc2libGUgb24gU1FMaXRlLiAgIFNlZSB0aGUgc2VjdGlvbgogICAgICAgICAgIDpyZWY6YHNxbGl0ZV9iYXRjaF9jb25zdHJhaW50c2AgZm9yIHdvcmthcm91bmRzLgoKICAgICAgICA6cGFyYW0gdGFibGVfbmFtZTogbmFtZSBvZiB0YWJsZQogICAgICAgIDpwYXJhbSBzY2hlbWE6IG9wdGlvbmFsIHNjaGVtYSBuYW1lLgogICAgICAgIDpwYXJhbSByZWNyZWF0ZTogdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzIHRoZSB0YWJsZSBzaG91bGQgYmUKICAgICAgICAgcmVjcmVhdGVkLiBBdCBpdHMgZGVmYXVsdCBvZiBgYCJhdXRvImBgLCB0aGUgU1FMaXRlIGRpYWxlY3Qgd2lsbAogICAgICAgICByZWNyZWF0ZSB0aGUgdGFibGUgaWYgYW55IG9wZXJhdGlvbnMgb3RoZXIgdGhhbiBgYGFkZF9jb2x1bW4oKWBgLAogICAgICAgICBgYGNyZWF0ZV9pbmRleCgpYGAsIG9yIGBgZHJvcF9pbmRleCgpYGAgYXJlCiAgICAgICAgIHByZXNlbnQuIE90aGVyIG9wdGlvbnMgaW5jbHVkZSBgYCJhbHdheXMiYGAgYW5kIGBgIm5ldmVyImBgLgogICAgICAgIDpwYXJhbSBjb3B5X2Zyb206IG9wdGlvbmFsIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QKICAgICAgICAgdGhhdCB3aWxsIGFjdCBhcyB0aGUgc3RydWN0dXJlIG9mIHRoZSB0YWJsZSBiZWluZyBjb3BpZWQuICBJZiBvbWl0dGVkLAogICAgICAgICB0YWJsZSByZWZsZWN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgdGFibGUuCgogICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YGJhdGNoX29mZmxpbmVfbW9kZWAKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgfi5PcGVyYXRpb25zLmJhdGNoX2FsdGVyX3RhYmxlLnJlZmxlY3RfYXJnc2AKCiAgICAgICAgICAgIDpwYXJhbXJlZjpgfi5PcGVyYXRpb25zLmJhdGNoX2FsdGVyX3RhYmxlLnJlZmxlY3Rfa3dhcmdzYAoKICAgICAgICA6cGFyYW0gcmVmbGVjdF9hcmdzOiBhIHNlcXVlbmNlIG9mIGFkZGl0aW9uYWwgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhdAogICAgICAgICB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHRhYmxlIHN0cnVjdHVyZSBiZWluZyByZWZsZWN0ZWQgLyBjb3BpZWQ7CiAgICAgICAgIHRoaXMgbWF5IGJlIHVzZWQgdG8gcGFzcyBjb2x1bW4gYW5kIGNvbnN0cmFpbnQgb3ZlcnJpZGVzIHRvIHRoZQogICAgICAgICB0YWJsZSB0aGF0IHdpbGwgYmUgcmVmbGVjdGVkLCBpbiBsaWV1IG9mIHBhc3NpbmcgdGhlIHdob2xlCiAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCB1c2luZwogICAgICAgICA6cGFyYW1yZWY6YH4uT3BlcmF0aW9ucy5iYXRjaF9hbHRlcl90YWJsZS5jb3B5X2Zyb21gLgogICAgICAgIDpwYXJhbSByZWZsZWN0X2t3YXJnczogYSBkaWN0aW9uYXJ5IG9mIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKICAgICAgICAgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHRhYmxlIHN0cnVjdHVyZSBiZWluZyBjb3BpZWQ7IHRoaXMgbWF5IGJlCiAgICAgICAgIHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIHRhYmxlIGFuZCByZWZsZWN0aW9uIG9wdGlvbnMgdG8gdGhlIHRhYmxlIHRoYXQKICAgICAgICAgd2lsbCBiZSByZWZsZWN0ZWQsIGluIGxpZXUgb2YgcGFzc2luZyB0aGUgd2hvbGUKICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIHVzaW5nCiAgICAgICAgIDpwYXJhbXJlZjpgfi5PcGVyYXRpb25zLmJhdGNoX2FsdGVyX3RhYmxlLmNvcHlfZnJvbWAuCiAgICAgICAgOnBhcmFtIHRhYmxlX2FyZ3M6IGEgc2VxdWVuY2Ugb2YgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGF0CiAgICAgICAgIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgbmV3IDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCB3aGVuCiAgICAgICAgIGNyZWF0ZWQsIGluIGFkZGl0aW9uIHRvIHRob3NlIGNvcGllZCBmcm9tIHRoZSBzb3VyY2UgdGFibGUuCiAgICAgICAgIFRoaXMgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzIHN1Y2ggYXMgQ0hFQ0sKICAgICAgICAgY29uc3RyYWludHMgdGhhdCBtYXkgbm90IGJlIHJlZmxlY3RlZC4KICAgICAgICA6cGFyYW0gdGFibGVfa3dhcmdzOiBhIGRpY3Rpb25hcnkgb2YgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cwogICAgICAgICB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgbmV3IDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYAogICAgICAgICB3aGVuIGNyZWF0ZWQsIGluIGFkZGl0aW9uIHRvIHRob3NlIGNvcGllZCBmcm9tIHRoZSBzb3VyY2UgdGFibGUuCiAgICAgICAgIFRoaXMgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBmb3IgYWRkaXRpb25hbCB0YWJsZSBvcHRpb25zIHRoYXQgbWF5CiAgICAgICAgIG5vdCBiZSByZWZsZWN0ZWQuCiAgICAgICAgOnBhcmFtIG5hbWluZ19jb252ZW50aW9uOiBhIG5hbWluZyBjb252ZW50aW9uIGRpY3Rpb25hcnkgb2YgdGhlIGZvcm0KICAgICAgICAgZGVzY3JpYmVkIGF0IDpyZWY6YGF1dG9nZW5fbmFtaW5nX2NvbnZlbnRpb25zYCB3aGljaCB3aWxsIGJlIGFwcGxpZWQKICAgICAgICAgdG8gdGhlIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLk1ldGFEYXRhYCBkdXJpbmcgdGhlIHJlZmxlY3Rpb24KICAgICAgICAgcHJvY2Vzcy4gIFRoaXMgaXMgdHlwaWNhbGx5IHJlcXVpcmVkIGlmIG9uZSB3YW50cyB0byBkcm9wIFNRTGl0ZQogICAgICAgICBjb25zdHJhaW50cywgYXMgdGhlc2UgY29uc3RyYWludHMgd2lsbCBub3QgaGF2ZSBuYW1lcyB3aGVuCiAgICAgICAgIHJlZmxlY3RlZCBvbiB0aGlzIGJhY2tlbmQuICBSZXF1aXJlcyBTUUxBbGNoZW15ICoqMC45LjQqKiBvciBncmVhdGVyLgoKICAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6cmVmOmBkcm9wcGluZ19zcWxpdGVfZm9yZWlnbl9rZXlzYAoKICAgICAgICA6cGFyYW0gcGFydGlhbF9yZW9yZGVyaW5nOiBhIGxpc3Qgb2YgdHVwbGVzLCBlYWNoIHN1Z2dlc3RpbmcgYSBkZXNpcmVkCiAgICAgICAgIG9yZGVyaW5nIG9mIHR3byBvciBtb3JlIGNvbHVtbnMgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgdGFibGUuICBSZXF1aXJlcwogICAgICAgICB0aGF0IDpwYXJhbXJlZjpgLmJhdGNoX2FsdGVyX3RhYmxlLnJlY3JlYXRlYCBpcyBzZXQgdG8gYGAiYWx3YXlzImBgLgogICAgICAgICBFeGFtcGxlcywgZ2l2ZW4gYSB0YWJsZSB3aXRoIGNvbHVtbnMgImEiLCAiYiIsICJjIiwgYW5kICJkIjoKCiAgICAgICAgIFNwZWNpZnkgdGhlIG9yZGVyIG9mIGFsbCBjb2x1bW5zOjoKCiAgICAgICAgICAgIHdpdGggb3AuYmF0Y2hfYWx0ZXJfdGFibGUoCiAgICAgICAgICAgICAgICAic29tZV90YWJsZSIsCiAgICAgICAgICAgICAgICByZWNyZWF0ZT0iYWx3YXlzIiwKICAgICAgICAgICAgICAgIHBhcnRpYWxfcmVvcmRlcmluZz1bKCJjIiwgImQiLCAiYSIsICJiIildLAogICAgICAgICAgICApIGFzIGJhdGNoX29wOgogICAgICAgICAgICAgICAgcGFzcwoKICAgICAgICAgRW5zdXJlICJkIiBhcHBlYXJzIGJlZm9yZSAiYyIsIGFuZCAiYiIsIGFwcGVhcnMgYmVmb3JlICJhIjo6CgogICAgICAgICAgICB3aXRoIG9wLmJhdGNoX2FsdGVyX3RhYmxlKAogICAgICAgICAgICAgICAgInNvbWVfdGFibGUiLAogICAgICAgICAgICAgICAgcmVjcmVhdGU9ImFsd2F5cyIsCiAgICAgICAgICAgICAgICBwYXJ0aWFsX3Jlb3JkZXJpbmc9WygiZCIsICJjIiksICgiYiIsICJhIildLAogICAgICAgICAgICApIGFzIGJhdGNoX29wOgogICAgICAgICAgICAgICAgcGFzcwoKICAgICAgICAgVGhlIG9yZGVyaW5nIG9mIGNvbHVtbnMgbm90IGluY2x1ZGVkIGluIHRoZSBwYXJ0aWFsX3Jlb3JkZXJpbmcKICAgICAgICAgc2V0IGlzIHVuZGVmaW5l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aXQuCgogICAgICAgIFRoaXMgZmVhdHVyZSBjb21iaW5lcyB3aXRoIHRoZSBTUUxBbGNoZW15IGBgbmFtaW5nX2NvbnZlbnRpb25gYCBmZWF0dXJlCiAgICAgICAgdG8gZGlzYW1iaWd1YXRlIGNvbnN0cmFpbnQgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgaGFkIG5hbWluZwogICAgICAgIGNvbnZlbnRpb25zIGFwcGxpZWQgdG8gdGhlbSwgdmVyc3VzIHRob3NlIHRoYXQgaGF2ZSBub3QuICBUaGlzIGlzCiAgICAgICAgbmVjZXNzYXJ5IGluIHRoZSBjYXNlIHRoYXQgdGhlIGBgIiUoY29uc3RyYWludF9uYW1lKXMiYGAgdG9rZW4KICAgICAgICBpcyB1c2VkIHdpdGhpbiBhIG5hbWluZyBjb252ZW50aW9uLCBzbyB0aGF0IGl0IGNhbiBiZSBpZGVudGlmaWVkCiAgICAgICAgdGhhdCB0aGlzIHBhcnRpY3VsYXIgbmFtZSBzaG91bGQgcmVtYWluIGZpeGVkLgoKICAgICAgICBJZiB0aGUgOm1ldGg6YC5PcGVyYXRpb25zLmZgIGlzIHVzZWQgb24gYSBjb25zdHJhaW50LCB0aGUgbmFtaW5nCiAgICAgICAgY29udmVudGlvbiB3aWxsIG5vdCB0YWtlIGVmZmVjdDo6CgogICAgICAgICAgICBvcC5hZGRfY29sdW1uKCJ0IiwgIngiLCBCb29sZWFuKG5hbWU9b3AuZigiY2tfYm9vbF90X3giKSkpCgogICAgICAgIEFib3ZlLCB0aGUgQ0hFQ0sgY29uc3RyYWludCBnZW5lcmF0ZWQgd2lsbCBoYXZlIHRoZSBuYW1lCiAgICAgICAgYGBja19ib29sX3RfeGBgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgYSBuYW1pbmcgY29udmVudGlvbiBpcwogICAgICAgIGluIHVzZS4KCiAgICAgICAgQWx0ZXJuYXRpdmVseSwgaWYgYSBuYW1pbmcgY29udmVudGlvbiBpcyBpbiB1c2UsIGFuZCAnZicgaXMgbm90IHVzZWQsCiAgICAgICAgbmFtZXMgd2lsbCBiZSBjb252ZXJ0ZWQgYWxvbmcgY29udmVudGlvbnMuICBJZiB0aGUgYGB0YXJnZXRfbWV0YWRhdGFgYAogICAgICAgIGNvbnRhaW5zIHRoZSBuYW1pbmcgY29udmVudGlvbgogICAgICAgIGBgeyJjayI6ICJja19ib29sXyUodGFibGVfbmFtZSlzXyUoY29uc3RyYWludF9uYW1lKXMifWBgLCB0aGVuIHRoZQogICAgICAgIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nOgoKICAgICAgICAgICAgb3AuYWRkX2NvbHVtbigidCIsICJ4IiwgQm9vbGVhbihuYW1lPSJ4IikpCgogICAgICAgIHdpbGwgYmU6OgoKICAgICAgICAgICAgQ09OU1RSQUlOVCBja19ib29sX3RfeCBDSEVDSyAoeCBpbiAoMSwgMCkpKQoKICAgICAgICBUaGUgZnVuY3Rpb24gaXMgcmVuZGVyZWQgaW4gdGhlIG91dHB1dCBvZiBhdXRvZ2VuZXJhdGUgd2hlbgogICAgICAgIGEgcGFydGljdWxhciBjb25zdHJhaW50IG5hbWUgaXMgYWxyZWFkeSBjb252ZXJ0ZWQuCgogICAgICAgIHIVAAAAKQJySwAAAHJfAAAAcwIAAAAgIHJMAAAA2gFmehRBYnN0cmFjdE9wZXJhdGlvbnMuZrsBAABzDwAAAIAA9EgBABAUkESLetAIGXJOAAAAYwMAAAAAAAAAAAAAAAUAAAADAAAB8zIAAACXAHQBAAAAAAAAAABqAgAAAAAAAAAAAAAAAAAAAAAAAGQBfAF8AqwCqwMAAAAAAABTACkDYW0HAABQcm9kdWNlIGFuICdpbmxpbmUgbGl0ZXJhbCcgZXhwcmVzc2lvbiwgc3VpdGFibGUgZm9yCiAgICAgICAgdXNpbmcgaW4gYW4gSU5TRVJULCBVUERBVEUsIG9yIERFTEVURSBzdGF0ZW1lbnQuCgogICAgICAgIFdoZW4gdXNpbmcgQWxlbWJpYyBpbiAib2ZmbGluZSIgbW9kZSwgQ1JVRCBvcGVyYXRpb25zCiAgICAgICAgYXJlbid0IGNvbXBhdGlibGUgd2l0aCBTUUxBbGNoZW15J3MgZGVmYXVsdCBiZWhhdmlvciBzdXJyb3VuZGluZwogICAgICAgIGxpdGVyYWwgdmFsdWVzLAogICAgICAgIHdoaWNoIGlzIHRoYXQgdGhleSBhcmUgY29udmVydGVkIGludG8gYm91bmQgdmFsdWVzIGFuZCBwYXNzZWQKICAgICAgICBzZXBhcmF0ZWx5IGludG8gdGhlIGBgZXhlY3V0ZSgpYGAgbWV0aG9kIG9mIHRoZSBEQkFQSSBjdXJzb3IuCiAgICAgICAgQW4gb2ZmbGluZSBTUUwKICAgICAgICBzY3JpcHQgbmVlZHMgdG8gaGF2ZSB0aGVzZSByZW5kZXJlZCBpbmxpbmUuICBXaGlsZSBpdCBzaG91bGQKICAgICAgICBhbHdheXMgYmUgbm90ZWQgdGhhdCBpbmxpbmUgbGl0ZXJhbCB2YWx1ZXMgYXJlIGFuICoqZW5vcm1vdXMqKgogICAgICAgIHNlY3VyaXR5IGhvbGUgaW4gYW4gYXBwbGljYXRpb24gdGhhdCBoYW5kbGVzIHVudHJ1c3RlZCBpbnB1dCwKICAgICAgICBhIHNjaGVtYSBtaWdyYXRpb24gaXMgbm90IHJ1biBpbiB0aGlzIGNvbnRleHQsIHNvCiAgICAgICAgbGl0ZXJhbHMgYXJlIHNhZmUgdG8gcmVuZGVyIGlubGluZSwgd2l0aCB0aGUgY2F2ZWF0IHRoYXQKICAgICAgICBhZHZhbmNlZCB0eXBlcyBsaWtlIGRhdGVzIG1heSBub3QgYmUgc3VwcG9ydGVkIGRpcmVjdGx5CiAgICAgICAgYnkgU1FMQWxjaGVteS4KCiAgICAgICAgU2VlIDptZXRoOmAuT3BlcmF0aW9ucy5leGVjdXRlYCBmb3IgYW4gZXhhbXBsZSB1c2FnZSBvZgogICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5pbmxpbmVfbGl0ZXJhbGAuCgogICAgICAgIFRoZSBlbnZpcm9ubWVudCBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvIGF0dGVtcHQgdG8gcmVuZGVyCiAgICAgICAgImxpdGVyYWwiIHZhbHVlcyBpbmxpbmUgYXV0b21hdGljYWxseSwgZm9yIHRob3NlIHNpbXBsZSB0eXBlcwogICAgICAgIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgZGlhbGVjdDsgc2VlCiAgICAgICAgOnBhcmFtcmVmOmAuRW52aXJvbm1lbnRDb250ZXh0LmNvbmZpZ3VyZS5saXRlcmFsX2JpbmRzYCBmb3IgdGhpcwogICAgICAgIG1vcmUgcmVjZW50bHkgYWRkZWQgZmVhdHVyZS4KCiAgICAgICAgOnBhcmFtIHZhbHVlOiBUaGUgdmFsdWUgdG8gcmVuZGVyLiAgU3RyaW5ncywgaW50ZWdlcnMsIGFuZCBzaW1wbGUKICAgICAgICAgbnVtZXJpY3Mgc2hvdWxkIGJlIHN1cHBvcnRlZC4gICBPdGhlciB0eXBlcyBsaWtlIGJvb2xlYW4sCiAgICAgICAgIGRhdGVzLCBldGMuIG1heSBvciBtYXkgbm90IGJlIHN1cHBvcnRlZCB5ZXQgYnkgdmFyaW91cwogICAgICAgICBiYWNrZW5kcy4KICAgICAgICA6cGFyYW0gdHlwZVxfOiBvcHRpb25hbCAtIGEgOmNsYXNzOmBzcWxhbGNoZW15LnR5cGVzLlR5cGVFbmdpbmVgCiAgICAgICAgIHN1YmNsYXNzIHN0YXRpbmcgdGhlIHR5cGUgb2YgdGhpcyB2YWx1ZS4gIEluIFNRTEFsY2hlbXkKICAgICAgICAgZXhwcmVzc2lvbnMsIHRoaXMgaXMgdXN1YWxseSBkZXJpdmVkIGF1dG9tYXRpY2FsbHkKICAgICAgICAgZnJvbSB0aGUgUHl0aG9uIHR5cGUgb2YgdGhlIHZhbHVlIGl0c2VsZiwgYXMgd2VsbCBhcwogICAgICAgICBiYXNlZCBvbiB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgdmFsdWUgaXMgdXNlZC4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6cGFyYW1yZWY6YC5FbnZpcm9ubWVudENvbnRleHQuY29uZmlndXJlLmxpdGVyYWxfYmluZHNgCgogICAgICAgIE4pAdoFdHlwZV8pAnIcAAAAciAAAAApA3JLAAAA2gV2YWx1ZXKuAAAAcwMAAAAgICByTAAAANoOaW5saW5lX2xpdGVyYWx6IUFic3RyYWN0T3BlcmF0aW9ucy5pbmxpbmVfbGl0ZXJhbOEBAABzGgAAAIAA9FgBABAb1w8t0Q8tqGSwRcAV1A9H0AhHck4AAABjAQAAAAAAAAAAAAAAAQAAAAMAAAHzQgAAAJcAfABqAAAAAAAAAAAAAAAAAAAAAAAAAGoCAAAAAAAAAAAAAAAAAAAAAAAAagQAAAAAAAAAAAAAAAAAAAAAAABTACkBYQwBAABSZXR1cm4gdGhlIGN1cnJlbnQgJ2JpbmQnLgoKICAgICAgICBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywgdGhpcyBpcyB0aGUKICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LmVuZ2luZS5Db25uZWN0aW9uYCBjdXJyZW50bHkgYmVpbmcgdXNlZAogICAgICAgIHRvIGVtaXQgU1FMIHRvIHRoZSBkYXRhYmFzZS4KCiAgICAgICAgSW4gYSBTUUwgc2NyaXB0IGNvbnRleHQsIHRoaXMgdmFsdWUgaXMgYGBOb25lYGAuIFtUT0RPOiB2ZXJpZnkgdGhpc10KCiAgICAgICAgKQNySAAAAHJGAAAA2gRiaW5kcqAAAABzAQAAACByTAAAANoIZ2V0X2JpbmR6G0Fic3RyYWN0T3BlcmF0aW9ucy5nZXRfYmluZA8CAABzHAAAAIAA8BQAEBTXDyXRDyXXDyrRDyrXDy/RDy/QCC9yTgAAAGMCAAAAAAAAAAAAAAAHAAAADwAAAfMSAQAAlwB0AAAAAAAAAAAAagIAAAAAAAAAAAAAAAAAAAAAAABzC3QFAAAAAAAAAABkAasBAAAAAAAAggF8AGoHAAAAAAAAAAAAAAAAAAAAAAAAqwAAAAAAAAB9BHwEgAt0BQAAAAAAAAAAZAKrAQAAAAAAAIIBfARqCAAAAAAAAAAAAAAAAAAAAAAAAGoKAAAAAAAAAAAAAAAAAAAAAAAAcwt0DQAAAAAAAAAAZAOrAQAAAAAAAIIBZARkBWwHbQh9BQEAZARkBmwJbQp9BgEAfAVqFwAAAAAAAAAAAAAAAAAAAAAAAHwEqwEAAAAAAAB9BwIAfAYCAHwBfAdnAXwCogGtBmkAfAOkAY4BqwEAAAAAAABTACkHYdICAABJbnZva2UgdGhlIGdpdmVuIGFzeW5jaHJvbm91cyBjYWxsYWJsZSwgcGFzc2luZyBhbiBhc3luY2hyb25vdXMKICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LmV4dC5hc3luY2lvLkFzeW5jQ29ubmVjdGlvbmAgYXMgdGhlIGZpcnN0CiAgICAgICAgYXJndW1lbnQuCgogICAgICAgIFRoaXMgbWV0aG9kIGFsbG93cyBjYWxsaW5nIGFzeW5jIGZ1bmN0aW9ucyBmcm9tIHdpdGhpbiB0aGUKICAgICAgICBzeW5jaHJvbm91cyBgYHVwZ3JhZGUoKWBgIG9yIGBgZG93bmdyYWRlKClgYCBhbGVtYmljIG1pZ3JhdGlvbgogICAgICAgIG1ldGhvZC4KCiAgICAgICAgVGhlIGFzeW5jIGNvbm5lY3Rpb24gcGFzc2VkIHRvIHRoZSBjYWxsYWJsZSBzaGFyZXMgdGhlIHNhbWUKICAgICAgICB0cmFuc2FjdGlvbiBhcyB0aGUgY29ubmVjdGlvbiBydW5uaW5nIGluIHRoZSBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgQW55IGFkZGl0aW9uYWwgYXJnIG9yIGt3X2FyZyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhcmUgcGFzc2VkCiAgICAgICAgdG8gdGhlIHByb3ZpZGVkIGFzeW5jIGZ1bmN0aW9uLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6IDEuMTEKCiAgICAgICAgLi4gbm90ZTo6CgogICAgICAgICAgICBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIG9ubHkgd2hlbiBhbGVtYmljIGlzIGNhbGxlZCB1c2luZwogICAgICAgICAgICBhbiBhc3luYyBkaWFsZWN0LgogICAgICAgIHobU1FMQWxjaGVteSAxLjQuMTgrIHJlcXVpcmVkeiFDYW5ub3QgY2FsbCBydW5fYXN5bmMgaW4gU1FMIG1vZGV6KENhbm5vdCBjYWxsIHJ1bl9hc3luYyB3aXRoIGEgc3luYyBlbmdpbmVyAgAAACkB2g9Bc3luY0Nvbm5lY3Rpb24pAdoKYXdhaXRfb25seSkMchwAAADaCnNxbGFfMTRfMTjaE05vdEltcGxlbWVudGVkRXJyb3JyswAAANoHZGlhbGVjdNoIaXNfYXN5bmPaClZhbHVlRXJyb3LaFnNxbGFsY2hlbXkuZXh0LmFzeW5jaW9ytQAAANoPc3FsYWxjaGVteS51dGlscrYAAADaGl9yZXRyaWV2ZV9wcm94eV9mb3JfdGFyZ2V0KQhySwAAANoOYXN5bmNfZnVuY3Rpb25yYQAAANoH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dGlvbiBvcGVyYXRpb25zLgoKICAgIEVhY2ggb3BlcmF0aW9uIGNvcnJlc3BvbmRzIHRvIHNvbWUgc2NoZW1hIG1pZ3JhdGlvbiBvcGVyYXRpb24sCiAgICBleGVjdXRlZCBhZ2FpbnN0IGEgcGFydGljdWxhciA6Y2xhc3M6YC5NaWdyYXRpb25Db250ZXh0YAogICAgd2hpY2ggaW4gdHVybiByZXByZXNlbnRzIGNvbm5lY3Rpdml0eSB0byBhIGRhdGFiYXNlLAogICAgb3IgYSBmaWxlIG91dHB1dCBzdHJlYW0uCgogICAgV2hpbGUgOmNsYXNzOmAuT3BlcmF0aW9uc2AgaXMgbm9ybWFsbHkgY29uZmlndXJlZCBhcwogICAgcGFydCBvZiB0aGUgOm1ldGg6YC5FbnZpcm9ubWVudENvbnRleHQucnVuX21pZ3JhdGlvbnNgCiAgICBtZXRob2QgY2FsbGVkIGZyb20gYW4gYGBlbnYucHlgYCBzY3JpcHQsIGEgc3RhbmRhbG9uZQogICAgOmNsYXNzOmAuT3BlcmF0aW9uc2AgaW5zdGFuY2UgY2FuIGJlCiAgICBtYWRlIGZvciB1c2UgY2FzZXMgZXh0ZXJuYWwgdG8gcmVndWxhciBBbGVtYmljCiAgICBtaWdyYXRpb25zIGJ5IHBhc3NpbmcgaW4gYSA6Y2xhc3M6YC5NaWdyYXRpb25Db250ZXh0YDo6CgogICAgICAgIGZyb20gYWxlbWJpYy5taWdyYXRpb24gaW1wb3J0IE1pZ3JhdGlvbkNvbnRleHQKICAgICAgICBmcm9tIGFsZW1iaWMub3BlcmF0aW9ucyBpbXBvcnQgT3BlcmF0aW9ucwoKICAgICAgICBjb25uID0gbXllbmdpbmUuY29ubmVjdCgpCiAgICAgICAgY3R4ID0gTWlncmF0aW9uQ29udGV4dC5jb25maWd1cmUoY29ubikKICAgICAgICBvcCA9IE9wZXJhdGlvbnMoY3R4KQoKICAgICAgICBvcC5hbHRlcl9jb2x1bW4oInQiLCAiYyIsIG51bGxhYmxlPVRydWUpCgogICAgTm90ZSB0aGF0IGFzIG9mIDAuOCwgbW9zdCBvZiB0aGUgbWV0aG9kcyBvbiB0aGlzIGNsYXNzIGFyZSBwcm9kdWNlZAogICAgZHluYW1pY2FsbHkgdXNpbmcgdGhlIDptZXRoOmAuT3BlcmF0aW9ucy5yZWdpc3Rlcl9vcGVyYXRpb25gCiAgICBtZXRob2QuCgogICAgTikBcpQAAABjAwAAAAAAAAABAAAAAAAAAAMAAAHzBAAAAJcAeQEpAmG6DgAASXNzdWUgYW4gImFkZCBjb2x1bW4iIGluc3RydWN0aW9uIHVzaW5nIHRoZSBjdXJyZW50CiAgICAgICAgICAgIG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBDb2x1bW4sIFN0cmluZwoKICAgICAgICAgICAgICAgIG9wLmFkZF9jb2x1bW4oIm9yZ2FuaXphdGlvbiIsIENvbHVtbigibmFtZSIsIFN0cmluZygpKSkKCiAgICAgICAgICAgIFRoZSA6bWV0aDpgLk9wZXJhdGlvbnMuYWRkX2NvbHVtbmAgbWV0aG9kIHR5cGljYWxseSBjb3JyZXNwb25kcwogICAgICAgICAgICB0byB0aGUgU1FMIGNvbW1hbmQgIkFMVEVSIFRBQkxFLi4uIEFERCBDT0xVTU4iLiAgICBXaXRoaW4gdGhlIHNjb3BlCiAgICAgICAgICAgIG9mIHRoaXMgY29tbWFuZCwgdGhlIGNvbHVtbidzIG5hbWUsIGRhdGF0eXBlLCBudWxsYWJpbGl0eSwKICAgICAgICAgICAgYW5kIG9wdGlvbmFsIHNlcnZlci1nZW5lcmF0ZWQgZGVmYXVsdHMgbWF5IGJlIGluZGljYXRlZC4KCiAgICAgICAgICAgIC4uIG5vdGU6OgoKICAgICAgICAgICAgICAgIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiBOT1QgTlVMTCBjb25zdHJhaW50cyBvciBzaW5nbGUtY29sdW1uIEZPUkVJR04KICAgICAgICAgICAgICAgIEtFWSBjb25zdHJhaW50cywgb3RoZXIga2luZHMgb2YgY29uc3RyYWludHMgc3VjaCBhcyBQUklNQVJZIEtFWSwKICAgICAgICAgICAgICAgIFVOSVFVRSBvciBDSEVDSyBjb25zdHJhaW50cyAqKmNhbm5vdCoqIGJlIGdlbmVyYXRlZCB1c2luZyB0aGlzCiAgICAgICAgICAgICAgICBtZXRob2Q7IGZvciB0aGVzZSBjb25zdHJhaW50cywgcmVmZXIgdG8gb3BlcmF0aW9ucyBzdWNoIGFzCiAgICAgICAgICAgICAgICA6bWV0aDpgLk9wZXJhdGlvbnMuY3JlYXRlX3ByaW1hcnlfa2V5YCBhbmQKICAgICAgICAgICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5jcmVhdGVfY2hlY2tfY29uc3RyYWludGAuIEluIHBhcnRpY3VsYXIsIHRoZQogICAgICAgICAgICAgICAgZm9sbG93aW5nIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbmAgcGFyYW1ldGVycyBhcmUKICAgICAgICAgICAgICAgICoqaWdub3JlZCoqOgoKICAgICAgICAgICAgICAgICogOnBhcmFtcmVmOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29sdW1uLnByaW1hcnlfa2V5YCAtIFNRTCBkYXRhYmFzZXMKICAgICAgICAgICAgICAgICAgdHlwaWNhbGx5IGRvIG5vdCBzdXBwb3J0IGFuIEFMVEVSIG9wZXJhdGlvbiB0aGF0IGNhbiBhZGQKICAgICAgICAgICAgICAgICAgaW5kaXZpZHVhbCBjb2x1bW5zIG9uZSBhdCBhIHRpbWUgdG8gYW4gZXhpc3RpbmcgcHJpbWFyeSBrZXkKICAgICAgICAgICAgICAgICAgY29uc3RyYWludCwgdGhlcmVmb3JlIGl0J3MgbGVzcyBhbWJpZ3VvdXMgdG8gdXNlIHRoZQogICAgICAgICAgICAgICAgICA6bWV0aDpgLk9wZXJhdGlvbnMuY3JlYXRlX3ByaW1hcnlfa2V5YCBtZXRob2QsIHdoaWNoIGFzc3VtZXMgbm8KICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgcHJpbWFyeSBrZXkgY29uc3RyYWludCBpcyBwcmVzZW50LgogICAgICAgICAgICAgICAgKiA6cGFyYW1yZWY6YH5zcWxhbGNoZW15LnNjaGVtYS5Db2x1bW4udW5pcXVlYCAtIHVzZSB0aGUKICAgICAgICAgICAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmNyZWF0ZV91bmlxdWVfY29uc3RyYWludGAgbWV0aG9kCiAgICAgICAgICAgICAgICAqIDpwYXJhbXJlZjpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbi5pbmRleGAgLSB1c2UgdGhlCiAgICAgICAgICAgICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5jcmVhdGVfaW5kZXhgIG1ldGhvZAoKCiAgICAgICAgICAgIFRoZSBwcm92aWRlZCA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5Db2x1bW5gIG9iamVjdCBtYXkgaW5jbHVkZSBhCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkZvcmVpZ25LZXlgIGNvbnN0cmFpbnQgZGlyZWN0aXZlLAogICAgICAgICAgICByZWZlcmVuY2luZyBhIHJlbW90ZSB0YWJsZSBuYW1lLiBGb3IgdGhpcyBzcGVjaWZpYyB0eXBlIG9mIGNvbnN0cmFpbnQsCiAgICAgICAgICAgIEFsZW1iaWMgd2lsbCBhdXRvbWF0aWNhbGx5IGVtaXQgYSBzZWNvbmQgQUxURVIgc3RhdGVtZW50IGluIG9yZGVyIHRvCiAgICAgICAgICAgIGFkZCB0aGUgc2luZ2xlLWNvbHVtbiBGT1JFSUdOIEtFWSBjb25zdHJhaW50IHNlcGFyYXRlbHk6OgoKICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKICAgICAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgQ29sdW1uLCBJTlRFR0VSLCBGb3JlaWduS2V5CgogICAgICAgICAgICAgICAgb3AuYWRkX2NvbHVtbigKICAgICAgICAgICAgICAgICAgICAib3JnYW5pemF0aW9uIiwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oImFjY291bnRfaWQiLCBJTlRFR0VSLCBGb3JlaWduS2V5KCJhY2NvdW50cy5pZCIpKSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIFRoZSBjb2x1bW4gYXJndW1lbnQgcGFzc2VkIHRvIDptZXRoOmAuT3BlcmF0aW9ucy5hZGRfY29sdW1uYCBpcyBhCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbmAgY29uc3RydWN0LCB1c2VkIGluIHRoZSBzYW1lIHdheSBpdCdzCiAgICAgICAgICAgIHVzZWQgaW4gU1FMQWxjaGVteS4gSW4gcGFydGljdWxhciwgdmFsdWVzIG9yIGZ1bmN0aW9ucyB0byBiZSBpbmRpY2F0ZWQKICAgICAgICAgICAgYXMgcHJvZHVjaW5nIHRoZSBjb2x1bW4ncyBkZWZhdWx0IHZhbHVlIG9uIHRoZSBkYXRhYmFzZSBzaWRlIGFyZQogICAgICAgICAgICBzcGVjaWZpZWQgdXNpbmcgdGhlIGBgc2VydmVyX2RlZmF1bHRgYCBwYXJhbWV0ZXIsIGFuZCBub3QgYGBkZWZhdWx0YGAKICAgICAgICAgICAgd2hpY2ggb25seSBzcGVjaWZpZXMgUHl0aG9uLXNpZGUgZGVmYXVsdHM6OgoKICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKICAgICAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgQ29sdW1uLCBUSU1FU1RBTVAsIGZ1bmMKCiAgICAgICAgICAgICAgICAjIHNwZWNpZnkgIkRFRkFVTFQgTk9XIiBhbG9uZyB3aXRoIHRoZSBjb2x1bW4gYWRkCiAgICAgICAgICAgICAgICBvcC5hZGRfY29sdW1uKAogICAgICAgICAgICAgICAgICAgICJhY2NvdW50IiwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oInRpbWVzdGFtcCIsIFRJTUVTVEFNUCwgc2VydmVyX2RlZmF1bHQ9ZnVuYy5ub3coKSksCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICA6cGFyYW0gdGFibGVfbmFtZTogU3RyaW5nIG5hbWUgb2YgdGhlIHBhcmVudCB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIGNvbHVtbjogYSA6Y2xhc3M6YHNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbmAgb2JqZWN0CiAgICAgICAgICAgICByZXByZXNlbnRpbmcgdGhlIG5ldyBjb2x1bW4uCiAgICAgICAgICAgIDpwYXJhbSBzY2hlbWE6IE9wdGlvbmFsIHNjaGVtYSBuYW1lIHRvIG9wZXJhdGUgd2l0aGluLiAgVG8gY29udHJvbAogICAgICAgICAgICAgcXVvdGluZyBvZiB0aGUgc2NoZW1hIG91dHNpZGUgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHVzZQogICAgICAgICAgICAgdGhlIFNRTEFsY2hlbXkgY29uc3RydWN0CiAgICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5lbGVtZW50cy5xdW90ZWRfbmFtZWAuCgogICAgICAgICAgICBOclUAAAApBHJLAAAAcpMAAADaBmNvbHVtbnKUAAAAcwQAAAAgICAgckwAAADaCmFkZF9jb2x1bW56FU9wZXJhdGlvbnMuYWRkX2NvbHVtbmcCAABzCAAAAIAA8GgCAA0Qck4AAABGKQraCG51bGxhYmxl2gdjb21tZW502g5zZXJ2ZXJfZGVmYXVsdNoPbmV3X2NvbHVtbl9uYW1lcq4AAADaDWV4aXN0aW5nX3R5cGXaF2V4aXN0aW5nX3NlcnZlcl9kZWZhdWx02hFleGlzdGluZ19udWxsYWJsZdoQZXhpc3RpbmdfY29tbWVudHKUAAAAYwMAAAAAAAAACgAAAAAAAAALAAAB8wQAAACXAHkBKQJhlxIAAElzc3VlIGFuICJhbHRlciBjb2x1bW4iIGluc3RydWN0aW9uIHVzaW5nIHRoZQogICAgICAgICAgICBjdXJyZW50IG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgR2VuZXJhbGx5LCBvbmx5IHRoYXQgYXNwZWN0IG9mIHRoZSBjb2x1bW4gd2hpY2gKICAgICAgICAgICAgaXMgYmVpbmcgY2hhbmdlZCwgaS5lLiBuYW1lLCB0eXBlLCBudWxsYWJpbGl0eSwKICAgICAgICAgICAgZGVmYXVsdCwgbmVlZHMgdG8gYmUgc3BlY2lmaWVkLiAgTXVsdGlwbGUgY2hhbmdlcwogICAgICAgICAgICBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYXQgb25jZSBhbmQgdGhlIGJhY2tlbmQgc2hvdWxkCiAgICAgICAgICAgICJkbyB0aGUgcmlnaHQgdGhpbmciLCBlbWl0dGluZyBlYWNoIGNoYW5nZSBlaXRoZXIKICAgICAgICAgICAgc2VwYXJhdGVseSBvciB0b2dldGhlciBhcyB0aGUgYmFja2VuZCBhbGxvd3MuCgogICAgICAgICAgICBNeVNRTCBoYXMgc3BlY2lhbCByZXF1aXJlbWVudHMgaGVyZSwgc2luY2UgTXlTUUwKICAgICAgICAgICAgY2Fubm90IEFMVEVSIGEgY29sdW1uIHdpdGhvdXQgYSBmdWxsIHNwZWNpZmljYXRpb24uCiAgICAgICAgICAgIFdoZW4gcHJvZHVjaW5nIE15U1FMLWNvbXBhdGlibGUgbWlncmF0aW9uIGZpbGVzLAogICAgICAgICAgICBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBgYGV4aXN0aW5nX3R5cGVgYCwKICAgICAgICAgICAgYGBleGlzdGluZ19zZXJ2ZXJfZGVmYXVsdGBgLCBhbmQgYGBleGlzdGluZ19udWxsYWJsZWBgCiAgICAgICAgICAgIHBhcmFtZXRlcnMgYmUgcHJlc2VudCwgaWYgbm90IGJlaW5nIGFsdGVyZWQuCgogICAgICAgICAgICBUeXBlIGNoYW5nZXMgd2hpY2ggYXJlIGFnYWluc3QgdGhlIFNRTEFsY2hlbXkKICAgICAgICAgICAgInNjaGVtYSIgdHlwZXMgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5Cb29sZWFuYAogICAgICAgICAgICBhbmQgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuRW51bWAgbWF5IGFsc28KICAgICAgICAgICAgYWRkIG9yIGRyb3AgY29uc3RyYWludHMgd2hpY2ggYWNjb21wYW55IHRob3NlCiAgICAgICAgICAgIHR5cGVzIG9uIGJhY2tlbmRzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtIG5hdGl2ZWx5LgogICAgICAgICAgICBUaGUgYGBleGlzdGluZ190eXBlYGAgYXJndW1lbnQgaXMKICAgICAgICAgICAgdXNlZCBpbiB0aGlzIGNhc2UgdG8gaWRlbnRpZnkgYW5kIHJlbW92ZSBhIHByZXZpb3VzCiAgICAgICAgICAgIGNvbnN0cmFpbnQgdGhhdCB3YXMgYm91bmQgdG8gdGhlIHR5cGUgb2JqZWN0LgoKICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IHN0cmluZyBuYW1lIG9mIHRoZSB0YXJnZXQgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBjb2x1bW5fbmFtZTogc3RyaW5nIG5hbWUgb2YgdGhlIHRhcmdldCBjb2x1bW4sCiAgICAgICAgICAgICBhcyBpdCBleGlzdHMgYmVmb3JlIHRoZSBvcGVyYXRpb24gYmVnaW5zLgogICAgICAgICAgICA6cGFyYW0gbnVsbGFibGU6IE9wdGlvbmFsOyBzcGVjaWZ5IGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYAogICAgICAgICAgICAgdG8gYWx0ZXIgdGhlIGNvbHVtbidzIG51bGxhYmlsaXR5LgogICAgICAgICAgICA6cGFyYW0gc2VydmVyX2RlZmF1bHQ6IE9wdGlvbmFsOyBzcGVjaWZ5IGEgc3RyaW5nCiAgICAgICAgICAgICBTUUwgZXhwcmVzc2lvbiwgOmZ1bmM6YH5zcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnRleHRgLAogICAgICAgICAgICAgb3IgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuRGVmYXVsdENsYXVzZWAgdG8gaW5kaWNhdGUKICAgICAgICAgICAgIGFuIGFsdGVyYXRpb24gdG8gdGhlIGNvbHVtbidzIGRlZmF1bHQgdmFsdWUuCiAgICAgICAgICAgICBTZXQgdG8gYGBOb25lYGAgdG8gaGF2ZSB0aGUgZGVmYXVsdCByZW1vdmVkLgogICAgICAgICAgICA6cGFyYW0gY29tbWVudDogb3B0aW9uYWwgc3RyaW5nIHRleHQgb2YgYSBuZXcgY29tbWVudCB0byBhZGQgdG8gdGhlCiAgICAgICAgICAgICBjb2x1bW4uCiAgICAgICAgICAgIDpwYXJhbSBuZXdfY29sdW1uX25hbWU6IE9wdGlvbmFsOyBzcGVjaWZ5IGEgc3RyaW5nIG5hbWUgaGVyZSB0bwogICAgICAgICAgICAgaW5kaWNhdGUgdGhlIG5ldyBuYW1lIHdpdGhpbiBhIGNvbHVtbiByZW5hbWUgb3BlcmF0aW9uLgogICAgICAgICAgICA6cGFyYW0gdHlwZVxfOiBPcHRpb25hbDsgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnR5cGVzLlR5cGVFbmdpbmVgCiAgICAgICAgICAgICB0eXBlIG9iamVjdCB0byBzcGVjaWZ5IGEgY2hhbmdlIHRvIHRoZSBjb2x1bW4ncyB0eXBlLgogICAgICAgICAgICAgRm9yIFNRTEFsY2hlbXkgdHlwZXMgdGhhdCBhbHNvIGluZGljYXRlIGEgY29uc3RyYWludCAoaS5lLgogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5Cb29sZWFuYCwgOmNsYXNzOmB+c3FsYWxjaGVteS50eXBlcy5FbnVtYCksCiAgICAgICAgICAgICB0aGUgY29uc3RyYWludCBpcyBhbHNvIGdlbmVyYXRlZC4KICAgICAgICAgICAgOnBhcmFtIGF1dG9pbmNyZW1lbnQ6IHNldCB0aGUgYGBBVVRPX0lOQ1JFTUVOVGBgIGZsYWcgb2YgdGhlIGNvbHVtbjsKICAgICAgICAgICAgIGN1cnJlbnRseSB1bmRlcnN0b29kIGJ5IHRoZSBNeVNRTCBkaWFsZWN0LgogICAgICAgICAgICA6cGFyYW0gZXhpc3RpbmdfdHlwZTogT3B0aW9uYWw7IGEKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuVHlwZUVuZ2luZWAKICAgICAgICAgICAgIHR5cGUgb2JqZWN0IHRvIHNwZWNpZnkgdGhlIHByZXZpb3VzIHR5cGUuICAgVGhpcwogICAgICAgICAgICAgaXMgcmVxdWlyZWQgZm9yIGFsbCBNeVNRTCBjb2x1bW4gYWx0ZXIgb3BlcmF0aW9ucyB0aGF0CiAgICAgICAgICAgICBkb24ndCBvdGhlcndpc2Ugc3BlY2lmeSBhIG5ldyB0eXBlLCBhcyB3ZWxsIGFzIGZvcgogICAgICAgICAgICAgd2hlbiBudWxsYWJpbGl0eSBpcyBiZWluZyBjaGFuZ2VkIG9uIGEgU1FMIFNlcnZlcgogICAgICAgICAgICAgY29sdW1uLiAgSXQgaXMgYWxzbyB1c2VkIGlmIHRoZSB0eXBlIGlzIGEgc28tY2FsbGVkCiAgICAgICAgICAgICBTUUxBbGNoZW15ICJzY2hlbWEiIHR5cGUgd2hpY2ggbWF5IGRlZmluZSBhIGNvbnN0cmFpbnQgKGkuZS4KICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuQm9vbGVhbmAsCiAgICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnR5cGVzLkVudW1gKSwKICAgICAgICAgICAgIHNvIHRoYXQgdGhlIGNvbnN0cmFpbnQgY2FuIGJlIGRyb3BwZWQuCiAgICAgICAgICAgIDpwYXJhbSBleGlzdGluZ19zZXJ2ZXJfZGVmYXVsdDogT3B0aW9uYWw7IFRoZSBleGlzdGluZwogICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgY29sdW1uLiAgIFJlcXVpcmVkIG9uIE15U1FMIGlmCiAgICAgICAgICAgICBhbiBleGlzdGluZyBkZWZhdWx0IGlzIG5vdCBiZWluZyBjaGFuZ2VkOyBlbHNlIE15U1FMCiAgICAgICAgICAgICByZW1vdmVzIHRoZSBkZWZhdWx0LgogICAgICAgICAgICA6cGFyYW0gZXhpc3RpbmdfbnVsbGFibGU6IE9wdGlvbmFsOyB0aGUgZXhpc3RpbmcgbnVsbGFiaWxpdHkKICAgICAgICAgICAgIG9mIHRoZSBjb2x1bW4uICBSZXF1aXJlZCBvbiBNeVNRTCBpZiB0aGUgZXhpc3RpbmcgbnVsbGFiaWxpdHkKICAgICAgICAgICAgIGlzIG5vdCBiZWluZyBjaGFuZ2VkOyBlbHNlIE15U1FMIHNldHMgdGhpcyB0byBOVUxMLgogICAgICAgICAgICA6cGFyYW0gZXhpc3RpbmdfYXV0b2luY3JlbWVudDogT3B0aW9uYWw7IHRoZSBleGlzdGluZyBhdXRvaW5jcmVtZW50CiAgICAgICAgICAgICBvZiB0aGUgY29sdW1uLiAgVXNlZCBmb3IgTXlTUUwncyBzeXN0ZW0gb2YgYWx0ZXJpbmcgYSBjb2x1bW4KICAgICAgICAgICAgIHRoYXQgc3BlY2lmaWVzIGBgQVVUT19JTkNSRU1FTlRgYC4KICAgICAgICAgICAgOnBhcmFtIGV4aXN0aW5nX2NvbW1lbnQ6IHN0cmluZyB0ZXh0IG9mIHRoZSBleGlzdGluZyBjb21tZW50IG9uIHRoZQogICAgICAgICAgICAgY29sdW1uIHRvIGJlIG1haW50YWluZWQuICBSZXF1aXJlZCBvbiBNeVNRTCBpZiB0aGUgZXhpc3RpbmcgY29tbWVudAogICAgICAgICAgICAgb24gdGhlIGNvbHVtbiBpcyBub3QgYmVpbmcgY2hhbmdlZC4KICAgICAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KICAgICAgICAgICAgOnBhcmFtIHBvc3RncmVzcWxfdXNpbmc6IFN0cmluZyBhcmd1bWVudCB3aGljaCB3aWxsIGluZGljYXRlIGEKICAgICAgICAgICAgIFNRTCBleHByZXNzaW9uIHRvIHJlbmRlciB3aXRoaW4gdGhlIFBvc3RncmVzcWwtc3BlY2lmaWMgVVNJTkcgY2xhdXNlCiAgICAgICAgICAgICB3aXRoaW4gQUxURVIgQ09MVU1OLiAgICBUaGlzIHN0cmluZyBpcyB0YWtlbiBkaXJlY3RseSBhcyByYXcgU1FMIHdoaWNoCiAgICAgICAgICAgICBtdXN0IGV4cGxpY2l0bHkgaW5jbHVkZSBhbnkgbmVjZXNzYXJ5IHF1b3Rpbmcgb3IgZXNjYXBpbmcgb2YgdG9rZW5zCiAgICAgICAgICAgICB3aXRoaW4gdGhlIGV4cHJlc3Npb24uCgogICAgICAgICAgICBOclUAAAApDnJLAAAAcpMAAADaC2NvbHVtbl9uYW1lctQAAABy1QAAAHLWAAAActcAAAByrgAAAHLYAAAActkAAABy2gAAAHLbAAAAcpQAAADaAmt3cw4AAAAgICAgICAgICAgICAgIHJMAAAA2gxhbHRlcl9jb2x1bW56F09wZXJhdGlvbnMuYWx0ZXJfY29sdW1uvQIAAHMIAAAAgADwTgMADRByTgAAAFQpAdoLbXVsdGlpbnNlcnRjAwAAAAAAAAABAAAAAAAAAAMAAAHzBAAAAJcAeQEpAmHADwAASXNzdWUgYSAiYnVsayBpbnNlcnQiIG9wZXJhdGlvbiB1c2luZyB0aGUgY3VycmVudAogICAgICAgICAgICBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIFRoaXMgcHJvdmlkZXMgYSBtZWFucyBvZiByZXByZXNlbnRpbmcgYW4gSU5TRVJUIG9mIG11bHRpcGxlIHJvd3MKICAgICAgICAgICAgd2hpY2ggd29ya3MgZXF1YWxseSB3ZWxsIGluIHRoZSBjb250ZXh0IG9mIGV4ZWN1dGluZyBvbiBhIGxpdmUKICAgICAgICAgICAgY29ubmVjdGlvbiBhcyB3ZWxsIGFzIHRoYXQgb2YgZ2VuZXJhdGluZyBhIFNRTCBzY3JpcHQuICAgSW4gdGhlCiAgICAgICAgICAgIGNhc2Ugb2YgYSBTUUwgc2NyaXB0LCB0aGUgdmFsdWVzIGFyZSByZW5kZXJlZCBpbmxpbmUgaW50byB0aGUKICAgICAgICAgICAgc3RhdGVtZW50LgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICAgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15LnNxbCBpbXBvcnQgdGFibGUsIGNvbHVtbgogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBTdHJpbmcsIEludGVnZXIsIERhdGUKCiAgICAgICAgICAgICAgICAjIENyZWF0ZSBhbiBhZC1ob2MgdGFibGUgdG8gdXNlIGZvciB0aGUgaW5zZXJ0IHN0YXRlbWVudC4KICAgICAgICAgICAgICAgIGFjY291bnRzX3RhYmxlID0gdGFibGUoCiAgICAgICAgICAgICAgICAgICAgImFjY291bnQiLAogICAgICAgICAgICAgICAgICAgIGNvbHVtbigiaWQiLCBJbnRlZ2VyKSwKICAgICAgICAgICAgICAgICAgICBjb2x1bW4oIm5hbWUiLCBTdHJpbmcpLAogICAgICAgICAgICAgICAgICAgIGNvbHVtbigiY3JlYXRlX2RhdGUiLCBEYXRlKSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICBvcC5idWxrX2luc2VydCgKICAgICAgICAgICAgICAgICAgICBhY2NvdW50c190YWJsZSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJKb2huIFNtaXRoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVhdGVfZGF0ZSI6IGRhdGUoMjAxMCwgMTAsIDUpLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRWQgV2lsbGlhbXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZV9kYXRlIjogZGF0ZSgyMDA3LCA1LCAyNyksCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJXZW5keSBKb25lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlX2RhdGUiOiBkYXRlKDIwMDgsIDgsIDE1KSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgV2hlbiB1c2luZyAtLXNxbCBtb2RlLCBzb21lIGRhdGF0eXBlcyBtYXkgbm90IHJlbmRlciBpbmxpbmUKICAgICAgICAgICAgYXV0b21hdGljYWxseSwgc3VjaCBhcyBkYXRlcyBhbmQgb3RoZXIgc3BlY2lhbCB0eXBlcy4gICBXaGVuIHRoaXMKICAgICAgICAgICAgaXNzdWUgaXMgcHJlc2VudCwgOm1ldGg6YC5PcGVyYXRpb25zLmlubGluZV9saXRlcmFsYCBtYXkgYmUgdXNlZDo6CgogICAgICAgICAgICAgICAgb3AuYnVsa19pbnNlcnQoCiAgICAgICAgICAgICAgICAgICAgYWNjb3VudHNfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSm9obiBTbWl0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlX2RhdGUiOiBvcC5pbmxpbmVfbGl0ZXJhbCgiMjAxMC0xMC0wNSIpLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRWQgV2lsbGlhbXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZV9kYXRlIjogb3AuaW5saW5lX2xpdGVyYWwoIjIwMDctMDUtMjciKSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIldlbmR5IEpvbmVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjcmVhdGVfZGF0ZSI6IG9wLmlubGluZV9saXRlcmFsKCIyMDA4LTA4LTE1IiksCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBtdWx0aWluc2VydD1GYWxzZSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIFdoZW4gdXNpbmcgOm1ldGg6YC5PcGVyYXRpb25zLmlubGluZV9saXRlcmFsYCBpbiBjb25qdW5jdGlvbiB3aXRoCiAgICAgICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5idWxrX2luc2VydGAsIGluIG9yZGVyIGZvciB0aGUgc3RhdGVtZW50IHRvIHdvcmsKICAgICAgICAgICAgaW4gIm9ubGluZSIgKGUuZy4gbm9uIC0tc3FsKSBtb2RlLCB0aGUKICAgICAgICAgICAgOnBhcmFtcmVmOmB+Lk9wZXJhdGlvbnMuYnVsa19pbnNlcnQubXVsdGlpbnNlcnRgCiAgICAgICAgICAgIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgYEZhbHNlYGAsIHdoaWNoIHdpbGwgaGF2ZSB0aGUgZWZmZWN0IG9mCiAgICAgICAgICAgIGluZGl2aWR1YWwgSU5TRVJUIHN0YXRlbWVudHMgYmVpbmcgZW1pdHRlZCB0byB0aGUgZGF0YWJhc2UsIGVhY2gKICAgICAgICAgICAgd2l0aCBhIGRpc3RpbmN0IFZBTFVFUyBjbGF1c2UsIHNvIHRoYXQgdGhlICJpbmxpbmUiIHZhbHVlcyBjYW4KICAgICAgICAgICAgc3RpbGwgYmUgcmVuZGVyZWQsIHJhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gcGFzcyB0aGUgdmFsdWVzCiAgICAgICAgICAgIGFzIGJvdW5kIHBhcmFtZXRlcnMuCgogICAgICAgICAgICA6cGFyYW0gdGFibGU6IGEgdGFibGUgb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIHRhcmdldCBvZiB0aGUgSU5TRVJULgoKICAgICAgICAgICAgOnBhcmFtIHJvd3M6IGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgaW5kaWNhdGluZyByb3dzLgoKICAgICAgICAgICAgOnBhcmFtIG11bHRpaW5zZXJ0OiB3aGVuIGF0IGl0cyBkZWZhdWx0IG9mIFRydWUgYW5kIC0tc3FsIG1vZGUgaXMgbm90CiAgICAgICAgICAgICAgIGVuYWJsZWQsIHRoZSBJTlNFUlQgc3RhdGVtZW50IHdpbGwgYmUgZXhlY3V0ZWQgdXNpbmcKICAgICAgICAgICAgICAgImV4ZWN1dGVtYW55KCkiIHN0eWxlLCB3aGVyZSBhbGwgZWxlbWVudHMgaW4gdGhlIGxpc3Qgb2YKICAgICAgICAgICAgICAgZGljdGlvbmFyaWVzIGFyZSBwYXNzZWQgYXMgYm91bmQgcGFyYW1ldGVycyBpbiBhIHNpbmdsZQogICAgICAgICAgICAgICBsaXN0LiAgIFNldHRpbmcgdGhpcyB0byBGYWxzZSByZXN1bHRzIGluIGluZGl2aWR1YWwgSU5TRVJUCiAgICAgICAgICAgICAgIHN0YXRlbWVudHMgYmVpbmcgZW1pdHRlZCBwZXIgcGFyYW1ldGVyIHNldCwgYW5kIGlzIG5lZWRlZAogICAgICAgICAgICAgICBpbiB0aG9zZSBjYXNlcyB3aGVyZSBub24tbGl0ZXJhbCB2YWx1ZXMgYXJlIHByZXNlbnQgaW4gdGhlCiAgICAgICAgICAgICAgIHBhcmFtZXRlciBzZXRzLgoKICAgICAgICAgICAgTnJVAAAAKQRySwAAANoFdGFibGXaBHJvd3Ny4AAAAHMEAAAAICAgIHJMAAAA2gtidWxrX2luc2VydHoWT3BlcmF0aW9ucy5idWxrX2luc2VydCYDAABzCAAAAIAA8EwDAA0Qck4AAABjBAAAAAAAAAABAAAAAAAAAAsAAAHzBAAAAJcAeQEpAmGFBwAASXNzdWUgYSAiY3JlYXRlIGNoZWNrIGNvbnN0cmFpbnQiIGluc3RydWN0aW9uIHVzaW5nIHRoZQogICAgICAgICAgICBjdXJyZW50IG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15LnNxbCBpbXBvcnQgY29sdW1uLCBmdW5jCgogICAgICAgICAgICAgICAgb3AuY3JlYXRlX2NoZWNrX2NvbnN0cmFpbnQoCiAgICAgICAgICAgICAgICAgICAgImNrX3VzZXJfbmFtZV9sZW4iLAogICAgICAgICAgICAgICAgICAgICJ1c2VyIiwKICAgICAgICAgICAgICAgICAgICBmdW5jLmxlbihjb2x1bW4oIm5hbWUiKSkgPiA1LAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgQ0hFQ0sgY29uc3RyYWludHMgYXJlIHVzdWFsbHkgYWdhaW5zdCBhIFNRTCBleHByZXNzaW9uLCBzbyBhZC1ob2MKICAgICAgICAgICAgdGFibGUgbWV0YWRhdGEgaXMgdXN1YWxseSBuZWVkZWQuICAgVGhlIGZ1bmN0aW9uIHdpbGwgY29udmVydCB0aGUgZ2l2ZW4KICAgICAgICAgICAgYXJndW1lbnRzIGludG8gYSA6Y2xhc3M6YHNxbGFsY2hlbXkuc2NoZW1hLkNoZWNrQ29uc3RyYWludGAgYm91bmQKICAgICAgICAgICAgdG8gYW4gYW5vbnltb3VzIHRhYmxlIGluIG9yZGVyIHRvIGVtaXQgdGhlIENSRUFURSBzdGF0ZW1lbnQuCgogICAgICAgICAgICA6cGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgY2hlY2sgY29uc3RyYWludC4gIFRoZSBuYW1lIGlzIG5lY2Vzc2FyeQogICAgICAgICAgICAgc28gdGhhdCBhbiBBTFRFUiBzdGF0ZW1lbnQgY2FuIGJlIGVtaXR0ZWQuICBGb3Igc2V0dXBzIHRoYXQKICAgICAgICAgICAgIHVzZSBhbiBhdXRvbWF0ZWQgbmFtaW5nIHNjaGVtZSBzdWNoIGFzIHRoYXQgZGVzY3JpYmVkIGF0CiAgICAgICAgICAgICA6cmVmOmBzcWxhOmNvbnN0cmFpbnRfbmFtaW5nX2NvbnZlbnRpb25zYCwKICAgICAgICAgICAgIGBgbmFtZWBgIGhlcmUgY2FuIGJlIGBgTm9uZWBgLCBhcyB0aGUgZXZlbnQgbGlzdGVuZXIgd2lsbAogICAgICAgICAgICAgYXBwbHkgdGhlIG5hbWUgdG8gdGhlIGNvbnN0cmFpbnQgb2JqZWN0IHdoZW4gaXQgaXMgYXNzb2NpYXRlZAogICAgICAgICAgICAgd2l0aCB0aGUgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBTdHJpbmcgbmFtZSBvZiB0aGUgc291cmNlIHRhYmxlLgogICAgICAgICAgICA6cGFyYW0gY29uZGl0aW9uOiBTUUwgZXhwcmVzc2lvbiB0aGF0J3MgdGhlIGNvbmRpdGlvbiBvZiB0aGUKICAgICAgICAgICAgIGNvbnN0cmFpbnQuIENhbiBiZSBhIHN0cmluZyBvciBTUUxBbGNoZW15IGV4cHJlc3Npb24gbGFuZ3VhZ2UKICAgICAgICAgICAgIHN0cnVjdHVyZS4KICAgICAgICAgICAgOnBhcmFtIGRlZmVycmFibGU6IG9wdGlvbmFsIGJvb2wuIElmIHNldCwgZW1pdCBERUZFUlJBQkxFIG9yCiAgICAgICAgICAgICBOT1QgREVGRVJSQUJMRSB3aGVuIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuCiAgICAgICAgICAgIDpwYXJhbSBpbml0aWFsbHk6IG9wdGlvbmFsIHN0cmluZy4gSWYgc2V0LCBlbWl0IElOSVRJQUxMWSA8dmFsdWU+CiAgICAgICAgICAgICB3aGVuIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuCiAgICAgICAgICAgIDpwYXJhbSBzY2hlbWE6IE9wdGlvbmFsIHNjaGVtYSBuYW1lIHRvIG9wZXJhdGUgd2l0aGluLiAgVG8gY29udHJvbAogICAgICAgICAgICAgcXVvdGluZyBvZiB0aGUgc2NoZW1hIG91dHNpZGUgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHVzZQogICAgICAgICAgICAgdGhlIFNRTEFsY2hlbXkgY29uc3RydWN0CiAgICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5lbGVtZW50cy5xdW90ZWRfbmFtZWAuCgogICAgICAgICAgICBOclUAAAApBnJLAAAA2g9jb25zdHJhaW50X25hbWVykwAAANoJY29uZGl0aW9ucpQAAABy3gAAAHMGAAAAICAgICAgckwAAADaF2NyZWF0ZV9jaGVja19jb25zdHJhaW50eiJPcGVyYXRpb25zLmNyZWF0ZV9jaGVja19jb25zdHJhaW50jgMAAHMIAAAAgADwYgEADRByTgAAAGMDAAAAAAAAAAAAAAAAAAAADwAAAfMEAAAAlwB5ASkCYUAFAABJc3N1ZSBhbiBhbHRlciB0byBjcmVhdGUgYW4gRVhDTFVERSBjb25zdHJhaW50IHVzaW5nIHRoZQogICAgICAgICAgICBjdXJyZW50IG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgLi4gbm90ZTo6ICBUaGlzIG1ldGhvZCBpcyBQb3N0Z3Jlc3FsIHNwZWNpZmljLCBhbmQgYWRkaXRpb25hbGx5CiAgICAgICAgICAgICAgIHJlcXVpcmVzIGF0IGxlYXN0IFNRTEFsY2hlbXkgMS4wLgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV9leGNsdWRlX2NvbnN0cmFpbnQoCiAgICAgICAgICAgICAgICAgICAgInVzZXJfZXhjbCIsCiAgICAgICAgICAgICAgICAgICAgInVzZXIiLAogICAgICAgICAgICAgICAgICAgICgicGVyaW9kIiwgIiYmIiksCiAgICAgICAgICAgICAgICAgICAgKCJncm91cCIsICI9IiksCiAgICAgICAgICAgICAgICAgICAgd2hlcmU9KCJncm91cCAhPSAnc29tZSBncm91cCciKSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZXhwcmVzc2lvbnMgd29yayB0aGUgc2FtZSB3YXkgYXMgdGhhdCBvZgogICAgICAgICAgICB0aGUgYGBFeGNsdWRlQ29uc3RyYWludGBgIG9iamVjdCBpdHNlbGY7IGlmIHBsYWluIHN0cmluZ3MgYXJlCiAgICAgICAgICAgIHBhc3NlZCwgcXVvdGluZyBydWxlcyBtdXN0IGJlIGFwcGxpZWQgbWFudWFsbHkuCgogICAgICAgICAgICA6cGFyYW0gbmFtZTogTmFtZSBvZiB0aGUgY29uc3RyYWludC4KICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IFN0cmluZyBuYW1lIG9mIHRoZSBzb3VyY2UgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBlbGVtZW50czogZXhjbHVkZSBjb25kaXRpb25zLgogICAgICAgICAgICA6cGFyYW0gd2hlcmU6IFNRTCBleHByZXNzaW9uIG9yIFNRTCBzdHJpbmcgd2l0aCBvcHRpb25hbCBXSEVSRQogICAgICAgICAgICAgY2xhdXNlLgogICAgICAgICAgICA6cGFyYW0gZGVmZXJyYWJsZTogb3B0aW9uYWwgYm9vbC4gSWYgc2V0LCBlbWl0IERFRkVSUkFCTEUgb3IKICAgICAgICAgICAgIE5PVCBERUZFUlJBQkxFIHdoZW4gaXNzdWluZyBEREwgZm9yIHRoaXMgY29uc3RyYWludC4KICAgICAgICAgICAgOnBhcmFtIGluaXRpYWxseTogb3B0aW9uYWwgc3RyaW5nLiBJZiBzZXQsIGVtaXQgSU5JVElBTExZIDx2YWx1ZT4KICAgICAgICAgICAgIHdoZW4gaXNzdWluZyBEREwgZm9yIHRoaXMgY29uc3RyYWludC4KICAgICAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uCgogICAgICAgICAgICBOclUAAAApBXJLAAAAcuYAAABykwAAANoIZWxlbWVudHNy3gAAAHMFAAAAICAgICByTAAAANoZY3JlYXRlX2V4Y2x1ZGVfY29uc3RyYWludHokT3BlcmF0aW9ucy5jcmVhdGVfZXhjbHVkZV9jb25zdHJhaW50wQMAAHMIAAAAgADwUgEADRByTgAAACkH2ghvbnVwZGF0ZdoIb25kZWxldGXaCmRlZmVycmFibGXaCWluaXRpYWxsedoFbWF0Y2jaDXNvdXJjZV9zY2hlbWHaD3JlZmVyZW50X3NjaGVtYWMGAAAAAAAAAAcAAAAAAAAACwAAAfMEAAAAlwB5ASkCYV4JAABJc3N1ZSBhICJjcmVhdGUgZm9yZWlnbiBrZXkiIGluc3RydWN0aW9uIHVzaW5nIHRoZQogICAgICAgICAgICBjdXJyZW50IG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV9mb3JlaWduX2tleSgKICAgICAgICAgICAgICAgICAgICAiZmtfdXNlcl9hZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAiYWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgInVzZXIiLAogICAgICAgICAgICAgICAgICAgIFsidXNlcl9pZCJdLAogICAgICAgICAgICAgICAgICAgIFsiaWQiXSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIFRoaXMgaW50ZXJuYWxseSBnZW5lcmF0ZXMgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAgb2JqZWN0CiAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBjb2x1bW5zLCB0aGVuIGdlbmVyYXRlcyBhIG5ldwogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5Gb3JlaWduS2V5Q29uc3RyYWludGAKICAgICAgICAgICAgb2JqZWN0IHdoaWNoIGl0IHRoZW4gYXNzb2NpYXRlcyB3aXRoIHRoZQogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAuCiAgICAgICAgICAgIEFueSBldmVudCBsaXN0ZW5lcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWN0aW9uIHdpbGwgYmUgZmlyZWQKICAgICAgICAgICAgb2ZmIG5vcm1hbGx5LiAgIFRoZSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5BZGRDb25zdHJhaW50YAogICAgICAgICAgICBjb25zdHJ1Y3QgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBBTFRFUiBzdGF0ZW1lbnQuCgogICAgICAgICAgICA6cGFyYW0gY29uc3RyYWludF9uYW1lOiBOYW1lIG9mIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50LiAgVGhlIG5hbWUKICAgICAgICAgICAgIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IGFuIEFMVEVSIHN0YXRlbWVudCBjYW4gYmUgZW1pdHRlZC4gIEZvciBzZXR1cHMKICAgICAgICAgICAgIHRoYXQgdXNlIGFuIGF1dG9tYXRlZCBuYW1pbmcgc2NoZW1lIHN1Y2ggYXMgdGhhdCBkZXNjcmliZWQgYXQKICAgICAgICAgICAgIDpyZWY6YHNxbGE6Y29uc3RyYWludF9uYW1pbmdfY29udmVudGlvbnNgLAogICAgICAgICAgICAgYGBuYW1lYGAgaGVyZSBjYW4gYmUgYGBOb25lYGAsIGFzIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsCiAgICAgICAgICAgICBhcHBseSB0aGUgbmFtZSB0byB0aGUgY29uc3RyYWludCBvYmplY3Qgd2hlbiBpdCBpcyBhc3NvY2lhdGVkCiAgICAgICAgICAgICB3aXRoIHRoZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHNvdXJjZV90YWJsZTogU3RyaW5nIG5hbWUgb2YgdGhlIHNvdXJjZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHJlZmVyZW50X3RhYmxlOiBTdHJpbmcgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBsb2NhbF9jb2xzOiBhIGxpc3Qgb2Ygc3RyaW5nIGNvbHVtbiBuYW1lcyBpbiB0aGUKICAgICAgICAgICAgIHNvdXJjZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHJlbW90ZV9jb2xzOiBhIGxpc3Qgb2Ygc3RyaW5nIGNvbHVtbiBuYW1lcyBpbiB0aGUKICAgICAgICAgICAgIHJlbW90ZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIG9udXBkYXRlOiBPcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBPTiBVUERBVEUgPHZhbHVlPiB3aGVuCiAgICAgICAgICAgICBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LiBUeXBpY2FsIHZhbHVlcyBpbmNsdWRlIENBU0NBREUsCiAgICAgICAgICAgICBERUxFVEUgYW5kIFJFU1RSSUNULgogICAgICAgICAgICA6cGFyYW0gb25kZWxldGU6IE9wdGlvbmFsIHN0cmluZy4gSWYgc2V0LCBlbWl0IE9OIERFTEVURSA8dmFsdWU+IHdoZW4KICAgICAgICAgICAgIGlzc3VpbmcgRERMIGZvciB0aGlzIGNvbnN0cmFpbnQuIFR5cGljYWwgdmFsdWVzIGluY2x1ZGUgQ0FTQ0FERSwKICAgICAgICAgICAgIERFTEVURSBhbmQgUkVTVFJJQ1QuCiAgICAgICAgICAgIDpwYXJhbSBkZWZlcnJhYmxlOiBvcHRpb25hbCBib29sLiBJZiBzZXQsIGVtaXQgREVGRVJSQUJMRSBvciBOT1QKICAgICAgICAgICAgIERFRkVSUkFCTEUgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gc291cmNlX3NjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgb2YgdGhlIHNvdXJjZSB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIHJlZmVyZW50X3NjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIHRhYmxlLgoKICAgICAgICAgICAgTnJVAAAAKQ5ySwAAAHLmAAAA2gxzb3VyY2VfdGFibGXaDnJlZmVyZW50X3RhYmxl2gpsb2NhbF9jb2xz2gtyZW1vdGVfY29sc3LsAAAAcu0AAABy7gAAAHLvAAAAcvAAAABy8QAAAHLyAAAA2gpkaWFsZWN0X2t3cw4AAAAgICAgICAgICAgICAgIHJMAAAA2hJjcmVhdGVfZm9yZWlnbl9rZXl6HU9wZXJhdGlvbnMuY3JlYXRlX2ZvcmVpZ25fa2V57AMAAHMIAAAAgADwRAIADRByTgAAACkDcpQAAADaBnVuaXF1ZdoNaWZfbm90X2V4aXN0c2MEAAAAAAAAAAMAAAAAAAAACwAAAfMEAAAAlwB5ASkCYRIIAABJc3N1ZSBhICJjcmVhdGUgaW5kZXgiIGluc3RydWN0aW9uIHVzaW5nIHRoZSBjdXJyZW50CiAgICAgICAgICAgIG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV9pbmRleCgiaWtfdGVzdCIsICJ0MSIsIFsiZm9vIiwgImJhciJdKQoKICAgICAgICAgICAgRnVuY3Rpb25hbCBpbmRleGVzIGNhbiBiZSBwcm9kdWNlZCBieSB1c2luZyB0aGUKICAgICAgICAgICAgOmZ1bmM6YHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24udGV4dGAgY29uc3RydWN0OjoKCiAgICAgICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IHRleHQKCiAgICAgICAgICAgICAgICBvcC5jcmVhdGVfaW5kZXgoImlrX3Rlc3QiLCAidDEiLCBbdGV4dCgibG93ZXIoZm9vKSIpXSkKCiAgICAgICAgICAgIDpwYXJhbSBpbmRleF9uYW1lOiBuYW1lIG9mIHRoZSBpbmRleC4KICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IG5hbWUgb2YgdGhlIG93bmluZyB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIGNvbHVtbnM6IGEgbGlzdCBjb25zaXN0aW5nIG9mIHN0cmluZyBjb2x1bW4gbmFtZXMgYW5kL29yCiAgICAgICAgICAgICA6ZnVuYzpgfnNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24udGV4dGAgY29uc3RydWN0cy4KICAgICAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KICAgICAgICAgICAgOnBhcmFtIHVuaXF1ZTogSWYgVHJ1ZSwgY3JlYXRlIGEgdW5pcXVlIGluZGV4LgoKICAgICAgICAgICAgOnBhcmFtIHF1b3RlOiBGb3JjZSBxdW90aW5nIG9mIHRoaXMgY29sdW1uJ3MgbmFtZSBvbiBvciBvZmYsCiAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYC4gV2hlbiBsZWZ0IGF0IGl0cyBkZWZhdWx0CiAgICAgICAgICAgICBvZiBgYE5vbmVgYCwgdGhlIGNvbHVtbiBpZGVudGlmaWVyIHdpbGwgYmUgcXVvdGVkIGFjY29yZGluZyB0bwogICAgICAgICAgICAgd2hldGhlciB0aGUgbmFtZSBpcyBjYXNlIHNlbnNpdGl2ZSAoaWRlbnRpZmllcnMgd2l0aCBhdCBsZWFzdCBvbmUKICAgICAgICAgICAgIHVwcGVyIGNhc2UgY2hhcmFjdGVyIGFyZSB0cmVhdGVkIGFzIGNhc2Ugc2Vuc2l0aXZlKSwgb3IgaWYgaXQncyBhCiAgICAgICAgICAgICByZXNlcnZlZCB3b3JkLiBUaGlzIGZsYWcgaXMgb25seSBuZWVkZWQgdG8gZm9yY2UgcXVvdGluZyBvZiBhCiAgICAgICAgICAgICByZXNlcnZlZCB3b3JkIHdoaWNoIGlzIG5vdCBrbm93biBieSB0aGUgU1FMQWxjaGVteSBkaWFsZWN0LgoKICAgICAgICAgICAgOnBhcmFtIGlmX25vdF9leGlzdHM6IElmIFRydWUsIGFkZHMgSUYgTk9UIEVYSVNUUyBvcGVyYXRvciB3aGVuCiAgICAgICAgICAgICBjcmVhdGluZyB0aGUgbmV3IGluZGV4LgoKICAgICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTIuMAoKICAgICAgICAgICAgOnBhcmFtIFwqKmt3OiBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIG5vdCBtZW50aW9uZWQgYWJvdmUgYXJlCiAgICAgICAgICAgICBkaWFsZWN0IHNwZWNpZmljLCBhbmQgcGFzc2VkIGluIHRoZSBmb3JtCiAgICAgICAgICAgICBgYDxkaWFsZWN0bmFtZT5fPGFyZ25hbWU+YGAuCiAgICAgICAgICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIGFuIGluZGl2aWR1YWwgZGlhbGVjdCBhdAogICAgICAgICAgICAgOnJlZjpgZGlhbGVjdF90b3BsZXZlbGAgZm9yIGRldGFpbCBvbiBkb2N1bWVudGVkIGFyZ3VtZW50cy4KCiAgICAgICAgICAgIE5yVQAAACkIcksAAADaCmluZGV4X25hbWVykwAAANoHY29sdW1uc3KUAAAAcvoAAABy+wAAAHLeAAAAcwgAAAAgICAgICAgIHJMAAAA2gxjcmVhdGVfaW5kZXh6F09wZXJhdGlvbnMuY3JlYXRlX2luZGV4MAQAAHMIAAAAgADwdAEADRByTgAAAGMEAAAAAAAAAAEAAAAAAAAAAwAAAfMEAAAAlwB5ASkCYY4GAABJc3N1ZSBhICJjcmVhdGUgcHJpbWFyeSBrZXkiIGluc3RydWN0aW9uIHVzaW5nIHRoZSBjdXJyZW50CiAgICAgICAgICAgIG1pZ3JhdGlvbiBjb250ZXh0LgoKICAgICAgICAgICAgZS5nLjo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV9wcmltYXJ5X2tleSgicGtfbXlfdGFibGUiLCAibXlfdGFibGUiLCBbImlkIiwgInZlcnNpb24iXSkKCiAgICAgICAgICAgIFRoaXMgaW50ZXJuYWxseSBnZW5lcmF0ZXMgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAgb2JqZWN0CiAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBjb2x1bW5zLCB0aGVuIGdlbmVyYXRlcyBhIG5ldwogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5QcmltYXJ5S2V5Q29uc3RyYWludGAKICAgICAgICAgICAgb2JqZWN0IHdoaWNoIGl0IHRoZW4gYXNzb2NpYXRlcyB3aXRoIHRoZQogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAuCiAgICAgICAgICAgIEFueSBldmVudCBsaXN0ZW5lcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWN0aW9uIHdpbGwgYmUgZmlyZWQKICAgICAgICAgICAgb2ZmIG5vcm1hbGx5LiAgIFRoZSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5BZGRDb25zdHJhaW50YAogICAgICAgICAgICBjb25zdHJ1Y3QgaXMgdWx0aW1hdGVseSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBBTFRFUiBzdGF0ZW1lbnQuCgogICAgICAgICAgICA6cGFyYW0gY29uc3RyYWludF9uYW1lOiBOYW1lIG9mIHRoZSBwcmltYXJ5IGtleSBjb25zdHJhaW50LiAgVGhlIG5hbWUKICAgICAgICAgICAgIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IGFuIEFMVEVSIHN0YXRlbWVudCBjYW4gYmUgZW1pdHRlZC4gIEZvciBzZXR1cHMKICAgICAgICAgICAgIHRoYXQgdXNlIGFuIGF1dG9tYXRlZCBuYW1pbmcgc2NoZW1lIHN1Y2ggYXMgdGhhdCBkZXNjcmliZWQgYXQKICAgICAgICAgICAgIDpyZWY6YHNxbGE6Y29uc3RyYWludF9uYW1pbmdfY29udmVudGlvbnNgCiAgICAgICAgICAgICBgYG5hbWVgYCBoZXJlIGNhbiBiZSBgYE5vbmVgYCwgYXMgdGhlIGV2ZW50IGxpc3RlbmVyIHdpbGwKICAgICAgICAgICAgIGFwcGx5IHRoZSBuYW1lIHRvIHRoZSBjb25zdHJhaW50IG9iamVjdCB3aGVuIGl0IGlzIGFzc29jaWF0ZWQKICAgICAgICAgICAgIHdpdGggdGhlIHRhYmxlLgogICAgICAgICAgICA6cGFyYW0gdGFibGVfbmFtZTogU3RyaW5nIG5hbWUgb2YgdGhlIHRhcmdldCB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIGNvbHVtbnM6IGEgbGlzdCBvZiBzdHJpbmcgY29sdW1uIG5hbWVzIHRvIGJlIGFwcGxpZWQgdG8gdGhlCiAgICAgICAgICAgICBwcmltYXJ5IGtleSBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgoKICAgICAgICAgICAgTnJVAAAAKQVySwAAAHLmAAAAcpMAAABy/gAAAHKUAAAAcwUAAAAgICAgIHJMAAAA2hJjcmVhdGVfcHJpbWFyeV9rZXl6HU9wZXJhdGlvbnMuY3JlYXRlX3ByaW1hcnlfa2V5bAQAAHMIAAAAgADwVAEADRByTgAAACkBcvsAAABjAgAAAAAAAAABAAAAAAAAAA8AAAHzBAAAAJcAeQEpAmHhDQAASXNzdWUgYSAiY3JlYXRlIHRhYmxlIiBpbnN0cnVjdGlvbiB1c2luZyB0aGUgY3VycmVudCBtaWdyYXRpb24KICAgICAgICAgICAgY29udGV4dC4KCiAgICAgICAgICAgIFRoaXMgZGlyZWN0aXZlIHJlY2VpdmVzIGFuIGFyZ3VtZW50IGxpc3Qgc2ltaWxhciB0byB0aGF0IG9mIHRoZQogICAgICAgICAgICB0cmFkaXRpb25hbCA6Y2xhc3M6YHNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBjb25zdHJ1Y3QsIGJ1dCB3aXRob3V0IHRoZQogICAgICAgICAgICBtZXRhZGF0YTo6CgogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBJTlRFR0VSLCBWQVJDSEFSLCBOVkFSQ0hBUiwgQ29sdW1uCiAgICAgICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCgogICAgICAgICAgICAgICAgb3AuY3JlYXRlX3RhYmxlKAogICAgICAgICAgICAgICAgICAgICJhY2NvdW50IiwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oImlkIiwgSU5URUdFUiwgcHJpbWFyeV9rZXk9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJuYW1lIiwgVkFSQ0hBUig1MCksIG51bGxhYmxlPUZhbHNlKSwKICAgICAgICAgICAgICAgICAgICBDb2x1bW4oImRlc2NyaXB0aW9uIiwgTlZBUkNIQVIoMjAwKSksCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJ0aW1lc3RhbXAiLCBUSU1FU1RBTVAsIHNlcnZlcl9kZWZhdWx0PWZ1bmMubm93KCkpLAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgTm90ZSB0aGF0IDptZXRoOmAuY3JlYXRlX3RhYmxlYCBhY2NlcHRzCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbmAKICAgICAgICAgICAgY29uc3RydWN0cyBkaXJlY3RseSBmcm9tIHRoZSBTUUxBbGNoZW15IGxpYnJhcnkuICBJbiBwYXJ0aWN1bGFyLAogICAgICAgICAgICBkZWZhdWx0IHZhbHVlcyB0byBiZSBjcmVhdGVkIG9uIHRoZSBkYXRhYmFzZSBzaWRlIGFyZQogICAgICAgICAgICBzcGVjaWZpZWQgdXNpbmcgdGhlIGBgc2VydmVyX2RlZmF1bHRgYCBwYXJhbWV0ZXIsIGFuZCBub3QKICAgICAgICAgICAgYGBkZWZhdWx0YGAgd2hpY2ggb25seSBzcGVjaWZpZXMgUHl0aG9uLXNpZGUgZGVmYXVsdHM6OgoKICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKICAgICAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgQ29sdW1uLCBUSU1FU1RBTVAsIGZ1bmMKCiAgICAgICAgICAgICAgICAjIHNwZWNpZnkgIkRFRkFVTFQgTk9XIiBhbG9uZyB3aXRoIHRoZSAidGltZXN0YW1wIiBjb2x1bW4KICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV90YWJsZSgKICAgICAgICAgICAgICAgICAgICAiYWNjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJpZCIsIElOVEVHRVIsIHByaW1hcnlfa2V5PVRydWUpLAogICAgICAgICAgICAgICAgICAgIENvbHVtbigidGltZXN0YW1wIiwgVElNRVNUQU1QLCBzZXJ2ZXJfZGVmYXVsdD1mdW5jLm5vdygpKSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBhbHNvIHJldHVybnMgYSBuZXdseSBjcmVhdGVkCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRhYmxlCiAgICAgICAgICAgIHNwZWNpZmljYXRpb24gZ2l2ZW4sIHdoaWNoIGlzIHN1aXRhYmxlIGZvcgogICAgICAgICAgICBpbW1lZGlhdGUgU1FMIG9wZXJhdGlvbnMsIGluIHBhcnRpY3VsYXIKICAgICAgICAgICAgOm1ldGg6YC5PcGVyYXRpb25zLmJ1bGtfaW5zZXJ0YDo6CgogICAgICAgICAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBJTlRFR0VSLCBWQVJDSEFSLCBOVkFSQ0hBUiwgQ29sdW1uCiAgICAgICAgICAgICAgICBmcm9tIGFsZW1iaWMgaW1wb3J0IG9wCgogICAgICAgICAgICAgICAgYWNjb3VudF90YWJsZSA9IG9wLmNyZWF0ZV90YWJsZSgKICAgICAgICAgICAgICAgICAgICAiYWNjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJpZCIsIElOVEVHRVIsIHByaW1hcnlfa2V5PVRydWUpLAogICAgICAgICAgICAgICAgICAgIENvbHVtbigibmFtZSIsIFZBUkNIQVIoNTApLCBudWxsYWJsZT1GYWxzZSksCiAgICAgICAgICAgICAgICAgICAgQ29sdW1uKCJkZXNjcmlwdGlvbiIsIE5WQVJDSEFSKDIwMCkpLAogICAgICAgICAgICAgICAgICAgIENvbHVtbigidGltZXN0YW1wIiwgVElNRVNUQU1QLCBzZXJ2ZXJfZGVmYXVsdD1mdW5jLm5vdygpKSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICBvcC5idWxrX2luc2VydCgKICAgICAgICAgICAgICAgICAgICBhY2NvdW50X3RhYmxlLAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogIkExIiwgImRlc2NyaXB0aW9uIjogImFjY291bnQgMSJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAiQTIiLCAiZGVzY3JpcHRpb24iOiAiYWNjb3VudCAyIn0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBOYW1lIG9mIHRoZSB0YWJsZQogICAgICAgICAgICA6cGFyYW0gXCpjb2x1bW5zOiBjb2xsZWN0aW9uIG9mIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkNvbHVtbmAKICAgICAgICAgICAgIG9iamVjdHMgd2l0aGluCiAgICAgICAgICAgICB0aGUgdGFibGUsIGFzIHdlbGwgYXMgb3B0aW9uYWwgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuQ29uc3RyYWludGAKICAgICAgICAgICAgIG9iamVjdHMKICAgICAgICAgICAgIGFuZCA6Y2xhc3M6YH4uc3FsYWxjaGVteS5zY2hlbWEuSW5kZXhgIG9iamVjdHMuCiAgICAgICAgICAgIDpwYXJhbSBzY2hlbWE6IE9wdGlvbmFsIHNjaGVtYSBuYW1lIHRvIG9wZXJhdGUgd2l0aGluLiAgVG8gY29udHJvbAogICAgICAgICAgICAgcXVvdGluZyBvZiB0aGUgc2NoZW1hIG91dHNpZGUgb2YgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHVzZQogICAgICAgICAgICAgdGhlIFNRTEFsY2hlbXkgY29uc3RydWN0CiAgICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNxbC5lbGVtZW50cy5xdW90ZWRfbmFtZWAuCiAgICAgICAgICAgIDpwYXJhbSBpZl9ub3RfZXhpc3RzOiBJZiBUcnVlLCBhZGRzIElGIE5PVCBFWElTVFMgb3BlcmF0b3Igd2hlbgogICAgICAgICAgICAgY3JlYXRpbmcgdGhlIG5ldyB0YWJsZS4KCiAgICAgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEzLjMKICAgICAgICAgICAgOnBhcmFtIFwqKmt3OiBPdGhlciBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgICAgICA6Y2xhc3M6YHNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYCBvYmplY3QgY3JlYXRlZCBmb3IgdGhlIGNvbW1hbmQuCgogICAgICAgICAgICA6cmV0dXJuOiB0aGUgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIG9iamVjdCBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgICB0byB0aGUgcGFyYW1ldGVycyBnaXZlbi4KCiAgICAgICAgICAgIE5yVQAAACkFcksAAABykwAAAHL7AAAAcv4AAABy3gAAAHMFAAAAICAgICByTAAAANoMY3JlYXRlX3RhYmxlehdPcGVyYXRpb25zLmNyZWF0ZV90YWJsZZgEAABzCAAAAIAA8HACAA0Qck4AAAApAnLbAAAAcpQAAABjAwAAAAAAAAACAAAAAAAAAAMAAAHzBAAAAJcAeQEpAmF9AgAARW1pdCBhIENPTU1FTlQgT04gb3BlcmF0aW9uIHRvIHNldCB0aGUgY29tbWVudCBmb3IgYSB0YWJsZS4KCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBzdHJpbmcgbmFtZSBvZiB0aGUgdGFyZ2V0IHRhYmxlLgogICAgICAgICAgICA6cGFyYW0gY29tbWVudDogc3RyaW5nIHZhbHVlIG9mIHRoZSBjb21tZW50IGJlaW5nIHJlZ2lzdGVyZWQgYWdhaW5zdAogICAgICAgICAgICAgdGhlIHNwZWNpZmllZCB0YWJsZS4KICAgICAgICAgICAgOnBhcmFtIGV4aXN0aW5nX2NvbW1lbnQ6IFN0cmluZyB2YWx1ZSBvZiBhIGNvbW1lbnQKICAgICAgICAgICAgIGFscmVhZHkgcmVnaXN0ZXJlZCBvbiB0aGUgc3BlY2lmaWVkIHRhYmxlLCB1c2VkIHdpdGhpbiBhdXRvZ2VuZXJhdGUKICAgICAgICAgICAgIHNvIHRoYXQgdGhlIG9wZXJhdGlvbiBpcyByZXZlcnNpYmxlLCBidXQgbm90IHJlcXVpcmVkIGZvciBkaXJlY3QKICAgICAgICAgICAgIHVzZS4KCiAgICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5kcm9wX3RhYmxlX2NvbW1lbnRgCgogICAgICAgICAgICAgICAgOnBhcmFtcmVmOmAuT3BlcmF0aW9ucy5hbHRlcl9jb2x1bW4uY29tbWVudGAKCiAgICAgICAgICAgIE5yVQAAACkFcksAAABykwAAAHLVAAAActsAAABylAAAAHMFAAAAICAgICByTAAAANoUY3JlYXRlX3RhYmxlX2NvbW1lbnR6H09wZXJhdGlvbnMuY3JlYXRlX3RhYmxlX2NvbW1lbnTyBAAAcwcAAACAAPAyAA0Qck4AAABjBAAAAAAAAAABAAAAAAAAAAsAAAHzBAAAAJcAeQEpAmFuBwAASXNzdWUgYSAiY3JlYXRlIHVuaXF1ZSBjb25zdHJhaW50IiBpbnN0cnVjdGlvbiB1c2luZyB0aGUKICAgICAgICAgICAgY3VycmVudCBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIGUuZy46OgoKICAgICAgICAgICAgICAgIGZyb20gYWxlbWJpYyBpbXBvcnQgb3AKICAgICAgICAgICAgICAgIG9wLmNyZWF0ZV91bmlxdWVfY29uc3RyYWludCgidXFfdXNlcl9uYW1lIiwgInVzZXIiLCBbIm5hbWUiXSkKCiAgICAgICAgICAgIFRoaXMgaW50ZXJuYWxseSBnZW5lcmF0ZXMgYSA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5UYWJsZWAgb2JqZWN0CiAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBjb2x1bW5zLCB0aGVuIGdlbmVyYXRlcyBhIG5ldwogICAgICAgICAgICA6Y2xhc3M6YH5zcWxhbGNoZW15LnNjaGVtYS5VbmlxdWVDb25zdHJhaW50YAogICAgICAgICAgICBvYmplY3Qgd2hpY2ggaXQgdGhlbiBhc3NvY2lhdGVzIHdpdGggdGhlCiAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLlRhYmxlYC4KICAgICAgICAgICAgQW55IGV2ZW50IGxpc3RlbmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY3Rpb24gd2lsbCBiZSBmaXJlZAogICAgICAgICAgICBvZmYgbm9ybWFsbHkuICAgVGhlIDpjbGFzczpgfnNxbGFsY2hlbXkuc2NoZW1hLkFkZENvbnN0cmFpbnRgCiAgICAgICAgICAgIGNvbnN0cnVjdCBpcyB1bHRpbWF0ZWx5IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEFMVEVSIHN0YXRlbWVudC4KCiAgICAgICAgICAgIDpwYXJhbSBuYW1lOiBOYW1lIG9mIHRoZSB1bmlxdWUgY29uc3RyYWludC4gIFRoZSBuYW1lIGlzIG5lY2Vzc2FyeQogICAgICAgICAgICAgc28gdGhhdCBhbiBBTFRFUiBzdGF0ZW1lbnQgY2FuIGJlIGVtaXR0ZWQuICBGb3Igc2V0dXBzIHRoYXQKICAgICAgICAgICAgIHVzZSBhbiBhdXRvbWF0ZWQgbmFtaW5nIHNjaGVtZSBzdWNoIGFzIHRoYXQgZGVzY3JpYmVkIGF0CiAgICAgICAgICAgICA6cmVmOmBzcWxhOmNvbnN0cmFpbnRfbmFtaW5nX2NvbnZlbnRpb25zYCwKICAgICAgICAgICAgIGBgbmFtZWBgIGhlcmUgY2FuIGJlIGBgTm9uZWBgLCBhcyB0aGUgZXZlbnQgbGlzdGVuZXIgd2lsbAogICAgICAgICAgICAgYXBwbHkgdGhlIG5hbWUgdG8gdGhlIGNvbnN0cmFpbnQgb2JqZWN0IHdoZW4gaXQgaXMgYXNzb2NpYXRlZAogICAgICAgICAgICAgd2l0aCB0aGUgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiBTdHJpbmcgbmFtZSBvZiB0aGUgc291cmNlIHRhYmxlLgogICAgICAgICAgICA6cGFyYW0gY29sdW1uczogYSBsaXN0IG9mIHN0cmluZyBjb2x1bW4gbmFtZXMgaW4gdGhlCiAgICAgICAgICAgICBzb3VyY2UgdGFibGUuCiAgICAgICAgICAgIDpwYXJhbSBkZWZlcnJhYmxlOiBvcHRpb25hbCBib29sLiBJZiBzZXQsIGVtaXQgREVGRVJSQUJMRSBvcgogICAgICAgICAgICAgTk9UIERFRkVSUkFCTEUgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gaW5pdGlhbGx5OiBvcHRpb25hbCBzdHJpbmcuIElmIHNldCwgZW1pdCBJTklUSUFMTFkgPHZhbHVlPgogICAgICAgICAgICAgd2hlbiBpc3N1aW5nIERETCBmb3IgdGhpcyBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgoKICAgICAgICAgICAgTnJVAAAAKQZySwAAAHLmAAAAcpMAAABy/gAAAHKUAAAAct4AAABzBgAAACAgICAgIHJMAAAA2hhjcmVhdGVfdW5pcXVlX2NvbnN0cmFpbnR6I09wZXJhdGlvbnMuY3JlYXRlX3VuaXF1ZV9jb25zdHJhaW50DQUAAHMIAAAAgADwXAEADRByTgAAAGMDAAAAAAAAAAEAAAAAAAAACwAAAfMEAAAAlwB5ASkCYfUGAABJc3N1ZSBhICJkcm9wIGNvbHVtbiIgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlIGN1cnJlbnQKICAgICAgICAgICAgbWlncmF0aW9uIGNvbnRleHQuCgogICAgICAgICAgICBlLmcuOjoKCiAgICAgICAgICAgICAgICBkcm9wX2NvbHVtbigib3JnYW5pemF0aW9uIiwgImFjY291bnRfaWQiKQoKICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IG5hbWUgb2YgdGFibGUKICAgICAgICAgICAgOnBhcmFtIGNvbHVtbl9uYW1lOiBuYW1lIG9mIGNvbHVtbgogICAgICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgogICAgICAgICAgICA6cGFyYW0gbXNzcWxfZHJvcF9jaGVjazogT3B0aW9uYWwgYm9vbGVhbi4gIFdoZW4gYGBUcnVlYGAsIG9uCiAgICAgICAgICAgICBNaWNyb3NvZnQgU1FMIFNlcnZlciBvbmx5LCBmaXJzdAogICAgICAgICAgICAgZHJvcCB0aGUgQ0hFQ0sgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHVzaW5nIGEKICAgICAgICAgICAgIFNRTC1zY3JpcHQtY29tcGF0aWJsZQogICAgICAgICAgICAgYmxvY2sgdGhhdCBzZWxlY3RzIGludG8gYSBAdmFyaWFibGUgZnJvbSBzeXMuY2hlY2tfY29uc3RyYWludHMsCiAgICAgICAgICAgICB0aGVuIGV4ZWMncyBhIHNlcGFyYXRlIERST1AgQ09OU1RSQUlOVCBmb3IgdGhhdCBjb25zdHJhaW50LgogICAgICAgICAgICA6cGFyYW0gbXNzcWxfZHJvcF9kZWZhdWx0OiBPcHRpb25hbCBib29sZWFuLiAgV2hlbiBgYFRydWVgYCwgb24KICAgICAgICAgICAgIE1pY3Jvc29mdCBTUUwgU2VydmVyIG9ubHksIGZpcnN0CiAgICAgICAgICAgICBkcm9wIHRoZSBERUZBVUxUIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiB1c2luZyBhCiAgICAgICAgICAgICBTUUwtc2NyaXB0LWNvbXBhdGlibGUKICAgICAgICAgICAgIGJsb2NrIHRoYXQgc2VsZWN0cyBpbnRvIGEgQHZhcmlhYmxlIGZyb20gc3lzLmRlZmF1bHRfY29uc3RyYWludHMsCiAgICAgICAgICAgICB0aGVuIGV4ZWMncyBhIHNlcGFyYXRlIERST1AgQ09OU1RSQUlOVCBmb3IgdGhhdCBkZWZhdWx0LgogICAgICAgICAgICA6cGFyYW0gbXNzcWxfZHJvcF9mb3JlaWduX2tleTogT3B0aW9uYWwgYm9vbGVhbi4gIFdoZW4gYGBUcnVlYGAsIG9uCiAgICAgICAgICAgICBNaWNyb3NvZnQgU1FMIFNlcnZlciBvbmx5LCBmaXJzdAogICAgICAgICAgICAgZHJvcCBhIHNpbmdsZSBGT1JFSUdOIEtFWSBjb25zdHJhaW50IG9uIHRoZSBjb2x1bW4gdXNpbmcgYQogICAgICAgICAgICAgU1FMLXNjcmlwdC1jb21wYXRpYmxlCiAgICAgICAgICAgICBibG9jayB0aGF0IHNlbGVjdHMgaW50byBhIEB2YXJpYWJsZSBmcm9tCiAgICAgICAgICAgICBzeXMuZm9yZWlnbl9rZXlzL3N5cy5mb3JlaWduX2tleV9jb2x1bW5zLAogICAgICAgICAgICAgdGhlbiBleGVjJ3MgYSBzZXBhcmF0ZSBEUk9QIENPTlNUUkFJTlQgZm9yIHRoYXQgZGVmYXVsdC4gIE9ubHkKICAgICAgICAgICAgIHdvcmtzIGlmIHRoZSBjb2x1bW4gaGFzIGV4YWN0bHkgb25lIEZLIGNvbnN0cmFpbnQgd2hpY2ggcmVmZXJzIHRvCiAgICAgICAgICAgICBpdCwgYXQgdGhlIG1vbWVudC4KCiAgICAgICAgICAgIE5yVQAAACkFcksAAABykwAAAHLdAAAAcpQAAABy3gAAAHMFAAAAICAgICByTAAAANoLZHJvcF9jb2x1bW56Fk9wZXJhdGlvbnMuZHJvcF9jb2x1bW49BQAAcwgAAACAAPBYAQANEHJOAAAAYwQAAAAAAAAAAQAAAAAAAAADAAAB8wQAAACXAHkBKQJhLgIAAERyb3AgYSBjb25zdHJhaW50IG9mIHRoZSBnaXZlbiBuYW1lLCB0eXBpY2FsbHkgdmlhIERST1AgQ09OU1RSQUlOVC4KCiAgICAgICAgICAgIDpwYXJhbSBjb25zdHJhaW50X25hbWU6IG5hbWUgb2YgdGhlIGNvbnN0cmFpbnQuCiAgICAgICAgICAgIDpwYXJhbSB0YWJsZV9uYW1lOiB0YWJsZSBuYW1lLgogICAgICAgICAgICA6cGFyYW0gdHlwZVxfOiBvcHRpb25hbCwgcmVxdWlyZWQgb24gTXlTUUwuICBjYW4gYmUKICAgICAgICAgICAgICdmb3JlaWdua2V5JywgJ3ByaW1hcnknLCAndW5pcXVlJywgb3IgJ2NoZWNrJy4KICAgICAgICAgICAgOnBhcmFtIHNjaGVtYTogT3B0aW9uYWwgc2NoZW1hIG5hbWUgdG8gb3BlcmF0ZSB3aXRoaW4uICBUbyBjb250cm9sCiAgICAgICAgICAgICBxdW90aW5nIG9mIHRoZSBzY2hlbWEgb3V0c2lkZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgdXNlCiAgICAgICAgICAgICB0aGUgU1FMQWxjaGVteSBjb25zdHJ1Y3QKICAgICAgICAgICAgIDpjbGFzczpgfnNxbGFsY2hlbXkuc3FsLmVsZW1lbnRzLnF1b3RlZF9uYW1lYC4KCiAgICAgICAgICAgIE5yVQAAACkFcksAAABy5gAAAHKTAAAAcq4AAABylAAAAHMFAAAAICAgICByTAAAANoPZHJvcF9jb25zdHJhaW50ehpPcGVyYXRpb25zLmRyb3BfY29uc3RyYWludGsFAABzBwAAAIAA8CgADRByTgAAACkCcpQAAADaCWlmX2V4aXN0c2MDAAAAAAAAAAIAAAAAAAAACwAAAfMEAAAAlwB5ASkCYRMEAABJc3N1ZSBhICJkcm9wIGluZGV4IiBpbnN0cnVjdGlvbiB1c2luZyB0aGUgY3VycmVudAogICAgICAgICAgICBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIGUuZy46OgoKICAgICAgICAgICAgICAgIGRyb3BfaW5kZXgoImFjY291bnRzIikKCiAgICAgICAgICAgIDpwYXJhbSBpbmRleF9uYW1lOiBuYW1lIG9mIHRoZSBpbmRleC4KICAgICAgICAgICAgOnBhcmFtIHRhYmxlX25hbWU6IG5hbWUgb2YgdGhlIG93bmluZyB0YWJsZS4gIFNvbWUKICAgICAgICAgICAgIGJhY2tlbmRzIHN1Y2ggYXMgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIgcmVxdWlyZSB0aGlzLgogICAgICAgICAgICA6cGFyYW0gc2NoZW1hOiBPcHRpb25hbCBzY2hlbWEgbmFtZSB0byBvcGVyYXRlIHdpdGhpbi4gIFRvIGNvbnRyb2wKICAgICAgICAgICAgIHF1b3Rpbmcgb2YgdGhlIHNjaGVtYSBvdXRzaWRlIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB1c2UKICAgICAgICAgICAgIHRoZSBTUUxBbGNoZW15IGNvbnN0cnVjdAogICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zcWwuZWxlbWVudHMucXVvdGVkX25hbWVgLgoKICAgICAgICAgICAgOnBhcmFtIGlmX2V4aXN0czogSWYgVHJ1ZSwgYWRkcyBJRiBFWElTVFMgb3BlcmF0b3Igd2hlbgogICAgICAgICAgICAgZHJvcHBpbmcgdGhlIGluZGV4LgoKICAgICAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMTIuMAoKICAgICAgICAgICAgOnBhcmFtIFwqKmt3OiBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIG5vdCBtZW50aW9uZWQgYWJvdmUgYXJlCiAgICAgICAgICAgICBkaWFsZWN0IHNwZWNpZmljLCBhbmQgcGFzc2VkIGluIHRoZSBmb3JtCiAgICAgICAgICAgICBgYDxkaWFsZWN0bmFtZT5fPGFyZ25hbWU+YGAuCiAgICAgICAgICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIGFuIGluZGl2aWR1YWwgZGlhbGVjdCBhdAogICAgICAgICAgICAgOnJlZjpgZGlhbGVjdF90b3BsZXZlbGAgZm9yIGRldGFpbCBvbiBkb2N1bWVudGVkIGFyZ3VtZW50cy4KCiAgICAgICAgICAgIE5yVQAAACkGcksAAABy/QAAAHKTAAAAcpQAAAByDAEAAHLeAAAAcwYAAAAgICAgICByTAAAANoKZHJvcF9pbmRleHoVT3BlcmF0aW9ucy5kcm9wX2luZGV4gQUAAPMIAAAA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cmUgU1FMIEV4cHJlc3Npb24gY29uc3RydWN0LCBzdWNoIGFzCiAgICAgICAgICAgIGJlbG93IHdoZXJlIHdlIHVzZSBhbiB1cGRhdGUgY29uc3RydWN0OjoKCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkuc3FsIGltcG9ydCB0YWJsZSwgY29sdW1uCiAgICAgICAgICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IFN0cmluZwogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIGFjY291bnQgPSB0YWJsZSgiYWNjb3VudCIsIGNvbHVtbigibmFtZSIsIFN0cmluZykpCiAgICAgICAgICAgICAgICBvcC5leGVjdXRlKAogICAgICAgICAgICAgICAgICAgIGFjY291bnQudXBkYXRlKCkKICAgICAgICAgICAgICAgICAgICAud2hlcmUoYWNjb3VudC5jLm5hbWUgPT0gb3AuaW5saW5lX2xpdGVyYWwoImFjY291bnQgMSIpKQogICAgICAgICAgICAgICAgICAgIC52YWx1ZXMoeyJuYW1lIjogb3AuaW5saW5lX2xpdGVyYWwoImFjY291bnQgMiIpfSkKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIEFib3ZlLCB3ZSBtYWRlIHVzZSBvZiB0aGUgU1FMQWxjaGVteQogICAgICAgICAgICA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi50YWJsZWAgYW5kCiAgICAgICAgICAgIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLmNvbHVtbmAgY29uc3RydWN0cyB0byBtYWtlIGEgYnJpZWYsCiAgICAgICAgICAgIGFkLWhvYyB0YWJsZSBjb25zdHJ1Y3QganVzdCBmb3Igb3VyIFVQREFURSBzdGF0ZW1lbnQuICBBIGZ1bGwKICAgICAgICAgICAgOmNsYXNzOmB+c3FsYWxjaGVteS5zY2hlbWEuVGFibGVgIGNvbnN0cnVjdCBvZiBjb3Vyc2Ugd29ya3MgcGVyZmVjdGx5CiAgICAgICAgICAgIGZpbmUgYXMgd2VsbCwgdGhvdWdoIG5vdGUgaXQncyBhIHJlY29tbWVuZGVkIHByYWN0aWNlIHRvIGF0IGxlYXN0CiAgICAgICAgICAgIGVuc3VyZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHRhYmxlIGlzIHNlbGYtY29udGFpbmVkIHdpdGhpbiB0aGUgbWlncmF0aW9uCiAgICAgICAgICAgIHNjcmlwdCwgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgZnJvbSBhIG1vZHVsZSB0aGF0IG1heSBicmVhayBjb21wYXRpYmlsaXR5CiAgICAgICAgICAgIHdpdGggb2xkZXIgbWlncmF0aW9ucy4KCiAgICAgICAgICAgIEluIGEgU1FMIHNjcmlwdCBjb250ZXh0LCB0aGUgc3RhdGVtZW50IGlzIGVtaXR0ZWQgZGlyZWN0bHkgdG8gdGhlCiAgICAgICAgICAgIG91dHB1dCBzdHJlYW0uICAgVGhlcmUgaXMgKm5vKiByZXR1cm4gcmVzdWx0LCBob3dldmVyLCBhcyB0aGlzCiAgICAgICAgICAgIGZ1bmN0aW9uIGlzIG9yaWVudGVkIHRvd2FyZHMgZ2VuZXJhdGluZyBhIGNoYW5nZSBzY3JpcHQKICAgICAgICAgICAgdGhhdCBjYW4gcnVuIGluICJvZmZsaW5lIiBtb2RlLiAgICAgQWRkaXRpb25hbGx5LCBwYXJhbWV0ZXJpemVkCiAgICAgICAgICAgIHN0YXRlbWVudHMgYXJlIGRpc2NvdXJhZ2VkIGhlcmUsIGFzIHRoZXkgKndpbGwgbm90IHdvcmsqIGluIG9mZmxpbmUKICAgICAgICAgICAgbW9kZS4gIEFib3ZlLCB3ZSB1c2UgOm1ldGg6YC5pbmxpbmVfbGl0ZXJhbGAgd2hlcmUgcGFyYW1ldGVycyBhcmUKICAgICAgICAgICAgdG8gYmUgdXNlZC4KCiAgICAgICAgICAgIEZvciBmdWxsIGludGVyYWN0aW9uIHdpdGggYSBjb25uZWN0ZWQgZGF0YWJhc2Ugd2hlcmUgcGFyYW1ldGVycyBjYW4KICAgICAgICAgICAgYWxzbyBiZSB1c2VkIG5vcm1hbGx5LCB1c2UgdGhlICJiaW5kIiBhdmFpbGFibGUgZnJvbSB0aGUgY29udGV4dDo6CgogICAgICAgICAgICAgICAgZnJvbSBhbGVtYmljIGltcG9ydCBvcAoKICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBvcC5nZXRfYmluZCgpCgogICAgICAgICAgICAgICAgY29ubmVjdGlvbi5leGVjdXRlKAogICAgICAgICAgICAgICAgICAgIGFjY291bnQudXBkYXRlKCkKICAgICAgICAgICAgICAgICAgICAud2hlcmUoYWNjb3VudC5jLm5hbWUgPT0gImFjY291bnQgMSIpCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlcyh7Im5hbWUiOiAiYWNjb3VudCAyIn0pCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBBZGRpdGlvbmFsbHksIHdoZW4gcGFzc2luZyB0aGUgc3RhdGVtZW50IGFzIGEgcGxhaW4gc3RyaW5nLCBpdCBpcyBmaXJzdAogICAgICAgICAgICBjb2VyY2VkIGludG8gYSA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi50ZXh0YCBjb25zdHJ1Y3QKICAgICAgICAgICAgYmVmb3JlIGJlaW5nIHBhc3NlZCBhbG9uZy4gIEluIHRoZSBsZXNzIGxpa2VseSBjYXNlIHRoYXQgdGhlCiAgICAgICAgICAgIGxpdGVyYWwgU1FMIHN0cmluZyBjb250YWlucyBhIGNvbG9uLCBpdCBtdXN0IGJlIGVzY2FwZWQgd2l0aCBhCiAgICAgICAgICAgIGJhY2tzbGFzaCwgYXM6OgoKICAgICAgICAgICAgICAgb3AuZXhlY3V0ZShyIklOU0VSVCBJTlRPIHRhYmxlIChmb28pIFZBTFVFUyAoJ1w6Y29sb25fdmFsdWUnKSIpCgoKICAgICAgICAgICAgOnBhcmFtIHNxbHRleHQ6IEFueSBsZWdhbCBTUUxBbGNoZW15IGV4cHJlc3Npb24sIGluY2x1ZGluZzoKCiAgICAgICAgICAgICogYSBzdHJpbmcKICAgICAgICAgICAgKiBhIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLnRleHRgIGNvbnN0cnVjdC4KICAgICAgICAgICAgKiBhIDpmdW5jOmBzcWxhbGNoZW15LnNxbC5leHByZXNzaW9uLmluc2VydGAgY29uc3RydWN0LgogICAgICAgICAgICAqIGEgOmZ1bmM6YHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24udXBkYXRlYCBjb25zdHJ1Y3QuCiAgICAgICAgICAgICogYSA6ZnVuYzpgc3FsYWxjaGVteS5zcWwuZXhwcmVzc2lvbi5kZWxldGVgIGNvbnN0cnVjdC4KICAgICAgICAgICAgKiBBbnkgImV4ZWN1dGFibGUiIGRlc2NyaWJlZCBpbiBTUUxBbGNoZW15IENvcmUgZG9jdW1lbnRhdGlvbiwKICAgICAgICAgICAgICBub3RpbmcgdGhhdCBubyByZXN1bHQgc2V0IGlzIHJldHVybmVkLgoKICAgICAgICAgICAgLi4gbm90ZTo6ICB3aGVuIHBhc3NpbmcgYSBwbGFpbiBzdHJpbmcsIHRoZSBzdGF0ZW1lbnQgaXMgY29lcmNlZCBpbnRvCiAgICAgICAgICAgICAgIGEgOmZ1bmM6YHNxbGFsY2hlbXkuc3FsLmV4cHJlc3Npb24udGV4dGAgY29uc3RydWN0LiBUaGlzIGNvbnN0cnVjdAogICAgICAgICAgICAgICBjb25zaWRlcnMgc3ltYm9scyB3aXRoIGNvbG9ucywgZS5nLiBgYDpmb29gYCB0byBiZSBib3VuZCBwYXJhbWV0ZXJzLgogICAgICAgICAgICAgICBUbyBhdm9pZCB0aGlzLCBlbnN1cmUgdGhhdCBjb2xvbiBzeW1ib2xzIGFyZSBlc2NhcGVkLCBlLmcuCiAgICAgICAgICAgICAgIGBgXDpmb29gYC4KCiAgICAgICAgICAgIDpwYXJhbSBleGVjdXRpb25fb3B0aW9uczogT3B0aW9uYWwgZGljdGlvbmFyeSBvZgogICAgICAgICAgICAgZXhlY3V0aW9uIG9wdGlvbnMsIHdpbGwgYmUgcGFzc2VkIHRvCiAgICAgICAgICAgICA6bWV0aDpgc3FsYWxjaGVteS5lbmdpbmUuQ29ubmVjdGlvbi5leGVjdXRpb25fb3B0aW9uc2AuCiAgICAgICAgICAgIE5yVQAAAKkDcksAAADaB3NxbHRleHRyFQEAAHMDAAAAICAgckwAAADaB2V4ZWN1dGV6Ek9wZXJhdGlvbnMuZXhl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AGUAWgFkAFoCVQBkAVoDZAJlBGQDPAAAAGQaZASEBFoFZQZyzmQFZAVkBpwCCQAJAAkACQAJAAkACQBkG2QHhAZaB2QFZAhkCGQFZAVkBWQIZAVkBWQFZAVkCZwLCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAZBxkCoQGWggJAAkACQAJAAkACQAJAAkAZB1kC4QEWgkJAAkACQAJAAkACQAJAAkAZB5kDIQEWgpkBWQFZAVkBWQFZAVkDZwGCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAGQfZA6EBloLCQAJAAkACQAJAAkACQAJAGQgZA+EBFoMCQAJAAkACQAJAAkAZCFkEIQEWg1kBWQRnAEJAAkACQAJAAkAZCJkEoQGWg4JAAkACQAJAAkACQAJAAkAZCNkE4QEWg9kJGQUhARaEAkAZCUJAAkACQAJAAkAZCZkFYQFWhFkJ2QWhARaEmQFZBGcAQkACQAJAGQoZBeEBloTZAVkGJwBCQAJAAkACQAJAGQpZBmEBloUeQV5BSkqckAAAABhtAEAAE1vZGlmaWVzIHRoZSBpbnRlcmZhY2UgOmNsYXNzOmAuT3BlcmF0aW9uc2AgZm9yIGJhdGNoIG1vZGUuCgogICAgVGhpcyBiYXNpY2FsbHkgb21pdHMgdGhlIGBgdGFibGVfbmFtZWBgIGFuZCBgYHNjaGVtYWBgIHBhcmFtZXRlcnMKICAgIGZyb20gYXNzb2NpYXRlZCBtZXRob2RzLCBhcyB0aGVzZSBhcmUgYSBnaXZlbiB3aGVuIHJ1bm5pbmcgdW5kZXIgYmF0Y2gKICAgIG1vZGUuCgogICAgLi4gc2VlYWxzbzo6CgogICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5iYXRjaF9hbHRlcl90YWJsZWAKCiAgICBOb3RlIHRoYXQgYXMgb2YgMC44LCBtb3N0IG9mIHRoZSBtZXRob2RzIG9uIHRoaXMgY2xhc3MgYXJlIHByb2R1Y2VkCiAgICBkeW5hbWljYWxseSB1c2luZyB0aGUgOm1ldGg6YC5PcGVyYXRpb25zLnJlZ2lzdGVyX29wZXJhdGlvbmAKICAgIG1ldGhvZC4KCiAgICBy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YSAiY3JlYXRlIGZvcmVpZ24ga2V5IiBpbnN0cnVjdGlvbiB1c2luZyB0aGUKICAgICAgICAgICAgY3VycmVudCBiYXRjaCBtaWdyYXRpb24gY29udGV4dC4KCiAgICAgICAgICAgIFRoZSBiYXRjaCBmb3JtIG9mIHRoaXMgY2FsbCBvbWl0cyB0aGUgYGBzb3VyY2VgYCBhbmQgYGBzb3VyY2Vfc2NoZW1hYGAKICAgICAgICAgICAgYXJndW1lbnRzIGZyb20gdGhlIGNhbGwuCgogICAgICAgICAgICBlLmcuOjoKCiAgICAgICAgICAgICAgICB3aXRoIGJhdGNoX2FsdGVyX3RhYmxlKCJhZGRyZXNzIikgYXMgYmF0Y2hfb3A6CiAgICAgICAgICAgICAgICAgICAgYmF0Y2hfb3AuY3JlYXRlX2ZvcmVpZ25fa2V5KAogICAgICAgICAgICAgICAgICAgICAgICAiZmtfdXNlcl9hZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInVzZXIiLAogICAgICAgICAgICAgICAgICAgICAgICBbInVzZXJfaWQiXSwKICAgICAgICAgICAgICAgICAgICAgICAgWyJpZCJdLAogICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgICAgIDptZXRoOmAuT3BlcmF0aW9ucy5jcmVhdGVfZm9yZWlnbl9rZXlgCgogICAgICAgICAgICBOclUAAAApDHJLAAAAcuYAAABy9QAAAHL2AAAAcvcAAABy8gAAAHLsAAAAcu0AAABy7gAAAHLvAAAAcvAAAABy+AAAAHMMAAAAICAgICAgICAgICAgckwAAABy+QAAAHoiQmF0Y2hPcGVyYXRpb25zLmNyZWF0ZV9mb3JlaWduX2tlecoGAAByDwEAAHJOAAAAYwMAAAAAAAAAAAAAAAAAAAALAAAB8wQAAACXAHkBKQJ6s0lzc3VlIGEgImNyZWF0ZSBpbmRleCIgaW5zdHJ1Y3Rpb24gdXNpbmcgdGhlCiAgICAgICAgICAgIGN1cnJlbnQgYmF0Y2ggbWlncmF0aW9uIGNvbnRleHQuCgogICAgICAgICAgICAuLiBzZWVhbHNvOjoK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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 6
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
base.cpython-312.pyc
76.03 KB
lrw-r--r--
2025-04-04 08:02:08
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
batch.cpython-312.pyc
30.64 KB
lrw-r--r--
2025-04-04 08:02:08
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
ops.cpython-312.pyc
107.28 KB
lrw-r--r--
2025-04-04 08:02:08
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schemaobj.cpython-312.pyc
11.58 KB
lrw-r--r--
2025-04-04 08:02:08
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
toimpl.cpython-312.pyc
10.89 KB
lrw-r--r--
2025-04-04 08:02:08
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-312.pyc
461 B
lrw-r--r--
2025-04-04 08:02:08
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).