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DIMBfQ1XAG5SBAB0BGsKctwBAH0OAQB6NogBcrJ0BXQDZAeDAYgAZAiNAgEAbhh0BXQDZAmDAWoGfA5kCo0BiABkCI0CAQB3WlcAWQBkBGQEfQ5+DlgAbgJYAHwDc+Z8DVMAeBJ8CnwDgwF9D3wPcuhQAHHoVwB8DHwPawKQAXIIfA1TAHQFdANkC4MBiABkCI0CAQBxWlcAZARTACkMYSEHAABQcm9tcHRzIGEgdXNlciBmb3IgaW5wdXQuICBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjYW4KICAgIGJlIHVzZWQgdG8gcHJvbXB0IGEgdXNlciBmb3IgaW5wdXQgbGF0ZXIuCgogICAgSWYgdGhlIHVzZXIgYWJvcnRzIHRoZSBpbnB1dCBieSBzZW5kaW5nIGFuIGludGVycnVwdCBzaWduYWwsIHRoaXMKICAgIGZ1bmN0aW9uIHdpbGwgY2F0Y2ggaXQgYW5kIHJhaXNlIGEgOmV4YzpgQWJvcnRgIGV4Y2VwdGlvbi4KCiAgICA6cGFyYW0gdGV4dDogdGhlIHRleHQgdG8gc2hvdyBmb3IgdGhlIHByb21wdC4KICAgIDpwYXJhbSBkZWZhdWx0OiB0aGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgbm8gaW5wdXQgaGFwcGVucy4gIElmIHRoaXMKICAgICAgICAgICAgICAgICAgICBpcyBub3QgZ2l2ZW4gaXQgd2lsbCBwcm9tcHQgdW50aWwgaXQncyBhYm9ydGVkLgogICAgOnBhcmFtIGhpZGVfaW5wdXQ6IGlmIHRoaXMgaXMgc2V0IHRvIHRydWUgdGhlbiB0aGUgaW5wdXQgdmFsdWUgd2lsbAogICAgICAgICAgICAgICAgICAgICAgIGJlIGhpZGRlbi4KICAgIDpwYXJhbSBjb25maXJtYXRpb25fcHJvbXB0OiBQcm9tcHQgYSBzZWNvbmQgdGltZSB0byBjb25maXJtIHRoZQogICAgICAgIHZhbHVlLiBDYW4gYmUgc2V0IHRvIGEgc3RyaW5nIGluc3RlYWQgb2YgYGBUcnVlYGAgdG8gY3VzdG9taXplCiAgICAgICAgdGhlIG1lc3NhZ2UuCiAgICA6cGFyYW0gdHlwZTogdGhlIHR5cGUgdG8gdXNlIHRvIGNoZWNrIHRoZSB2YWx1ZSBhZ2FpbnN0LgogICAgOnBhcmFtIHZhbHVlX3Byb2M6IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkIGl0J3MgYSBmdW5jdGlvbiB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAgaXMgaW52b2tlZCBpbnN0ZWFkIG9mIHRoZSB0eXBlIGNvbnZlcnNpb24gdG8KICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0IGEgdmFsdWUuCiAgICA6cGFyYW0gcHJvbXB0X3N1ZmZpeDogYSBzdWZmaXggdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHByb21wdC4KICAgIDpwYXJhbSBzaG93X2RlZmF1bHQ6IHNob3dzIG9yIGhpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIGluIHRoZSBwcm9tcHQuCiAgICA6cGFyYW0gZXJyOiBpZiBzZXQgdG8gdHJ1ZSB0aGUgZmlsZSBkZWZhdWx0cyB0byBgYHN0ZGVycmBgIGluc3RlYWQgb2YKICAgICAgICAgICAgICAgIGBgc3Rkb3V0YGAsIHRoZSBzYW1lIGFzIHdpdGggZWNoby4KICAgIDpwYXJhbSBzaG93X2Nob2ljZXM6IFNob3cgb3IgaGlkZSBjaG9pY2VzIGlmIHRoZSBwYXNzZWQgdHlwZSBpcyBhIENob2ljZS4KICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlIGlmIHR5cGUgaXMgYSBDaG9pY2Ugb2YgZWl0aGVyIGRheSBvciB3ZWVrLAogICAgICAgICAgICAgICAgICAgICAgICAgc2hvd19jaG9pY2VzIGlzIHRydWUgYW5kIHRleHQgaXMgIkdyb3VwIGJ5IiB0aGVuIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0IHdpbGwgYmUgIkdyb3VwIGJ5IChkYXksIHdlZWspOiAiLgoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDguMAogICAgICAgIGBgY29uZmlybWF0aW9uX3Byb21wdGBgIGNhbiBiZSBhIGN1c3RvbSBzdHJpbmcuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogNy4wCiAgICAg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ACkBTikCcjkAAAByPAAAACkC2gIuMNoCZWxyLgAAAHIuAAAAci8AAAD6CTxnZW5leHByPikBAABzAgAAAAQAeiFlY2hvX3ZpYV9wYWdlci48bG9jYWxzPi48Z2VuZXhwcj5yAwAAACkB2gVwYWdlctoBCikOcgkAAADaB2luc3BlY3TaE2lzZ2VuZXJhdG9yZnVuY3Rpb27aAXTaBGNhc3TaCENhbGxhYmxl2ghJdGVyYWJsZXI8AAAAcjkAAADaBGl0ZXLaDF90ZXJtdWlfaW1wbHJtAAAA2glpdGVydG9vbHPaBWNoYWluKQVyaAAAAHJpAAAA2gFpWg50ZXh0X2dlbmVyYXRvcnJtAAAAci4AAAByLgAAAHIvAAAA2g5lY2hvX3ZpYV9wYWdlchABAABzEgAAAAAPCAIKASABCgEIAhYDDgIMAnJ6AAAA+gEj+gEt+h4lKGxhYmVsKXMgIFslKGJhcilzXSAgJShpbmZvKXP6AiAgeg5Qcm9ncmVzc0JhcltWXSkQ2ghpdGVyYWJsZdoGbGVuZ3Ro2gVsYWJlbNoIc2hvd19ldGHaDHNob3dfcGVyY2VudNoIc2hvd19wb3PaDml0ZW1fc2hvd19mdW5j2glmaWxsX2NoYXLaCmVtcHR5X2NoYXLaDGJhcl90ZW1wbGF0ZdoIaW5mb19zZXDaBXdpZHRo2gRmaWxlcmkAAADaEHVwZGF0ZV9taW5fc3RlcHNyLAAAAGMPAAAAAAAAABAAAAARAAAAQwAAAHM6AAAAZAFkAmwAbQF9DwEAdAJ8DYMBfQ18D3wAfAF8A3wEfAV8BnwHfAh8CXwKfAx8AnwLfA18DmQDjQ9TACkEYVEVAABUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gaXRlcmFibGUgY29udGV4dCBtYW5hZ2VyIHRoYXQgY2FuIGJlIHVzZWQKICAgIHRvIGl0ZXJhdGUgb3ZlciBzb21ldGhpbmcgd2hpbGUgc2hvd2luZyBhIHByb2dyZXNzIGJhci4gIEl0IHdpbGwKICAgIGVpdGhlciBpdGVyYXRlIG92ZXIgdGhlIGBpdGVyYWJsZWAgb3IgYGxlbmd0aGAgaXRlbXMgKHRoYXQgYXJlIGNvdW50ZWQKICAgIHVwKS4gIFdoaWxlIGl0ZXJhdGlvbiBoYXBwZW5zLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJpbnQgYSByZW5kZXJlZAogICAgcHJvZ3Jlc3MgYmFyIHRvIHRoZSBnaXZlbiBgZmlsZWAgKGRlZmF1bHRzIHRvIHN0ZG91dCkgYW5kIHdpbGwgYXR0ZW1wdAogICAgdG8gY2FsY3VsYXRlIHJlbWFpbmluZyB0aW1lIGFuZCBtb3JlLiAgQnkgZGVmYXVsdCwgdGhpcyBwcm9ncmVzcyBiYXIKICAgIHdpbGwgbm90IGJlIHJlbmRlcmVkIGlmIHRoZSBmaWxlIGlzIG5vdCBhIHRlcm1pbmFsLgoKICAgIFRoZSBjb250ZXh0IG1hbmFnZXIgY3JlYXRlcyB0aGUgcHJvZ3Jlc3MgYmFyLiAgV2hlbiB0aGUgY29udGV4dAogICAgbWFuYWdlciBpcyBlbnRlcmVkIHRoZSBwcm9ncmVzcyBiYXIgaXMgYWxyZWFkeSBjcmVhdGVkLiAgV2l0aCBldmVyeQogICAgaXRlcmF0aW9uIG92ZXIgdGhlIHByb2dyZXNzIGJhciwgdGhlIGl0ZXJhYmxlIHBhc3NlZCB0byB0aGUgYmFyIGlzCiAgICBhZHZhbmNlZCBhbmQgdGhlIGJhciBpcyB1cGRhdGVkLiAgV2hlbiB0aGUgY29udGV4dCBtYW5hZ2VyIGV4aXRzLAogICAgYSBuZXdsaW5lIGlzIHByaW50ZWQgYW5kIHRoZSBwcm9ncmVzcyBiYXIgaXMgZmluYWxpemVkIG9uIHNjcmVlbi4KCiAgICBOb3RlOiBUaGUgcHJvZ3Jlc3MgYmFyIGlzIGN1cnJlbnRseSBkZXNpZ25lZCBmb3IgdXNlIGNhc2VzIHdoZXJlIHRoZQogICAgdG90YWwgcHJvZ3Jlc3MgY2FuIGJlIGV4cGVjdGVkIHRvIHRha2UgYXQgbGVhc3Qgc2V2ZXJhbCBzZWNvbmRzLgogICAgQmVjYXVzZSBvZiB0aGlzLCB0aGUgUHJvZ3Jlc3NCYXIgY2xhc3Mgb2JqZWN0IHdvbid0IGRpc3BsYXkKICAgIHByb2dyZXNzIHRoYXQgaXMgY29uc2lkZXJlZCB0b28gZmFzdCwgYW5kIHByb2dyZXNzIHdoZXJlIHRoZSB0aW1lCiAgICBiZXR3ZWVuIHN0ZXBzIGlzIGxlc3MgdGhhbiBhIHNlY29uZC4KCiAgICBObyBwcmludGluZyBtdXN0IGhhcHBlbiBvciB0aGUgcHJvZ3Jlc3MgYmFyIHdpbGwgYmUgdW5pbnRlbnRpb25hbGx5CiAgICBkZXN0cm95ZWQuCgogICAgRXhhbXBsZSB1c2FnZTo6CgogICAgICAgIHdpdGggcHJvZ3Jlc3NiYXIoaXRlbXMpIGFzIGJhcjoKICAgICAgICAgICAgZm9yIGl0ZW0gaW4gYmFyOgogICAgICAgICAgICAgICAgZG9fc29tZXRoaW5nX3dpdGgoaXRlbSkKCiAgICBBbHRlcm5hdGl2ZWx5LCBpZiBubyBpdGVyYWJsZSBpcyBzcGVjaWZpZWQsIG9uZSBjYW4gbWFudWFsbHkgdXBkYXRlIHRoZQogICAgcHJvZ3Jlc3MgYmFyIHRocm91Z2ggdGhlIGB1cGRhdGUoKWAgbWV0aG9kIGluc3RlYWQgb2YgZGlyZWN0bHkKICAgIGl0ZXJhdGluZyBvdmVyIHRoZSBwcm9ncmVzcyBiYXIuICBUaGUgdXBkYXRlIG1ldGhvZCBhY2NlcHRzIHRoZSBudW1iZXIKICAgIG9mIHN0ZXBzIHRvIGluY3JlbWVudCB0aGUgYmFyIHdpdGg6OgoKICAgICAgICB3aXRoIHByb2dyZXNzYmFyKGxlbmd0aD1jaHVua3MudG90YWxfYnl0ZXMpIGFzIGJhcjoKICAgICAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKICAgICAgICAgICAgICAgIHByb2Nlc3NfY2h1bmsoY2h1bmspCiAgICAgICAgICAgICAgICBiYXIudXBkYXRlKGNodW5rcy5ieXRlcykKCiAgICBUaGUgYGB1cGRhdGUoKWBgIG1ldGhvZCBhbHNvIHRha2VzIGFuIG9wdGlvbmFsIHZhbHVlIHNwZWNpZnlpbmcgdGhlCiAgICBgYGN1cnJlbnRfaXRlbWBgIGF0IHRoZSBuZXcgcG9zaXRpb24uIFRoaXMgaXMgdXNlZnVsIHdoZW4gdXNlZAogICAgdG9nZXRoZXIgd2l0aCBgYGl0ZW1fc2hvd19mdW5jYGAgdG8gY3VzdG9taXplIHRoZSBvdXRwdXQgZm9yIGVhY2gKICAgIG1hbnVhbCBzdGVwOjoKCiAgICAgICAgd2l0aCBjbGljay5wcm9ncmVzc2JhcigKICAgICAgICAgICAgbGVuZ3RoPXRvdGFsX3NpemUsCiAgICAgICAgICAgIGxhYmVsPSdVbnppcHBpbmcgYXJjaGl2ZScsCiAgICAgICAgICAgIGl0ZW1fc2hvd19mdW5jPWxhbWJkYSBhOiBhLmZpbGVuYW1lCiAgICAgICAgKSBhcyBiYXI6CiAgICAgICAgICAgIGZvciBhcmNoaXZlIGluIHppcF9maWxlOgogICAgICAgICAgICAgICAgYXJjaGl2ZS5leHRyYWN0KCkKICAgICAgICAgICAgICAgIGJhci51cGRhdGUoYXJjaGl2ZS5zaXplLCBhcmNoaXZlKQoKICAgIDpwYXJhbSBpdGVyYWJsZTogYW4gaXRlcmFibGUgdG8gaXRlcmF0ZSBvdmVyLiAgSWYgbm90IHByb3ZpZGVkIHRoZSBsZW5ndGgKICAgICAgICAgICAgICAgICAgICAgaXMgcmVxdWlyZWQuCiAgICA6cGFyYW0gbGVuZ3RoOiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGl0ZXJhdGUgb3Zlci4gIEJ5IGRlZmF1bHQgdGhlCiAgICAgICAgICAgICAgICAgICBwcm9ncmVzc2JhciB3aWxsIGF0dGVtcHQgdG8gYXNrIHRoZSBpdGVyYXRvciBhYm91dCBpdHMKICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgd2hpY2ggbWlnaHQgb3IgbWlnaHQgbm90IHdvcmsuICBJZiBhbiBpdGVyYWJsZSBpcwogICAgICAgICAgICAgICAgICAgYWxzbyBwcm92aWRlZCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUKICAgICAgICAgICAgICAgICAgIGxlbmd0aC4gIElmIGFuIGl0ZXJhYmxlIGlzIG5vdCBwcm92aWRlZCB0aGUgcHJvZ3Jlc3MgYmFyCiAgICAgICAgICAgICAgICAgICB3aWxsIGl0ZXJhdGUgb3ZlciBhIHJhbmdlIG9mIHRoYXQgbGVuZ3RoLgogICAgOnBhcmFtIGxhYmVsOiB0aGUgbGFiZWwgdG8gc2hvdyBuZXh0IHRvIHRoZSBwcm9ncmVzcyBiYXIuCiAgICA6cGFyYW0gc2hvd19ldGE6IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGVzdGltYXRlZCB0aW1lIGRpc3BsYXkuICBUaGlzIGlzCiAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYgdGhlIGxlbmd0aCBjYW5ub3QgYmUKICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lZC4KICAgIDpwYXJhbSBzaG93X3BlcmNlbnQ6IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHBlcmNlbnRhZ2UgZGlzcGxheS4gIFRoZQogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBgVHJ1ZWAgaWYgdGhlIGl0ZXJhYmxlIGhhcyBhIGxlbmd0aCBvcgogICAgICAgICAgICAgICAgICAgICAgICAgYEZhbHNlYCBpZiBub3QuCiAgICA6cGFyYW0gc2hvd19wb3M6IGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGFic29sdXRlIHBvc2l0aW9uIGRpc3BsYXkuICBUaGUKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBgRmFsc2VgLgogICAgOnBhcmFtIGl0ZW1fc2hvd19mdW5jOiBBIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2gKICAgICAgICBjYW4gcmV0dXJuIGEgc3RyaW5nIHRvIHNob3cgbmV4dCB0byB0aGUgcHJvZ3Jlc3MgYmFyLiBJZiB0aGUKICAgICAgICBmdW5jdGlvbiByZXR1cm5zIGBgTm9uZWBgIG5vdGhpbmcgaXMgc2hvd24uIFRoZSBjdXJyZW50IGl0ZW0gY2FuCiAgICAgICAgYmUgYGBOb25lYGAsIHN1Y2ggYXMgd2hlbiBlbnRlcmluZyBhbmQgZXhpdGluZyB0aGUgYmFyLgogICAgOnBhcmFtIGZpbGxfY2hhcjogdGhlIGNoYXJhY3RlciB0byB1c2UgdG8gc2hvdyB0aGUgZmlsbGVkIHBhcnQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyBiYXIuCiAgICA6cGFyYW0gZW1wdHlfY2hhcjogdGhlIGNoYXJhY3RlciB0byB1c2UgdG8gc2hvdyB0aGUgbm9uLWZpbGxlZCBwYXJ0IG9mCiAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByb2dyZXNzIGJhci4KICAgIDpwYXJhbSBiYXJfdGVtcGxhdGU6IHRoZSBmb3JtYXQgc3RyaW5nIHRvIHVzZSBhcyB0ZW1wbGF0ZSBmb3IgdGhlIGJhci4KICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBwYXJhbWV0ZXJzIGluIGl0IGFyZSBgYGxhYmVsYGAgZm9yIHRoZSBsYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGBgYmFyYGAgZm9yIHRoZSBwcm9ncmVzcyBiYXIgYW5kIGBgaW5mb2BgIGZvciB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gc2VjdGlvbi4KICAgIDpwYXJhbSBpbmZvX3NlcDogdGhlIHNlcGFyYXRvciBiZXR3ZWVuIG11bHRpcGxlIGluZm8gaXRlbXMgKGV0YSBldGMuKQogICAgOnBhcmFtIHdpZHRoOiB0aGUgd2lkdGggb2YgdGhlIHByb2dyZXNzIGJhciBpbiBjaGFyYWN0ZXJzLCAwIG1lYW5zIGZ1bGwKICAgICAgICAgICAgICAgICAgdGVybWluYWwgd2lkdGgKICAgIDpwYXJhbSBmaWxlOiBUaGUgZmlsZSB0byB3cml0ZSB0by4gSWYgdGhpcyBpcyBub3QgYSB0ZXJtaW5hbCB0aGVuCiAgICAgICAgb25seSB0aGUgbGFiZWwgaXMgcHJpbnRlZC4KICAgIDpwYXJhbSBjb2xvcjogY29udHJvbHMgaWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIEFOU0kgY29sb3JzIG9yIG5vdC4gIFRoZQogICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzIGF1dG9kZXRlY3Rpb24uICBUaGlzIGlzIG9ubHkgbmVlZGVkIGlmIEFOU0kKICAgICAgICAgICAgICAgICAgY29kZXMgYXJlIGluY2x1ZGVkIGFueXdoZXJlIGluIHRoZSBwcm9ncmVzcyBiYXIgb3V0cHV0CiAgICAgICAgICAgICAgICAgIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBieSBkZWZhdWx0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AGMMAAAAAAAAAA0AAAAUAAAAQwAAAHPqAQAAdAB8AHQBgwJzEnQBfACDAX0AZwB9DHwBclp5GnwMagJkAXQDfAGDAZsAZAKdA4MBAQBXAG4kBAB0BGsKclgBAAEAAQB0BWQDfAGbAp0CgwFkBIICWQBuAlgAfAJyoHkcfAxqAmQBdAN8AmQFgwKbAGQCnQODAQEAVwBuJAQAdARrCnKeAQABAAEAdAVkA3wCmwKdAoMBZASCAlkAbgJYAHwDZARrCXLCfAxqAmQBfANytmQGbgJkB5sAZAKdA4MBAQB8BGQEawly5HwMagJkAXwEcthkCG4CZAebAGQCnQODAQEAfAVkBGsJkAFyCHwMagJkAXwFcvxkCW4CZAqbAGQCnQODAQEAfAZkBGsJkAFyLnwMagJkAXwGkAFyImQLbgJkDJsAZAKdA4MBAQB8B2QEawmQAXJUfAxqAmQBfAeQAXJIZA1uAmQOmwBkAp0DgwEBAHwIZARrCZABcnp8DGoCZAF8CJABcm5kD24CZBCbAGQCnQODAQEAfAlkBGsJkAFyoHwMagJkAXwJkAFylGQRbgJkEpsAZAKdA4MBAQB8CmQEawmQAXLGfAxqAmQBfAqQAXK6ZBNuAmQUmwBkAp0DgwEBAHwMagJ8AIMBAQB8C5ABcuB8DGoCdAaDAQEAZBVqB3wMgwFTACkWYSELAABTdHlsZXMgYSB0ZXh0IHdpdGggQU5TSSBzdHlsZXMgYW5kIHJldHVybnMgdGhlIG5ldyBzdHJpbmcuICBCeQogICAgZGVmYXVsdCB0aGUgc3R5bGluZyBpcyBzZWxmIGNvbnRhaW5lZCB3aGljaCBtZWFucyB0aGF0IGF0IHRoZSBlbmQKICAgIG9mIHRoZSBzdHJpbmcgYSByZXNldCBjb2RlIGlzIGlzc3VlZC4gIFRoaXMgY2FuIGJlIHByZXZlbnRlZCBieQogICAgcGFzc2luZyBgYHJlc2V0PUZhbHNlYGAuCgogICAgRXhhbXBsZXM6OgoKICAgICAgICBjbGljay5lY2hvKGNsaWNrLnN0eWxlKCdIZWxsbyBXb3JsZCEnLCBmZz0nZ3JlZW4nKSkKICAgICAgICBjbGljay5lY2hvKGNsaWNrLnN0eWxlKCdBVFRFTlRJT04hJywgYmxpbms9VHJ1ZSkpCiAgICAgICAgY2xpY2suZWNobyhjbGljay5zdHlsZSgnU29tZSB0aGluZ3MnLCByZXZlcnNlPVRydWUsIGZnPSdjeWFuJykpCiAgICAgICAgY2xpY2suZWNobyhjbGljay5zdHlsZSgnTW9yZSBjb2xvcnMnLCBmZz0oMjU1LCAxMiwgMTI4KSwgYmc9MTE3KSkKCiAgICBTdXBwb3J0ZWQgY29sb3IgbmFtZXM6CgogICAgKiBgYGJsYWNrYGAgKG1pZ2h0IGJlIGEgZ3JheSkKICAgICogYGByZWRgYAogICAgKiBgYGdyZWVuYGAKICAgICogYGB5ZWxsb3dgYCAobWlnaHQgYmUgYW4gb3JhbmdlKQogICAgKiBgYGJsdWVgYAogICAgKiBgYG1hZ2VudGFgYAogICAgKiBgYGN5YW5gYAogICAgKiBgYHdoaXRlYGAgKG1pZ2h0IGJlIGxpZ2h0IGdyYXkpCiAgICAqIGBgYnJpZ2h0X2JsYWNrYGAKICAgICogYGBicmlnaHRfcmVkYGAKICAgICogYGBicmlnaHRfZ3JlZW5gYAogICAgKiBgYGJyaWdodF95ZWxsb3dgYAogICAgKiBgYGJyaWdodF9ibHVlYGAKICAgICogYGBicmlnaHRfbWFnZW50YWBgCiAgICAqIGBgYnJpZ2h0X2N5YW5gYAogICAgKiBgYGJyaWdodF93aGl0ZWBgCiAgICAqIGBgcmVzZXRgYCAocmVzZXQgdGhlIGNvbG9yIGNvZGUgb25seSkKCiAgICBJZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgaXQsIGNvbG9yIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhczoKCiAgICAtICAgQW4gaW50ZWdlciBpbiB0aGUgaW50ZXJ2YWwgWzAsIDI1NV0uIFRoZSB0ZXJtaW5hbCBtdXN0IHN1cHBvcnQKICAgICAgICA4LWJpdC8yNTYtY29sb3IgbW9kZS4KICAgIC0gICBBbiBSR0IgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnMgaW4gWzAsIDI1NV0uIFRoZSB0ZXJtaW5hbCBtdXN0CiAgICAgICAgc3VwcG9ydCAyNC1iaXQvdHJ1ZS1jb2xvciBtb2RlLgoKICAgIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2NvbG9yIGFuZAogICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vWFZpbGthLzgzNDY3MjggZm9yIG1vcmUgaW5mb3JtYXRpb24uCgogICAgOnBhcmFtIHRleHQ6IHRoZSBzdHJpbmcgdG8gc3R5bGUgd2l0aCBhbnNpIGNvZGVzLgogICAgOnBhcmFtIGZnOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgYmVjb21lIHRoZSBmb3JlZ3JvdW5kIGNvbG9yLgogICAgOnBhcmFtIGJnOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgYmVjb21lIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgogICAgOnBhcmFtIGJvbGQ6IGlmIHByb3ZpZGVkIHRoaXMgd2lsbCBlbmFibGUgb3IgZGlzYWJsZSBib2xkIG1vZGUuCiAgICA6cGFyYW0gZGltOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgZGltIG1vZGUuICBUaGlzIGlzCiAgICAgICAgICAgICAgICBiYWRseSBzdXBwb3J0ZWQuCiAgICA6cGFyYW0gdW5kZXJsaW5lOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgdW5kZXJsaW5lLgogICAgOnBhcmFtIG92ZXJsaW5lOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgb3ZlcmxpbmUuCiAgICA6cGFyYW0gaXRhbGljOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgaXRhbGljLgogICAgOnBhcmFtIGJsaW5rOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgYmxpbmtpbmcuCiAgICA6cGFyYW0gcmV2ZXJzZTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGludmVyc2UKICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcgKGZvcmVncm91bmQgYmVjb21lcyBiYWNrZ3JvdW5kIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICBvdGhlciB3YXkgcm91bmQpLgogICAgOnBh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ZXJhdGluZwogICAgc3lzdGVtIHNlYXJjaCBwYXRoIGlzIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGV4ZWN1dGFibGUpIGl0IG92ZXJyaWRlcwogICAgdGhlIGRldGVjdGVkIGVkaXRvci4gIE9wdGlvbmFsbHksIHNvbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZQogICAgdXNlZC4gIElmIHRoZSBlZGl0b3IgaXMgY2xvc2VkIHdpdGhvdXQgY2hhbmdlcywgYE5vbmVgIGlzIHJldHVybmVkLiAgSW4KICAgIGNhc2UgYSBmaWxlIGlzIGVkaXRlZCBkaXJlY3RseSB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBgTm9uZWAgYW5kCiAgICBgcmVxdWlyZV9zYXZlYCBhbmQgYGV4dGVuc2lvbmAgYXJlIGlnbm9yZWQuCgogICAgSWYgdGhlIGVkaXRvciBjYW5ub3QgYmUgb3BlbmVkIGEgOmV4YzpgVXNhZ2VFcnJvcmAgaXMgcmFpc2VkLgoKICAgIE5vdGUgZm9yIFdpbmRvd3M6IHRvIHNpbXBsaWZ5IGNyb3NzLXBsYXRmb3JtIHVzYWdlLCB0aGUgbmV3bGluZXMgYXJlCiAgICBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBmcm9tIFBPU0lYIHRvIFdpbmRvd3MgYW5kIHZpY2UgdmVyc2EuICBBcyBzdWNoLAogICAgdGhlIG1lc3NhZ2UgaGVyZSB3aWxsIGhhdmUgYGBcbmBgIGFzIG5ld2xpbmUgbWFya2Vycy4KCiAgICA6cGFyYW0gdGV4dDogdGhlIHRleHQgdG8gZWRpdC4KICAgIDpwYXJhbSBlZGl0b3I6IG9wdGlvbmFsbHkgdGhlIGVkaXRvciB0byB1c2UuICBEZWZhdWx0cyB0byBhdXRvbWF0aWMKICAgICAgICAgICAgICAgICAgIGRldGVjdGlvbi4KICAgIDpwYXJhbSBlbnY6IGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBmb3J3YXJkIHRvIHRoZSBlZGl0b3IuCiAgICA6cGFyYW0gcmVxdWlyZV9zYXZlOiBpZiB0aGlzIGlzIHRydWUsIHRoZW4gbm90IHNhdmluZyBpbiB0aGUgZWRpdG9yCiAg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dW5jaMECAABzBAAAAAAYDAJy0gAAACkCcg0AAAByLAAAAGMBAAAAAAAAAAIAAAACAAAAQwAAAHMgAAAAdABkAWsIchhkAmQDbAFtAn0BAQB8AWEAdAB8AIMBUwApBGGGAwAARmV0Y2hlcyBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSB0aGUgdGVybWluYWwgYW5kIHJldHVybnMgaXQuICBUaGlzCiAgICB3aWxsIGFsd2F5cyByZXR1cm4gYSB1bmljb2RlIGNoYXJhY3RlciBhbmQgdW5kZXIgY2VydGFpbiByYXJlCiAgICBjaXJjdW1zdGFuY2VzIHRoaXMgbWlnaHQgcmV0dXJuIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyLiAgVGhlCiAgICBzaXR1YXRpb25zIHdoaWNoIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyIGlzIHJldHVybmVkIGlzIHdoZW4gZm9yCiAgICB3aGF0ZXZlciByZWFzb24gbXVsdGlwbGUgY2hhcmFjdGVycyBlbmQgdXAgaW4gdGhlIHRlcm1pbmFsIGJ1ZmZlciBvcgogICAgc3RhbmRhcmQgaW5wdXQgd2FzIG5vdCBhY3R1YWxseSBhIHRlcm1pbmFsLgoKICAgIE5vdGUgdGhhdCB0aGlzIHdpbGwgYWx3YXlzIHJlYWQgZnJvbSB0aGUgdGVybWluYWwsIGV2ZW4gaWYgc29tZXRoaW5nCiAgICBpcyBwaXBlZCBpbnRvIHRoZSBzdGFuZGFyZCBpbnB1dC4KCiAgICBOb3RlIGZvciBXaW5kb3dzOiBpbiByYXJlIGNhc2VzIHdoZW4gdHlwaW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCB0aGlzCiAgICBmdW5jdGlvbiBtaWdodCB3YWl0IGZvciBhIHNlY29uZCBjaGFyYWN0ZXIgYW5kIHRoZW4gcmV0dXJuIGJvdGggYXQgb25jZS4KICAgIFRoaXMgaXMgYmVjYXVzZSBjZXJ0YWluIFVuaWNvZGUgY2hhcmFjdGVycyBsb29rIGxpa2Ugc3BlY2lhbC1rZXkgbWFya2Vycy4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjAKCiAgICA6cGFyYW0gZWNobzogaWYgc2V0IHRvIGBUcnVlYCwgdGhlIGNoYXJhY3RlciByZWFkIHdpbGwgYWxzbyBzaG93IHVwIG9uCiAgICAgICAgICAgICAgICAgdGhlIHRlcm1pbmFsLiAgVGhlIGRlZmF1bHQgaXMgdG8gbm90IHNob3cgaXQuCiAgICBOcgMAAAApAdoHZ2V0Y2hhcikD2ghfZ2V0Y2hhcnJ2AAAActMAAAApAnINAAAAclAAAAByLgAAAHIuAAAAci8AAABy0wAAAOMCAABzCAAAAAAWCAEMAgQCctMAAABjAAAAAAAAAAABAAAAAgAAAEMAAABzEgAAAGQBZAJsAG0BfQABAHwAgwBTACkDTnIDAAAAKQHaDHJhd190ZXJtaW5hbCkCcnYAAABy1QAAACkBclAAAAByLgAAAHIuAAAAci8AAABy1QAAAAEDAABzBAAAAAABDAJy1QAAACkD2gRpbmZvckkAAAByLAAAAGMCAAAAAAAAAAIAAAASAAAAQwAAAHN8AAAAdAB0AWoCgwEMAHMYdAB0AWoDgwEMAHIcZAFTAHwAZAFrCHIsdARkAoMBfQB6OnwAckB0BXwAZAN8AWQEjQMBAHkKdAaDAAEAVwBuGAQAdAd0CGYCawpyYgEAAQABAFkAbgJYAFcAZAF8AHJ2dAV8AWQFjQEBAFgAZAFTACkGYSgCAABUaGlzIGNvbW1hbmQgc3RvcHMgZXhlY3V0aW9uIGFuZCB3YWl0cyBmb3IgdGhlIHVzZXIgdG8gcHJlc3MgYW55CiAgICBrZXkgdG8gY29udGludWUuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIFdpbmRvd3MgYmF0Y2ggInBhdXNlIgogICAgY29tbWFuZC4gIElmIHRoZSBwcm9ncmFtIGlzIG5vdCBydW4gdGhyb3VnaCBhIHRlcm1pbmFsLCB0aGlzIGNvbW1hbmQKICAgIHdpbGwgaW5zdGVhZCBkbyBub3RoaW5nLgoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMAoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDQuMAogICAgICAgQWRkZWQgdGhlIGBlcnJgIHBhcmFtZXRlci4KCiAgICA6cGFyYW0gaW5mbzogVGhlIG1lc3NhZ2UgdG8gcHJpbnQgYmVmb3JlIHBhdXNpbmcuIERlZmF1bHRzIHRvCiAgICAgICAgYGAiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiJgYC4KICAgIDpwYXJhbSBlcnI6IGlmIHNldCB0byBtZXNzYWdlIGdvZXMgdG8gYGBzdGRlcnJgYCBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAgICBgYHN0ZG91dGBgLCB0aGUgc2FtZSBhcyB3aXRoIGVjaG8uCiAgICBOehxQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uRikCcksAAABySQAAACkBckkAAAApCXIEAAAAco8AAADaBXN0ZGlucpAAAAByUwAAAHINAAAActMAAAByTgAAAHJPAAAAKQJy1gAAAHJJAAAAci4AAAByLgAAAHIvAAAA2gVwYXVzZQcDAABzGgAAAAAQGAEEAggBCAICAQQBDgECAQoBEgEKAgQBctgAAAApBEZOVE4pCU5GRk5OckQAAABURlQpBUZGckQAAABURikBTikPTk5OVE5GTnJ7AAAAcnwAAAByfQAAAHJ+AAAAchcAAABOTnIDAAAAKQFyAQAAACkLTk5OTk5OTk5OTlQpBU5OVEZOKQZOTk5UcsYAAABOKQJGRikBRikCTkYpRHJvAAAAckEAAABydwAAAHKRAAAAco8AAADaBnR5cGluZ3JxAAAAcgIAAAByUwAAAFoHX2NvbXBhdHIEAAAAcgUAAAByBgAAANoKZXhjZXB0aW9uc3IHAAAAcggAAADaB2dsb2JhbHNyCQAAANoFdHlwZXNyCgAAAHILAAAAcgwAAADaBXV0aWxzcg0AAAByDgAAANoNVFlQRV9DSEVDS0lOR3J2AAAAcg8AAADaB1R5cGVWYXJyEAAAANoFaW5wdXRyTAAAAHJzAAAAcjwAAABynAAAAHK9AAAAcjAAAADaBGJvb2zaCE9wdGlvbmFs2gNBbnlyPwAAAHI+AAAA2gVVbmlvbnIrAAAAcmAAAADaDXRlcm1pbmFsX3NpemVyZwAAAHJ0AAAAcnoAAABymQAAANoGVGV4dElPco0AAABylAAAANoFVHVwbGVyoAAAAHK/AAAAcsAAAADaAklP2gZBbnlTdHJyxQAAANoHTWFwcGluZ3LNAAAActIAAABy1AAAAHLTAAAA2g5Db250ZXh0TWFuYWdlcnLVAAAActgAAAByLgAAAHIuAAAAci4AAAByLwAAANoIPG1vZHVsZT4BAAAAc+wAAAACAAgBCAEIAQgBCAEIAQwCDAEMAQwBDAEMAQwBDAEMAQwBDAEMAgYBDAIKBBQDAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgEIAgQDEAkAAQABAAEcAQ4JFAkAAQABAAEAAQABAAEAAQABTgEQZQABAAEAAQABFAEONhAWLgEOHgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAFqAQ5/AAkOEB4BDg0AAQABAAEAAQABAAEAAQABAAEAAYgBDnQQDQABAAEAAQABKAEEAQ4cAAEAAQABAAEAATIBFicWHxoDEh4UBg==