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DGQNhAFaCWQfZA5kD4QBWgpkIGQQZBGEAVoLZCFkEmQThAFaDGQiZBRkFYQBWg1kI2QWZBeEAVoOZCRkGGQZhAFaD2QaZBuEAFoQZAJTACklchAAAABhugMAAEEgd3JhcHBlciBhcm91bmQgYSBzb3VyY2UgZGlyZWN0b3J5IHRvIGJlIGJ1aWx0IHdpdGggYSBQRVAgNTE3IGJhY2tlbmQuCgogICAgOnBhcmFtIHNvdXJjZV9kaXI6IFRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCBjb250YWluaW5nCiAgICAgICAgcHlwcm9qZWN0LnRvbWwuCiAgICA6cGFyYW0gYnVpbGRfYmFja2VuZDogVGhlIGJ1aWxkIGJhY2tlbmQgc3BlYywgYXMgcGVyIFBFUCA1MTcsIGZyb20KICAgICAgICBweXByb2plY3QudG9tbC4KICAgIDpwYXJhbSBiYWNrZW5kX3BhdGg6IFRoZSBiYWNrZW5kIHBhdGgsIGFzIHBlciBQRVAgNTE3LCBmcm9tIHB5cHJvamVjdC50b21sLgogICAgOnBhcmFtIHJ1bm5lcjogQSBjYWxsYWJsZSB0aGF0IGludm9rZXMgdGhlIHdyYXBwZXIgc3VicHJvY2Vzcy4KICAgIDpwYXJhbSBweXRob25fZXhlY3V0YWJsZTogVGhlIFB5dGhvbiBleGVjdXRhYmxlIHVzZWQgdG8gaW52b2tlIHRoZSBiYWNrZW5kCgogICAgVGhlICdydW5uZXInLCBpZiBwcm92aWRlZCwgbXVzdCBleHBlY3QgdGhlIGZvbGxvd2luZzoKCiAgICAtIGNtZDogYSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBjb21tYW5kIGFuZCBhcmd1bWVudHMgdG8KICAgICAgZXhlY3V0ZSwgYXMgd291bGQgYmUgcGFzc2VkIHRvIGUuZy4gJ3N1YnByb2Nlc3MuY2hlY2tfY2FsbCcuCiAgICAtIGN3ZDogYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGF0IG11c3QgYmUKICAgICAgdXNlZCBmb3IgdGhlIHN1YnByb2Nlc3MuIENvcnJlc3BvbmRzIHRvIHRoZSBwcm92aWRlZCBzb3VyY2VfZGlyLgogICAgLSBleHRyYV9lbnZpcm9uOiBhIGRpY3QgbWFwcGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyB0byB2YWx1ZXMKICAgICAgd2hpY2ggbXVzdCBiZSBzZXQgZm9yIHRoZSBzdWJwcm9jZXNzIGV4ZWN1dGlvbi4KICAgIE5jBgAAAAAAAAAAAAAABgAAAAMAAAADAAAAc1IAAAB8BGQAdQByDHQAfQR0AXwBgwGIAF8CfAKIAF8DfANyMocAZgFkAWQChAh8A0QAgwF9A3wDiABfBHwEiABfBXwFc0h0BmoHfQV8BYgAXwhkAFMAKQNOYwEAAAAAAAAAAAAAAAIAAAAFAAAAEwAAAHMYAAAAZwB8AF0QfQF0AIgAagF8AYMCkQJxBFMAchwAAAApAnJKAAAA2gpzb3VyY2VfZGlyKQLaAi4w2gFwqQFyJQAAAHIcAAAAch0AAADaCjxsaXN0Y29tcD6JAAAAcwIAAAAGAXotUGVwNTE3SG9va0NhbGxlci5fX2luaXRfXy48bG9jYWxzPi48bGlzdGNvbXA+KQlyDgAAAHIDAAAAcksAAADaDWJ1aWxkX2JhY2tlbmRyLgAAANoSX3N1YnByb2Nlc3NfcnVubmVy2gNzeXPaCmV4ZWN1dGFibGXaEXB5dGhvbl9leGVjdXRhYmxlKQZyJQAAAHJLAAAAclAAAAByLgAAANoGcnVubmVyclQAAAByHAAAAHJOAAAAch0AAAByJgAAAHsAAABzGgAAAAAICAEEAgoBBgEEAQoBAv8GAwYBBgEEAQYBehlQZXA1MTdIb29rQ2FsbGVyLl9faW5pdF9fYwIAAAAAAAAAAAAAAAMAAAAIAAAAYwAAAHMqAAAAfABqAH0CfAF8AF8AehBkAVYAAQBXAHwCfABfAG4IfAJ8AF8AMABkAVMAKQJ6XEEgY29udGV4dCBtYW5hZ2VyIGZvciB0ZW1wb3JhcmlseSBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IHN1YnByb2Nlc3MKICAgICAgICBydW5uZXIuCiAgICAgICAgTikBclEAAAApA3IlAAAAclUAAADaBHByZXZyHAAAAHIcAAAAch0AAADaEXN1YnByb2Nlc3NfcnVubmVykgAAAHMKAAAAAAUGAQYBAgEIAnoiUGVwNTE3SG9va0NhbGxlci5zdWJwcm9jZXNzX3J1bm5lcmMBAAAAAAAAAAAAAAABAAAABAAAAEMAAABzDAAAAHwAoABkAWkAoQJTACkCej5SZXR1cm4gdGhlIGxpc3Qgb2Ygb3B0aW9uYWwgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrZW5kLtoTX3N1cHBvcnRlZF9mZWF0dXJlc6kB2gpfY2FsbF9ob29rck4AAAByHAAAAHIcAAAAch0AAAByWAAAAJ4AAABzAgAAAAACeiRQZXA1MTdIb29rQ2FsbGVyLl9zdXBwb3J0ZWRfZmVhdHVyZXNjAgAAAAAAAAAAAAAAAgAAAAUAAABDAAAAcxAAAAB8AKAAZAFkAnwBaQGhAlMAKQNhSQEAAElkZW50aWZ5IHBhY2thZ2VzIHJlcXVpcmVkIGZvciBidWlsZGluZyBhIHdoZWVsCgogICAgICAgIFJldHVybnMgYSBsaXN0IG9mIGRlcGVuZGVuY3kgc3BlY2lmaWNhdGlvbnMsIGUuZy46OgoKICAgICAgICAgICAgWyJ3aGVlbCA+PSAwLjI1IiwgInNldHVwdG9vbHMiXQoKICAgICAgICBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBpbiBweXByb2plY3QudG9tbC4KICAgICAgICBJdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZXF1aXZhbGVudGx5IG5hbWVkIGhvb2sgaW4gYQogICAgICAgIHN1YnByb2Nlc3MuCiAgICAgICAg2hxnZXRfcmVxdWlyZXNfZm9yX2J1aWxkX3doZWVs2g9jb25maWdfc2V0dGluZ3NyWQAAAKkCciUAAAByXAAAAHIcAAAAchwAAAByHQAAAHJbAAAAogAAAHMGAAAAAAsGAQT/ei1QZXA1MTdIb29rQ2FsbGVyLmdldF9yZXF1aXJlc19mb3JfYnVpbGRfd2hlZWxUYwQAAAAAAAAAAAAAAAQAAAAHAAAAQwAAAHMYAAAAfACgAGQBdAF8AYMBfAJ8A2QCnAOhAlMAKQNhdQEAAFByZXBhcmUgYSBgYCouZGlzdC1pbmZvYGAgZm9sZGVyIHdpdGggbWV0YWRhdGEgZm9yIHRoaXMgcHJvamVjdC4KCiAgICAgICAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBmb2xkZXIuCgogICAgICAgIElmIHRoZSBidWlsZCBiYWNrZW5kIGRlZmluZXMgYSBob29rIHdpdGggdGhpcyBuYW1lLCBpdCB3aWxsIGJlIGNhbGxlZAogICAgICAgIGluIGEgc3VicHJvY2Vzcy4gSWYgbm90LCB0aGUgYmFja2VuZCB3aWxsIGJlIGFza2VkIHRvIGJ1aWxkIGEgd2hlZWwsCiAgICAgICAgYW5kIHRoZSBkaXN0LWluZm8gZXh0cmFjdGVkIGZyb20gdGhhdCAodW5sZXNzIF9hbGxvd19mYWxsYmFjayBpcwogICAgICAgIEZhbHNlKS4KICAgICAgICDaIHByZXBhcmVfbWV0YWRhdGFfZm9yX2J1aWxkX3doZWVsqQPaEm1ldGFkYXRhX2RpcmVjdG9yeXJcAAAA2g9fYWxsb3dfZmFsbGJhY2upAnJaAAAAcgMAAACpBHIlAAAAcmAAAAByXAAAAHJhAAAAchwAAAByHAAAAHIdAAAAcl4AAACxAAAAcwoAAAAADAYBBgECAQL9ejFQZXA1MTdIb29rQ2FsbGVyLnByZXBhcmVfbWV0YWRhdGFfZm9yX2J1aWxkX3doZWVsYwQAAAAAAAAAAAAAAAQAAAAHAAAAQwAAAHMoAAAAfANkAXUBchB0AHwDgwF9A3wAoAFkAnQAfAGDAXwCfANkA5wDoQJTACkEYXYBAABCdWlsZCBhIHdoZWVsIGZyb20gdGhpcyBwcm9qZWN0LgoKICAgICAgICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUuCgogICAgICAgIEluIGdlbmVyYWwsIHRoaXMgd2lsbCBjYWxsIHRoZSAnYnVpbGRfd2hlZWwnIGhvb2sgaW4gdGhlIGJhY2tlbmQuCiAgICAgICAgSG93ZXZlciwgaWYgdGhhdCB3YXMgcHJldmlvdXNseSBjYWxsZWQgYnkKICAgICAgICAncHJlcGFyZV9tZXRhZGF0YV9mb3JfYnVpbGRfd2hlZWwnLCBhbmQgdGhlIHNhbWUgbWV0YWRhdGFfZGlyZWN0b3J5IGlzCiAgICAgICAgdXNlZCwgdGhlIHByZXZpb3VzbHkgYnVpbHQgd2hlZWwgd2lsbCBiZSBjb3BpZWQgdG8gd2hlZWxfZGlyZWN0b3J5LgogICAgICAgIE7aC2J1aWxkX3doZWVsqQPaD3doZWVsX2RpcmVjdG9yeXJcAAAAcmAAAACpAnIDAAAAcloAAACpBHIlAAAAcmYAAAByXAAAAHJgAAAAchwAAAByHAAAAHIdAAAAcmQAAADDAAAAcw4AAAAADAgBCAEGAQYBAgEC/XocUGVwNTE3SG9va0NhbGxlci5idWlsZF93aGVlbGMCAAAAAAAAAAAAAAACAAAABQAAAEMAAABzEAAAAHwAoABkAWQCfAFpAaECUwApA2FTAQAASWRlbnRpZnkgcGFja2FnZXMgcmVxdWlyZWQgZm9yIGJ1aWxkaW5nIGFuIGVkaXRhYmxlIHdoZWVsCgogICAgICAgIFJldHVybnMgYSBsaXN0IG9mIGRlcGVuZGVuY3kgc3BlY2lmaWNhdGlvbnMsIGUuZy46OgoKICAgICAgICAgICAgWyJ3aGVlbCA+PSAwLjI1IiwgInNldHVwdG9vbHMiXQoKICAgICAgICBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBpbiBweXByb2plY3QudG9tbC4KICAgICAgICBJdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZXF1aXZhbGVudGx5IG5hbWVkIGhvb2sgaW4gYQogICAgICAgIHN1YnByb2Nlc3MuCiAgICAgICAg2h9nZXRfcmVxdWlyZXNfZm9yX2J1aWxkX2VkaXRhYmxlclwAAAByWQAAAHJdAAAAchwAAAByHAAAAHIdAAAAcmkAAADXAAAAcwYAAAAACwYBBP96MFBlcDUxN0hvb2tDYWxsZXIuZ2V0X3JlcXVpcmVzX2Zvcl9idWlsZF9lZGl0YWJsZWMEAAAAAAAAAAAAAAAEAAAABwAAAEMAAABzGAAAAHwAoABkAXQBfAGDAXwCfANkApwDoQJTACkDYX8BAABQcmVwYXJlIGEgYGAqLmRpc3QtaW5mb2BgIGZvbGRlciB3aXRoIG1ldGFkYXRhIGZvciB0aGlzIHByb2plY3QuCgogICAgICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgZm9sZGVyLgoKICAgICAgICBJZiB0aGUgYnVpbGQgYmFja2VuZCBkZWZpbmVzIGEgaG9vayB3aXRoIHRoaXMgbmFtZSwgaXQgd2lsbCBiZSBjYWxsZWQKICAgICAgICBpbiBhIHN1YnByb2Nlc3MuIElmIG5vdCwgdGhlIGJhY2tlbmQgd2lsbCBiZSBhc2tlZCB0byBidWlsZCBhbiBlZGl0YWJsZQogICAgICAgIHdoZWVsLCBhbmQgdGhlIGRpc3QtaW5mbyBleHRyYWN0ZWQgZnJvbSB0aGF0ICh1bmxlc3MgX2FsbG93X2ZhbGxiYWNrIGlzCiAgICAgICAgRmFsc2UpLgogICAgICAgINojcHJlcGFyZV9tZXRhZGF0YV9mb3JfYnVpbGRfZWRpdGFibGVyXwAAAHJiAAAAcmMAAAByHAAAAHIcAAAAch0AAAByagAAAOYAAABzCgAAAAAMBgEGAQIBAv16NFBlcDUxN0hvb2tDYWxsZXIucHJlcGFyZV9tZXRhZGF0YV9mb3JfYnVpbGRfZWRpdGFibGVjBAAAAAAAAAAAAAAABAAAAAcAAABDAAAAcygAAAB8A2QBdQFyEHQAfAODAX0DfACgAWQCdAB8AYMBfAJ8A2QDnAOhAlMAKQRhhgEAAEJ1aWxkIGFuIGVkaXRhYmxlIHdoZWVsIGZyb20gdGhpcyBwcm9qZWN0LgoKICAgICAgICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBuZXdseSBjcmVhdGVkIGZpbGUuCgogICAgICAgIEluIGdlbmVyYWwsIHRoaXMgd2lsbCBjYWxsIHRoZSAnYnVpbGRfZWRpdGFibGUnIGhvb2sgaW4gdGhlIGJhY2tlbmQuCiAgICAgICAgSG93ZXZlciwgaWYgdGhhdCB3YXMgcHJldmlvdXNseSBjYWxsZWQgYnkKICAgICAgICAncHJlcGFyZV9tZXRhZGF0YV9mb3JfYnVpbGRfZWRpdGFibGUnLCBhbmQgdGhlIHNhbWUgbWV0YWRhdGFfZGlyZWN0b3J5CiAgICAgICAgaXMgdXNlZCwgdGhlIHByZXZpb3VzbHkgYnVpbHQgd2hlZWwgd2lsbCBiZSBjb3BpZWQgdG8gd2hlZWxfZGlyZWN0b3J5LgogICAgICAgIE7aDmJ1aWxk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