@galacean/engine-physics-physx 0.0.0-experimental-animator-additive.4 → 0.0.0-experimental-0.9-plus.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -1378,4 +1378,4 @@ exports.PhysXPhysics = /*#__PURE__*/ function() {
1378
1378
  exports.PhysXPhysics = __decorate([
1379
1379
  StaticInterfaceImplement()
1380
1380
  ], exports.PhysXPhysics);
1381
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMC9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW5zdGFuY2VvZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS90c2xpYkAyLjUuMC9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwiLi4vc3JjL2VudW0vUGh5c1hSdW50aW1lTW9kZS50cyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX3NldF9wcm90b3R5cGVfb2YuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbmhlcml0cy5qcyIsIi4uL3NyYy9qb2ludC9QaHlzWEpvaW50LnRzIiwiLi4vc3JjL2pvaW50L1BoeXNYRml4ZWRKb2ludC50cyIsIi4uL3NyYy9qb2ludC9QaHlzWEhpbmdlSm9pbnQudHMiLCIuLi9zcmMvam9pbnQvUGh5c1hTcHJpbmdKb2ludC50cyIsIi4uL3NyYy9EaXNvcmRlcmVkQXJyYXkudHMiLCIuLi9zcmMvc2hhcGUvUGh5c1hDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL3NoYXBlL1BoeXNYQm94Q29sbGlkZXJTaGFwZS50cyIsIi4uL3NyYy9zaGFwZS9QaHlzWENhcHN1bGVDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL1BoeXNYQ2hhcmFjdGVyQ29udHJvbGxlci50cyIsIi4uL3NyYy9QaHlzWENvbGxpZGVyLnRzIiwiLi4vc3JjL1BoeXNYRHluYW1pY0NvbGxpZGVyLnRzIiwiLi4vc3JjL1BoeXNYUGh5c2ljc01hbmFnZXIudHMiLCIuLi9zcmMvUGh5c1hQaHlzaWNzTWF0ZXJpYWwudHMiLCIuLi9zcmMvUGh5c1hTdGF0aWNDb2xsaWRlci50cyIsIi4uL3NyYy9zaGFwZS9QaHlzWFBsYW5lQ29sbGlkZXJTaGFwZS50cyIsIi4uL3NyYy9zaGFwZS9QaHlzWFNwaGVyZUNvbGxpZGVyU2hhcGUudHMiLCIuLi9zcmMvU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50LnRzIiwiLi4vc3JjL1BoeXNYUGh5c2ljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gX2luc3RhbmNlb2YobGVmdCwgcmlnaHQpIHtcbiAgICBpZiAocmlnaHQgIT0gbnVsbCAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIHJpZ2h0W1N5bWJvbC5oYXNJbnN0YW5jZV0pIHtcbiAgICAgICAgcmV0dXJuICEhcmlnaHRbU3ltYm9sLmhhc0luc3RhbmNlXShsZWZ0KTtcbiAgICB9IGVsc2UgcmV0dXJuIGxlZnQgaW5zdGFuY2VvZiByaWdodDtcbn1cbmV4cG9ydCB7IF9pbnN0YW5jZW9mIGFzIF8gfTtcbiIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cclxuICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XHJcbiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xyXG4gICAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcclxuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICBkb25lID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XHJcbiAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcclxuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcclxuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcclxuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbn1cclxuIiwiLyoqXG4gKiBQaHlzWCBydW50aW1lIG1vZGUuXG4gKi9cbmV4cG9ydCBlbnVtIFBoeXNYUnVudGltZU1vZGUge1xuICAvKiogVXNlIHdlYkFzc2VtYmx5IG1vZGUgZmlyc3QsIGlmIFdlYkFzc2VtYmx5IG1vZGUgaXMgbm90IHN1cHBvcnRlZCwgcm9sbCBiYWNrIHRvIEphdmFTY3JpcHQgbW9kZS4gICovXG4gIEF1dG8sXG4gIC8qKiBXZWJBc3NlbWJseSBtb2RlLiAqL1xuICBXZWJBc3NlbWJseSxcbiAgLyoqIEphdmFTY3JpcHQgbW9kZS4gKi9cbiAgSmF2YVNjcmlwdFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIF9zZXRfcHJvdG90eXBlX29mKG8sIHApIHtcbiAgICBfc2V0X3Byb3RvdHlwZV9vZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgICAgIG8uX19wcm90b19fID0gcDtcblxuICAgICAgICByZXR1cm4gbztcbiAgICB9O1xuXG4gICAgcmV0dXJuIF9zZXRfcHJvdG90eXBlX29mKG8sIHApO1xufVxuZXhwb3J0IHsgX3NldF9wcm90b3R5cGVfb2YgYXMgXyB9O1xuIiwiaW1wb3J0IHsgX3NldF9wcm90b3R5cGVfb2YgfSBmcm9tIFwiLi9fc2V0X3Byb3RvdHlwZV9vZi5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gICAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pO1xuXG4gICAgaWYgKHN1cGVyQ2xhc3MpIF9zZXRfcHJvdG90eXBlX29mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbmV4cG9ydCB7IF9pbmhlcml0cyBhcyBfIH07XG4iLCJpbXBvcnQgeyBJSm9pbnQgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFBoeXNYQ29sbGlkZXIgfSBmcm9tIFwiLi4vUGh5c1hDb2xsaWRlclwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5cbi8qKlxuICogYSBiYXNlIGludGVyZmFjZSBwcm92aWRpbmcgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIFBoeXNYIGpvaW50c1xuICovXG5leHBvcnQgY2xhc3MgUGh5c1hKb2ludCBpbXBsZW1lbnRzIElKb2ludCB7XG4gIHByb3RlY3RlZCBzdGF0aWMgX3hBeGlzID0gbmV3IFZlY3RvcjMoMSwgMCwgMCk7XG4gIHByb3RlY3RlZCBzdGF0aWMgX2RlZmF1bHRWZWMgPSBuZXcgVmVjdG9yMygpO1xuICBwcm90ZWN0ZWQgc3RhdGljIF9kZWZhdWx0UXVhdCA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5cbiAgcHJvdGVjdGVkIF9weEpvaW50OiBhbnk7XG4gIHByb3RlY3RlZCBfY29sbGlkZXI6IFBoeXNYQ29sbGlkZXI7XG4gIHByaXZhdGUgX2Nvbm5lY3RlZEFuY2hvciA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgX2JyZWFrRm9yY2U6IG51bWJlciA9IE51bWJlci5NQVhfVkFMVUU7XG4gIHByaXZhdGUgX2JyZWFrVG9ycXVlOiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUpvaW50LnNldENvbm5lY3RlZENvbGxpZGVyIH1cbiAgICovXG4gIHNldENvbm5lY3RlZENvbGxpZGVyKHZhbHVlOiBQaHlzWENvbGxpZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXRBY3RvcnModmFsdWU/Ll9weEFjdG9yIHx8IG51bGwsIHRoaXMuX2NvbGxpZGVyPy5fcHhBY3RvciB8fCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUpvaW50LnNldENvbm5lY3RlZEFuY2hvciB9XG4gICAqL1xuICBzZXRDb25uZWN0ZWRBbmNob3IodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9jb25uZWN0ZWRBbmNob3IuY29weUZyb20odmFsdWUpO1xuICAgIHRoaXMuX3NldExvY2FsUG9zZSgwLCB2YWx1ZSwgUGh5c1hKb2ludC5fZGVmYXVsdFF1YXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJSm9pbnQuc2V0Q29ubmVjdGVkTWFzc1NjYWxlIH1cbiAgICovXG4gIHNldENvbm5lY3RlZE1hc3NTY2FsZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXRJbnZNYXNzU2NhbGUwKDEgLyB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElKb2ludC5zZXRDb25uZWN0ZWRJbmVydGlhU2NhbGUgfVxuICAgKi9cbiAgc2V0Q29ubmVjdGVkSW5lcnRpYVNjYWxlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weEpvaW50LnNldEludkluZXJ0aWFTY2FsZTAoMSAvIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUpvaW50LnNldE1hc3NTY2FsZSB9XG4gICAqL1xuICBzZXRNYXNzU2NhbGUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3B4Sm9pbnQuc2V0SW52TWFzc1NjYWxlMSgxIC8gdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJSm9pbnQuc2V0SW5lcnRpYVNjYWxlIH1cbiAgICovXG4gIHNldEluZXJ0aWFTY2FsZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXRJbnZJbmVydGlhU2NhbGUxKDEgLyB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElKb2ludC5zZXRCcmVha0ZvcmNlIH1cbiAgICovXG4gIHNldEJyZWFrRm9yY2UodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2JyZWFrRm9yY2UgPSB2YWx1ZTtcbiAgICB0aGlzLl9weEpvaW50LnNldEJyZWFrRm9yY2UodGhpcy5fYnJlYWtGb3JjZSwgdGhpcy5fYnJlYWtUb3JxdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJSm9pbnQuc2V0QnJlYWtUb3JxdWUgfVxuICAgKi9cbiAgc2V0QnJlYWtUb3JxdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2JyZWFrVG9ycXVlID0gdmFsdWU7XG4gICAgdGhpcy5fcHhKb2ludC5zZXRCcmVha0ZvcmNlKHRoaXMuX2JyZWFrRm9yY2UsIHRoaXMuX2JyZWFrVG9ycXVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGpvaW50IGxvY2FsIHBvc2UgZm9yIGFuIGFjdG9yLlxuICAgKiBAcGFyYW0gYWN0b3IgMCBmb3IgdGhlIGZpcnN0IGFjdG9yLCAxIGZvciB0aGUgc2Vjb25kIGFjdG9yLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gdGhlIGxvY2FsIHBvc2l0aW9uIGZvciB0aGUgYWN0b3IgdGhpcyBqb2ludFxuICAgKiBAcGFyYW0gcm90YXRpb24gdGhlIGxvY2FsIHJvdGF0aW9uIGZvciB0aGUgYWN0b3IgdGhpcyBqb2ludFxuICAgKi9cbiAgcHJvdGVjdGVkIF9zZXRMb2NhbFBvc2UoYWN0b3I6IG51bWJlciwgcG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXRMb2NhbFBvc2UoYWN0b3IsIHBvc2l0aW9uLCByb3RhdGlvbik7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBoeXNYSm9pbnQgfSBmcm9tIFwiLi9QaHlzWEpvaW50XCI7XG5pbXBvcnQgeyBJRml4ZWRKb2ludCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUGh5c1hDb2xsaWRlciB9IGZyb20gXCIuLi9QaHlzWENvbGxpZGVyXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3MgfSBmcm9tIFwiLi4vUGh5c1hQaHlzaWNzXCI7XG5cbi8qKlxuICogQSBmaXhlZCBqb2ludCBwZXJtaXRzIG5vIHJlbGF0aXZlIG1vdmVtZW50IGJldHdlZW4gdHdvIGNvbGxpZGVycy4gaWUgdGhlIGJvZGllcyBhcmUgZ2x1ZWQgdG9nZXRoZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzWEZpeGVkSm9pbnQgZXh0ZW5kcyBQaHlzWEpvaW50IGltcGxlbWVudHMgSUZpeGVkSm9pbnQge1xuICBjb25zdHJ1Y3Rvcihjb2xsaWRlcjogUGh5c1hDb2xsaWRlcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29sbGlkZXIgPSBjb2xsaWRlcjtcbiAgICB0aGlzLl9weEpvaW50ID0gUGh5c1hQaHlzaWNzLl9weFBoeXNpY3MuY3JlYXRlRml4ZWRKb2ludChcbiAgICAgIG51bGwsXG4gICAgICBQaHlzWEpvaW50Ll9kZWZhdWx0VmVjLFxuICAgICAgUGh5c1hKb2ludC5fZGVmYXVsdFF1YXQsXG4gICAgICBjb2xsaWRlci5fcHhBY3RvcixcbiAgICAgIFBoeXNYSm9pbnQuX2RlZmF1bHRWZWMsXG4gICAgICBQaHlzWEpvaW50Ll9kZWZhdWx0UXVhdFxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBoeXNYQ29sbGlkZXIgfSBmcm9tIFwiLi4vUGh5c1hDb2xsaWRlclwiO1xuaW1wb3J0IHsgUGh5c1hKb2ludCB9IGZyb20gXCIuL1BoeXNYSm9pbnRcIjtcbmltcG9ydCB7IElIaW5nZUpvaW50IH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3MgfSBmcm9tIFwiLi4vUGh5c1hQaHlzaWNzXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcblxuLyoqXG4gKiBBIGpvaW50IHdoaWNoIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byBhIGhpbmdlIG9yIGF4bGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzWEhpbmdlSm9pbnQgZXh0ZW5kcyBQaHlzWEpvaW50IGltcGxlbWVudHMgSUhpbmdlSm9pbnQge1xuICBwcml2YXRlIF9heGlzUm90YXRpb25RdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgcHJpdmF0ZSBfc3dpbmdPZmZzZXQgPSBuZXcgVmVjdG9yMygpO1xuICBwcml2YXRlIF92ZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XG5cbiAgY29uc3RydWN0b3IoY29sbGlkZXI6IFBoeXNYQ29sbGlkZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbGxpZGVyID0gY29sbGlkZXI7XG4gICAgdGhpcy5fcHhKb2ludCA9IFBoeXNYUGh5c2ljcy5fcHhQaHlzaWNzLmNyZWF0ZVJldm9sdXRlSm9pbnQoXG4gICAgICBudWxsLFxuICAgICAgUGh5c1hKb2ludC5fZGVmYXVsdFZlYyxcbiAgICAgIFBoeXNYSm9pbnQuX2RlZmF1bHRRdWF0LFxuICAgICAgY29sbGlkZXIuX3B4QWN0b3IsXG4gICAgICBQaHlzWEpvaW50Ll9kZWZhdWx0VmVjLFxuICAgICAgUGh5c1hKb2ludC5fZGVmYXVsdFF1YXRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJSGluZ2VKb2ludC5zZXRBeGlzIH1cbiAgICovXG4gIHNldEF4aXModmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBjb25zdCB4QXhpcyA9IFBoeXNYSm9pbnQuX3hBeGlzO1xuICAgIGNvbnN0IGF4aXNSb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLl9heGlzUm90YXRpb25RdWF0ZXJuaW9uO1xuICAgIHhBeGlzLnNldCgxLCAwLCAwKTtcbiAgICB2YWx1ZS5ub3JtYWxpemUoKTtcbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYWNvcyhWZWN0b3IzLmRvdCh4QXhpcywgdmFsdWUpKTtcbiAgICBWZWN0b3IzLmNyb3NzKHhBeGlzLCB2YWx1ZSwgeEF4aXMpO1xuICAgIFF1YXRlcm5pb24ucm90YXRpb25BeGlzQW5nbGUoeEF4aXMsIGFuZ2xlLCBheGlzUm90YXRpb25RdWF0ZXJuaW9uKTtcblxuICAgIHRoaXMuX3NldExvY2FsUG9zZSgwLCB0aGlzLl9zd2luZ09mZnNldCwgYXhpc1JvdGF0aW9uUXVhdGVybmlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElIaW5nZUpvaW50LnNldFN3aW5nT2Zmc2V0IH1cbiAgICovXG4gIHNldFN3aW5nT2Zmc2V0KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5fc3dpbmdPZmZzZXQuY29weUZyb20odmFsdWUpO1xuICAgIHRoaXMuX3NldExvY2FsUG9zZSgxLCB0aGlzLl9zd2luZ09mZnNldCwgdGhpcy5fYXhpc1JvdGF0aW9uUXVhdGVybmlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElIaW5nZUpvaW50LmdldEFuZ2xlIH1cbiAgICovXG4gIGdldEFuZ2xlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3B4Sm9pbnQuZ2V0QW5nbGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUhpbmdlSm9pbnQuZ2V0VmVsb2NpdHkgfVxuICAgKi9cbiAgZ2V0VmVsb2NpdHkoKTogUmVhZG9ubHk8VmVjdG9yMz4ge1xuICAgIGNvbnN0IHZlbG9jaXR5ID0gdGhpcy5fdmVsb2NpdHk7XG4gICAgdmVsb2NpdHkuY29weUZyb20odGhpcy5fcHhKb2ludC5nZXRWZWxvY2l0eSgpKTtcbiAgICByZXR1cm4gdmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElIaW5nZUpvaW50LnNldEhhcmRMaW1pdENvbmUgfVxuICAgKi9cbiAgc2V0SGFyZExpbWl0KGxvd2VyTGltaXQ6IG51bWJlciwgdXBwZXJMaW1pdDogbnVtYmVyLCBjb250YWN0RGlzdDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXRIYXJkTGltaXQobG93ZXJMaW1pdCwgdXBwZXJMaW1pdCwgY29udGFjdERpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJSGluZ2VKb2ludC5zZXRIYXJkTGltaXRDb25lIH1cbiAgICovXG4gIHNldFNvZnRMaW1pdChsb3dlckxpbWl0OiBudW1iZXIsIHVwcGVyTGltaXQ6IG51bWJlciwgc3RpZmZuZXNzOiBudW1iZXIsIGRhbXBpbmc6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3B4Sm9pbnQuc2V0U29mdExpbWl0KGxvd2VyTGltaXQsIHVwcGVyTGltaXQsIHN0aWZmbmVzcywgZGFtcGluZyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElIaW5nZUpvaW50LnNldERyaXZlVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0RHJpdmVWZWxvY2l0eSh2ZWxvY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXREcml2ZVZlbG9jaXR5KHZlbG9jaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUhpbmdlSm9pbnQuc2V0RHJpdmVGb3JjZUxpbWl0IH1cbiAgICovXG4gIHNldERyaXZlRm9yY2VMaW1pdChsaW1pdDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXREcml2ZUZvcmNlTGltaXQobGltaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJSGluZ2VKb2ludC5zZXREcml2ZUdlYXJSYXRpbyB9XG4gICAqL1xuICBzZXREcml2ZUdlYXJSYXRpbyhyYXRpbzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXREcml2ZUdlYXJSYXRpbyhyYXRpbyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElIaW5nZUpvaW50LnNldEhpbmdlSm9pbnRGbGFnIH1cbiAgICovXG4gIHNldEhpbmdlSm9pbnRGbGFnKGZsYWc6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9weEpvaW50LnNldFJldm9sdXRlSm9pbnRGbGFnKGZsYWcsIHZhbHVlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGh5c1hQaHlzaWNzIH0gZnJvbSBcIi4uL1BoeXNYUGh5c2ljc1wiO1xuaW1wb3J0IHsgUGh5c1hKb2ludCB9IGZyb20gXCIuL1BoeXNYSm9pbnRcIjtcbmltcG9ydCB7IElTcHJpbmdKb2ludCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUGh5c1hDb2xsaWRlciB9IGZyb20gXCIuLi9QaHlzWENvbGxpZGVyXCI7XG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcblxuLyoqXG4gKiBhIGpvaW50IHRoYXQgbWFpbnRhaW5zIGFuIHVwcGVyIG9yIGxvd2VyIGJvdW5kIChvciBib3RoKSBvbiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzIG9uIGRpZmZlcmVudCBvYmplY3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzWFNwcmluZ0pvaW50IGV4dGVuZHMgUGh5c1hKb2ludCBpbXBsZW1lbnRzIElTcHJpbmdKb2ludCB7XG4gIHByaXZhdGUgX3N3aW5nT2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTtcblxuICBjb25zdHJ1Y3Rvcihjb2xsaWRlcjogUGh5c1hDb2xsaWRlcikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29sbGlkZXIgPSBjb2xsaWRlcjtcbiAgICB0aGlzLl9weEpvaW50ID0gUGh5c1hQaHlzaWNzLl9weFBoeXNpY3MuY3JlYXRlRGlzdGFuY2VKb2ludChcbiAgICAgIG51bGwsXG4gICAgICBQaHlzWEpvaW50Ll9kZWZhdWx0VmVjLFxuICAgICAgUGh5c1hKb2ludC5fZGVmYXVsdFF1YXQsXG4gICAgICBjb2xsaWRlci5fcHhBY3RvcixcbiAgICAgIFBoeXNYSm9pbnQuX2RlZmF1bHRWZWMsXG4gICAgICBQaHlzWEpvaW50Ll9kZWZhdWx0UXVhdFxuICAgICk7XG4gICAgdGhpcy5fcHhKb2ludC5zZXREaXN0YW5jZUpvaW50RmxhZygyLCB0cnVlKTsgLy8gZW5hYmxlIG1heCBkaXN0YW5jZTtcbiAgICB0aGlzLl9weEpvaW50LnNldERpc3RhbmNlSm9pbnRGbGFnKDQsIHRydWUpOyAvLyBlbmFibGUgbWluIGRpc3RhbmNlO1xuICAgIHRoaXMuX3B4Sm9pbnQuc2V0RGlzdGFuY2VKb2ludEZsYWcoOCwgdHJ1ZSk7IC8vIGVuYWJsZSBzcHJpbmc7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElTcHJpbmdKb2ludC5zZXRTd2luZ09mZnNldCB9XG4gICAqL1xuICBzZXRTd2luZ09mZnNldCh2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX3N3aW5nT2Zmc2V0LmNvcHlGcm9tKHZhbHVlKTtcbiAgICB0aGlzLl9zZXRMb2NhbFBvc2UoMSwgdmFsdWUsIFBoeXNYSm9pbnQuX2RlZmF1bHRRdWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVNwcmluZ0pvaW50LnNldE1pbkRpc3RhbmNlIH1cbiAgICovXG4gIHNldE1pbkRpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weEpvaW50LnNldE1pbkRpc3RhbmNlKGRpc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVNwcmluZ0pvaW50LnNldE1heERpc3RhbmNlIH1cbiAgICovXG4gIHNldE1heERpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weEpvaW50LnNldE1heERpc3RhbmNlKGRpc3RhbmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVNwcmluZ0pvaW50LnNldFRvbGVyYW5jZSB9XG4gICAqL1xuICBzZXRUb2xlcmFuY2UodG9sZXJhbmNlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weEpvaW50LnNldFRvbGVyYW5jZSh0b2xlcmFuY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJU3ByaW5nSm9pbnQuc2V0U3RpZmZuZXNzIH1cbiAgICovXG4gIHNldFN0aWZmbmVzcyhzdGlmZm5lc3M6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3B4Sm9pbnQuc2V0U3RpZmZuZXNzKHN0aWZmbmVzcyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElTcHJpbmdKb2ludC5zZXREYW1waW5nIH1cbiAgICovXG4gIHNldERhbXBpbmcoZGFtcGluZzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhKb2ludC5zZXREYW1waW5nKGRhbXBpbmcpO1xuICB9XG59XG4iLCIvKipcbiAqIEhpZ2gtcGVyZm9ybWFuY2UgdW5vcmRlcmVkIGFycmF5LCBkZWxldGUgdXNlcyBleGNoYW5nZSBtZXRob2QgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgaW50ZXJuYWwgY2FwYWNpdHkgb25seSBpbmNyZWFzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXNvcmRlcmVkQXJyYXk8VD4ge1xuICBfZWxlbWVudHM6IFRbXTtcblxuICBsZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoY291bnQ6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLl9lbGVtZW50cyA9IG5ldyBBcnJheTxUPihjb3VudCk7XG4gIH1cblxuICBhZGQoZWxlbWVudDogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gdGhpcy5fZWxlbWVudHMubGVuZ3RoKSB0aGlzLl9lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIGVsc2UgdGhpcy5fZWxlbWVudHNbdGhpcy5sZW5ndGhdID0gZWxlbWVudDtcbiAgICB0aGlzLmxlbmd0aCsrO1xuICB9XG5cbiAgZGVsZXRlKGVsZW1lbnQ6IFQpOiB2b2lkIHtcbiAgICAvL1RPRE86IEl0IGNhbiBiZSBvcHRpbWl6ZWQgZm9yIGN1c3RvbSBiaW5hcnkgc2VhcmNoIGFuZCBvdGhlciBhbGdvcml0aG1zLCBjdXJyZW50bHkgdGhpcy5fZWxlbWVudHM+PXRoaXMubGVuZ3RoIHdhc3RlcyBwZXJmb3JtYW5jZS5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2VsZW1lbnRzLmluZGV4T2YoZWxlbWVudCk7XG4gICAgdGhpcy5kZWxldGVCeUluZGV4KGluZGV4KTtcbiAgfVxuXG4gIGdldChpbmRleDogbnVtYmVyKTogVCB7XG4gICAgaWYgKGluZGV4ID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBcIkluZGV4IGlzIG91dCBvZiByYW5nZS5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzW2luZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHJldHVybnMgVGhlIHJlcGxhY2VkIGl0ZW0gaXMgdXNlZCB0byByZXNldCBpdHMgaW5kZXguXG4gICAqL1xuICBkZWxldGVCeUluZGV4KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICB2YXIgZWxlbWVudHM6IFRbXSA9IHRoaXMuX2VsZW1lbnRzO1xuICAgIGxldCBlbmQ6IFQgPSBudWxsO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMubGVuZ3RoIC0gMTtcbiAgICBpZiAoaW5kZXggIT09IGxhc3RJbmRleCkge1xuICAgICAgZW5kID0gZWxlbWVudHNbbGFzdEluZGV4XTtcbiAgICAgIGVsZW1lbnRzW2luZGV4XSA9IGVuZDtcbiAgICB9XG4gICAgdGhpcy5sZW5ndGgtLTtcbiAgICByZXR1cm4gZW5kO1xuICB9XG5cbiAgZ2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZWxlbWVudHMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIH1cbn1cbiIsImltcG9ydCB7IElDb2xsaWRlclNoYXBlIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IERpc29yZGVyZWRBcnJheSB9IGZyb20gXCIuLi9EaXNvcmRlcmVkQXJyYXlcIjtcbmltcG9ydCB7IFBoeXNYQ2hhcmFjdGVyQ29udHJvbGxlciB9IGZyb20gXCIuLi9QaHlzWENoYXJhY3RlckNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IFBoeXNYUGh5c2ljcyB9IGZyb20gXCIuLi9QaHlzWFBoeXNpY3NcIjtcbmltcG9ydCB7IFBoeXNYUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL1BoeXNYUGh5c2ljc01hdGVyaWFsXCI7XG5cbi8qKlxuICogRmxhZ3Mgd2hpY2ggYWZmZWN0IHRoZSBiZWhhdmlvciBvZiBTaGFwZXMuXG4gKi9cbmV4cG9ydCBlbnVtIFNoYXBlRmxhZyB7XG4gIC8qKiBUaGUgc2hhcGUgd2lsbCBwYXJ0YWtlIGluIGNvbGxpc2lvbiBpbiB0aGUgcGh5c2ljYWwgc2ltdWxhdGlvbi4gKi9cbiAgU0lNVUxBVElPTl9TSEFQRSA9IDEgPDwgMCxcbiAgLyoqIFRoZSBzaGFwZSB3aWxsIHBhcnRha2UgaW4gc2NlbmUgcXVlcmllcyAocmF5IGNhc3RzLCBvdmVybGFwIHRlc3RzLCBzd2VlcHMsIC4uLikuICovXG4gIFNDRU5FX1FVRVJZX1NIQVBFID0gMSA8PCAxLFxuICAvKiogVGhlIHNoYXBlIGlzIGEgdHJpZ2dlciB3aGljaCBjYW4gc2VuZCByZXBvcnRzIHdoZW5ldmVyIG90aGVyIHNoYXBlcyBlbnRlci9sZWF2ZSBpdHMgdm9sdW1lLiAqL1xuICBUUklHR0VSX1NIQVBFID0gMSA8PCAyXG59XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgZm9yIGNvbGxpZGVyIHNoYXBlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBoeXNYQ29sbGlkZXJTaGFwZSBpbXBsZW1lbnRzIElDb2xsaWRlclNoYXBlIHtcbiAgc3RhdGljIHJlYWRvbmx5IGhhbGZTcXJ0OiBudW1iZXIgPSAwLjcwNzEwNjc4MTE4NjU1O1xuICBzdGF0aWMgdHJhbnNmb3JtID0ge1xuICAgIHRyYW5zbGF0aW9uOiBuZXcgVmVjdG9yMygpLFxuICAgIHJvdGF0aW9uOiBudWxsXG4gIH07XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfY29udHJvbGxlcnM6IERpc29yZGVyZWRBcnJheTxQaHlzWENoYXJhY3RlckNvbnRyb2xsZXI+ID0gbmV3IERpc29yZGVyZWRBcnJheTxQaHlzWENoYXJhY3RlckNvbnRyb2xsZXI+KCk7XG5cbiAgcHJvdGVjdGVkIF9zY2FsZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xuICBwcm90ZWN0ZWQgX3Bvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJvdGVjdGVkIF9yb3RhdGlvbjogVmVjdG9yMyA9IG51bGw7XG4gIHByb3RlY3RlZCBfYXhpczogUXVhdGVybmlvbiA9IG51bGw7XG4gIHByb3RlY3RlZCBfcGh5c3hSb3RhdGlvbjogUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5cbiAgcHJpdmF0ZSBfc2hhcGVGbGFnczogU2hhcGVGbGFnID0gU2hhcGVGbGFnLlNDRU5FX1FVRVJZX1NIQVBFIHwgU2hhcGVGbGFnLlNJTVVMQVRJT05fU0hBUEU7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfcHhNYXRlcmlhbHM6IGFueVtdID0gbmV3IEFycmF5KDEpO1xuICAvKiogQGludGVybmFsICovXG4gIF9weFNoYXBlOiBhbnk7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3B4R2VvbWV0cnk6IGFueTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaWQ6IG51bWJlcjtcblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFJvdGF0aW9uIH1cbiAgICovXG4gIHNldFJvdGF0aW9uKHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5fcm90YXRpb24gPSB2YWx1ZTtcbiAgICBRdWF0ZXJuaW9uLnJvdGF0aW9uWWF3UGl0Y2hSb2xsKHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHRoaXMuX3BoeXN4Um90YXRpb24pO1xuICAgIHRoaXMuX2F4aXMgJiYgUXVhdGVybmlvbi5tdWx0aXBseSh0aGlzLl9waHlzeFJvdGF0aW9uLCB0aGlzLl9heGlzLCB0aGlzLl9waHlzeFJvdGF0aW9uKTtcbiAgICB0aGlzLl9waHlzeFJvdGF0aW9uLm5vcm1hbGl6ZSgpO1xuICAgIHRoaXMuX3NldExvY2FsUG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRQb3NpdGlvbiB9XG4gICAqL1xuICBzZXRQb3NpdGlvbih2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fcG9zaXRpb24pIHtcbiAgICAgIHRoaXMuX3Bvc2l0aW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0TG9jYWxQb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgYWJzdHJhY3Qgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRDb250YWN0T2Zmc2V0IH1cbiAgICogQGRlZmF1bHQgMC4wMmYgKiBQeFRvbGVyYW5jZXNTY2FsZTo6bGVuZ3RoXG4gICAqL1xuICBzZXRDb250YWN0T2Zmc2V0KG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhTaGFwZS5zZXRDb250YWN0T2Zmc2V0KG9mZnNldCk7XG5cbiAgICBjb25zdCBjb250cm9sbGVycyA9IHRoaXMuX2NvbnRyb2xsZXJzO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0gY29udHJvbGxlcnMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBjb250cm9sbGVycy5nZXQoaSkuX3B4Q29udHJvbGxlci5zZXRDb250YWN0T2Zmc2V0KG9mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRNYXRlcmlhbCB9XG4gICAqL1xuICBzZXRNYXRlcmlhbCh2YWx1ZTogUGh5c1hQaHlzaWNzTWF0ZXJpYWwpOiB2b2lkIHtcbiAgICB0aGlzLl9weE1hdGVyaWFsc1swXSA9IHZhbHVlLl9weE1hdGVyaWFsO1xuICAgIHRoaXMuX3B4U2hhcGUuc2V0TWF0ZXJpYWxzKHRoaXMuX3B4TWF0ZXJpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0SXNUcmlnZ2VyIH1cbiAgICovXG4gIHNldElzVHJpZ2dlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX21vZGlmeUZsYWcoU2hhcGVGbGFnLlNJTVVMQVRJT05fU0hBUEUsICF2YWx1ZSk7XG4gICAgdGhpcy5fbW9kaWZ5RmxhZyhTaGFwZUZsYWcuVFJJR0dFUl9TSEFQRSwgdmFsdWUpO1xuICAgIHRoaXMuX3NldFNoYXBlRmxhZ3ModGhpcy5fc2hhcGVGbGFncyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLmRlc3Ryb3kgfVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9weFNoYXBlLnJlbGVhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQGludGVybmFsXG4gICAqL1xuICBfc2V0U2hhcGVGbGFncyhmbGFnczogU2hhcGVGbGFnKSB7XG4gICAgdGhpcy5fc2hhcGVGbGFncyA9IGZsYWdzO1xuICAgIHRoaXMuX3B4U2hhcGUuc2V0RmxhZ3MobmV3IFBoeXNYUGh5c2ljcy5fcGh5c1guUHhTaGFwZUZsYWdzKHRoaXMuX3NoYXBlRmxhZ3MpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfc2V0TG9jYWxQb3NlKCk6IHZvaWQge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFBoeXNYQ29sbGlkZXJTaGFwZS50cmFuc2Zvcm07XG4gICAgVmVjdG9yMy5tdWx0aXBseSh0aGlzLl9wb3NpdGlvbiwgdGhpcy5fc2NhbGUsIHRyYW5zZm9ybS50cmFuc2xhdGlvbik7XG4gICAgdHJhbnNmb3JtLnJvdGF0aW9uID0gdGhpcy5fcGh5c3hSb3RhdGlvbjtcbiAgICB0aGlzLl9weFNoYXBlLnNldExvY2FsUG9zZSh0cmFuc2Zvcm0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9pbml0aWFsaXplKG1hdGVyaWFsOiBQaHlzWFBoeXNpY3NNYXRlcmlhbCwgaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2lkID0gaWQ7XG4gICAgdGhpcy5fcHhNYXRlcmlhbHNbMF0gPSBtYXRlcmlhbC5fcHhNYXRlcmlhbDtcbiAgICB0aGlzLl9weFNoYXBlID0gUGh5c1hQaHlzaWNzLl9weFBoeXNpY3MuY3JlYXRlU2hhcGUoXG4gICAgICB0aGlzLl9weEdlb21ldHJ5LFxuICAgICAgbWF0ZXJpYWwuX3B4TWF0ZXJpYWwsXG4gICAgICB0cnVlLFxuICAgICAgbmV3IFBoeXNYUGh5c2ljcy5fcGh5c1guUHhTaGFwZUZsYWdzKHRoaXMuX3NoYXBlRmxhZ3MpXG4gICAgKTtcbiAgICB0aGlzLl9weFNoYXBlLnNldFF1ZXJ5RmlsdGVyRGF0YShuZXcgUGh5c1hQaHlzaWNzLl9waHlzWC5QeEZpbHRlckRhdGEoaWQsIDAsIDAsIDApKTtcbiAgfVxuXG4gIHByaXZhdGUgX21vZGlmeUZsYWcoZmxhZzogU2hhcGVGbGFnLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3NoYXBlRmxhZ3MgPSB2YWx1ZSA/IHRoaXMuX3NoYXBlRmxhZ3MgfCBmbGFnIDogdGhpcy5fc2hhcGVGbGFncyAmIH5mbGFnO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJQm94Q29sbGlkZXJTaGFwZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3MgfSBmcm9tIFwiLi4vUGh5c1hQaHlzaWNzXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3NNYXRlcmlhbCB9IGZyb20gXCIuLi9QaHlzWFBoeXNpY3NNYXRlcmlhbFwiO1xuaW1wb3J0IHsgUGh5c1hDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vUGh5c1hDb2xsaWRlclNoYXBlXCI7XG5cbi8qKlxuICogQm94IGNvbGxpZGVyIHNoYXBlIGluIFBoeXNYLlxuICovXG5leHBvcnQgY2xhc3MgUGh5c1hCb3hDb2xsaWRlclNoYXBlIGV4dGVuZHMgUGh5c1hDb2xsaWRlclNoYXBlIGltcGxlbWVudHMgSUJveENvbGxpZGVyU2hhcGUge1xuICBwcml2YXRlIHN0YXRpYyBfdGVtcEhhbGZFeHRlbnRzID0gbmV3IFZlY3RvcjMoKTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaGFsZlNpemU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuXG4gIC8qKlxuICAgKiBJbml0IEJveCBTaGFwZSBhbmQgYWxsb2MgUGh5c1ggb2JqZWN0cy5cbiAgICogQHBhcmFtIHVuaXF1ZUlEIC0gVW5pcXVlSUQgbWFyayBTaGFwZS5cbiAgICogQHBhcmFtIHNpemUgLSBTaXplIG9mIFNoYXBlLlxuICAgKiBAcGFyYW0gbWF0ZXJpYWwgLSBNYXRlcmlhbCBvZiBQaHlzWENvbGxpZGVyLlxuICAgKi9cbiAgY29uc3RydWN0b3IodW5pcXVlSUQ6IG51bWJlciwgc2l6ZTogVmVjdG9yMywgbWF0ZXJpYWw6IFBoeXNYUGh5c2ljc01hdGVyaWFsKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2hhbGZTaXplLnNldChzaXplLnggKiAwLjUsIHNpemUueSAqIDAuNSwgc2l6ZS56ICogMC41KTtcblxuICAgIHRoaXMuX3B4R2VvbWV0cnkgPSBuZXcgUGh5c1hQaHlzaWNzLl9waHlzWC5QeEJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5faGFsZlNpemUueCAqIHRoaXMuX3NjYWxlLngsXG4gICAgICB0aGlzLl9oYWxmU2l6ZS55ICogdGhpcy5fc2NhbGUueSxcbiAgICAgIHRoaXMuX2hhbGZTaXplLnogKiB0aGlzLl9zY2FsZS56XG4gICAgKTtcbiAgICB0aGlzLl9pbml0aWFsaXplKG1hdGVyaWFsLCB1bmlxdWVJRCk7XG4gICAgdGhpcy5fc2V0TG9jYWxQb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElCb3hDb2xsaWRlclNoYXBlLnNldFNpemUgfVxuICAgKi9cbiAgc2V0U2l6ZSh2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX2hhbGZTaXplLnNldCh2YWx1ZS54ICogMC41LCB2YWx1ZS55ICogMC41LCB2YWx1ZS56ICogMC41KTtcbiAgICBWZWN0b3IzLm11bHRpcGx5KHRoaXMuX2hhbGZTaXplLCB0aGlzLl9zY2FsZSwgUGh5c1hCb3hDb2xsaWRlclNoYXBlLl90ZW1wSGFsZkV4dGVudHMpO1xuICAgIHRoaXMuX3B4R2VvbWV0cnkuaGFsZkV4dGVudHMgPSBQaHlzWEJveENvbGxpZGVyU2hhcGUuX3RlbXBIYWxmRXh0ZW50cztcbiAgICB0aGlzLl9weFNoYXBlLnNldEdlb21ldHJ5KHRoaXMuX3B4R2VvbWV0cnkpO1xuXG4gICAgY29uc3QgY29udHJvbGxlcnMgPSB0aGlzLl9jb250cm9sbGVycztcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IGNvbnRyb2xsZXJzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgY29uc3QgcHhDb250cm9sbGVyID0gY29udHJvbGxlcnMuZ2V0KGkpLl9weENvbnRyb2xsZXI7XG4gICAgICBweENvbnRyb2xsZXIuc2V0SGFsZkhlaWdodCh0aGlzLl9oYWxmU2l6ZS54KTtcbiAgICAgIHB4Q29udHJvbGxlci5zZXRIYWxmU2lkZUV4dGVudCh0aGlzLl9oYWxmU2l6ZS55KTtcbiAgICAgIHB4Q29udHJvbGxlci5zZXRIYWxmRm9yd2FyZEV4dGVudCh0aGlzLl9oYWxmU2l6ZS56KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX3NjYWxlLmNvcHlGcm9tKHNjYWxlKTtcbiAgICB0aGlzLl9zZXRMb2NhbFBvc2UoKTtcblxuICAgIFZlY3RvcjMubXVsdGlwbHkodGhpcy5faGFsZlNpemUsIHRoaXMuX3NjYWxlLCBQaHlzWEJveENvbGxpZGVyU2hhcGUuX3RlbXBIYWxmRXh0ZW50cyk7XG4gICAgdGhpcy5fcHhHZW9tZXRyeS5oYWxmRXh0ZW50cyA9IFBoeXNYQm94Q29sbGlkZXJTaGFwZS5fdGVtcEhhbGZFeHRlbnRzO1xuICAgIHRoaXMuX3B4U2hhcGUuc2V0R2VvbWV0cnkodGhpcy5fcHhHZW9tZXRyeSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElDYXBzdWxlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3MgfSBmcm9tIFwiLi4vUGh5c1hQaHlzaWNzXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3NNYXRlcmlhbCB9IGZyb20gXCIuLi9QaHlzWFBoeXNpY3NNYXRlcmlhbFwiO1xuaW1wb3J0IHsgUGh5c1hDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vUGh5c1hDb2xsaWRlclNoYXBlXCI7XG5cbi8qKlxuICogQ2Fwc3VsZSBjb2xsaWRlciBzaGFwZSBpbiBQaHlzWC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNYQ2Fwc3VsZUNvbGxpZGVyU2hhcGUgZXh0ZW5kcyBQaHlzWENvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJQ2Fwc3VsZUNvbGxpZGVyU2hhcGUge1xuICAvKiogQGludGVybmFsICovXG4gIF9yYWRpdXM6IG51bWJlcjtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaGFsZkhlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIF91cEF4aXM6IENvbGxpZGVyU2hhcGVVcEF4aXMgPSBDb2xsaWRlclNoYXBlVXBBeGlzLlk7XG5cbiAgLyoqXG4gICAqIEluaXQgUGh5c1hDb2xsaWRlciBhbmQgYWxsb2MgUGh5c1ggb2JqZWN0cy5cbiAgICogQHBhcmFtIHVuaXF1ZUlEIC0gVW5pcXVlSUQgbWFyayBjb2xsaWRlclxuICAgKiBAcGFyYW0gcmFkaXVzIC0gUmFkaXVzIG9mIENhcHN1bGVDb2xsaWRlclxuICAgKiBAcGFyYW0gaGVpZ2h0IC0gSGVpZ2h0IG9mIENhcHN1bGVDb2xsaWRlclxuICAgKiBAcGFyYW0gbWF0ZXJpYWwgLSBNYXRlcmlhbCBvZiBQaHlzWENvbGxpZGVyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih1bmlxdWVJRDogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG1hdGVyaWFsOiBQaHlzWFBoeXNpY3NNYXRlcmlhbCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9yYWRpdXMgPSByYWRpdXM7XG4gICAgdGhpcy5faGFsZkhlaWdodCA9IGhlaWdodCAqIDAuNTtcbiAgICB0aGlzLl9heGlzID0gbmV3IFF1YXRlcm5pb24oMCwgMCwgUGh5c1hDb2xsaWRlclNoYXBlLmhhbGZTcXJ0LCBQaHlzWENvbGxpZGVyU2hhcGUuaGFsZlNxcnQpO1xuICAgIHRoaXMuX3BoeXN4Um90YXRpb24uY29weUZyb20odGhpcy5fYXhpcyk7XG5cbiAgICB0aGlzLl9weEdlb21ldHJ5ID0gbmV3IFBoeXNYUGh5c2ljcy5fcGh5c1guUHhDYXBzdWxlR2VvbWV0cnkodGhpcy5fcmFkaXVzLCB0aGlzLl9oYWxmSGVpZ2h0KTtcbiAgICB0aGlzLl9pbml0aWFsaXplKG1hdGVyaWFsLCB1bmlxdWVJRCk7XG4gICAgdGhpcy5fc2V0TG9jYWxQb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDYXBzdWxlQ29sbGlkZXJTaGFwZS5zZXRSYWRpdXMgfVxuICAgKi9cbiAgc2V0UmFkaXVzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9yYWRpdXMgPSB2YWx1ZTtcbiAgICBzd2l0Y2ggKHRoaXMuX3VwQXhpcykge1xuICAgICAgY2FzZSBDb2xsaWRlclNoYXBlVXBBeGlzLlg6XG4gICAgICAgIHRoaXMuX3B4R2VvbWV0cnkucmFkaXVzID0gdGhpcy5fcmFkaXVzICogTWF0aC5tYXgodGhpcy5fc2NhbGUueSwgdGhpcy5fc2NhbGUueik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb2xsaWRlclNoYXBlVXBBeGlzLlk6XG4gICAgICAgIHRoaXMuX3B4R2VvbWV0cnkucmFkaXVzID0gdGhpcy5fcmFkaXVzICogTWF0aC5tYXgodGhpcy5fc2NhbGUueCwgdGhpcy5fc2NhbGUueik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb2xsaWRlclNoYXBlVXBBeGlzLlo6XG4gICAgICAgIHRoaXMuX3B4R2VvbWV0cnkucmFkaXVzID0gdGhpcy5fcmFkaXVzICogTWF0aC5tYXgodGhpcy5fc2NhbGUueCwgdGhpcy5fc2NhbGUueSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl9weFNoYXBlLnNldEdlb21ldHJ5KHRoaXMuX3B4R2VvbWV0cnkpO1xuXG4gICAgY29uc3QgY29udHJvbGxlcnMgPSB0aGlzLl9jb250cm9sbGVycztcbiAgICBmb3IgKGxldCBpID0gMCwgbiA9IGNvbnRyb2xsZXJzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgY29udHJvbGxlcnMuZ2V0KGkpLl9weENvbnRyb2xsZXIuc2V0UmFkaXVzKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDYXBzdWxlQ29sbGlkZXJTaGFwZS5zZXRIZWlnaHQgfVxuICAgKi9cbiAgc2V0SGVpZ2h0KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9oYWxmSGVpZ2h0ID0gdmFsdWUgKiAwLjU7XG4gICAgc3dpdGNoICh0aGlzLl91cEF4aXMpIHtcbiAgICAgIGNhc2UgQ29sbGlkZXJTaGFwZVVwQXhpcy5YOlxuICAgICAgICB0aGlzLl9weEdlb21ldHJ5LmhhbGZIZWlnaHQgPSB0aGlzLl9oYWxmSGVpZ2h0ICogdGhpcy5fc2NhbGUueDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbGxpZGVyU2hhcGVVcEF4aXMuWTpcbiAgICAgICAgdGhpcy5fcHhHZW9tZXRyeS5oYWxmSGVpZ2h0ID0gdGhpcy5faGFsZkhlaWdodCAqIHRoaXMuX3NjYWxlLnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb2xsaWRlclNoYXBlVXBBeGlzLlo6XG4gICAgICAgIHRoaXMuX3B4R2VvbWV0cnkuaGFsZkhlaWdodCA9IHRoaXMuX2hhbGZIZWlnaHQgKiB0aGlzLl9zY2FsZS56O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5fcHhTaGFwZS5zZXRHZW9tZXRyeSh0aGlzLl9weEdlb21ldHJ5KTtcblxuICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gdGhpcy5fY29udHJvbGxlcnM7XG4gICAgZm9yIChsZXQgaSA9IDAsIG4gPSBjb250cm9sbGVycy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnRyb2xsZXJzLmdldChpKS5fcHhDb250cm9sbGVyLnNldEhlaWdodCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ2Fwc3VsZUNvbGxpZGVyU2hhcGUuc2V0VXBBeGlzIH1cbiAgICovXG4gIHNldFVwQXhpcyh1cEF4aXM6IENvbGxpZGVyU2hhcGVVcEF4aXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IF9yb3RhdGlvbjogcm90YXRpb24sIF9heGlzOiBheGlzLCBfcGh5c3hSb3RhdGlvbjogcGh5c3hSb3RhdGlvbiB9ID0gdGhpcztcblxuICAgIHRoaXMuX3VwQXhpcyA9IHVwQXhpcztcbiAgICBzd2l0Y2ggKHRoaXMuX3VwQXhpcykge1xuICAgICAgY2FzZSBDb2xsaWRlclNoYXBlVXBBeGlzLlg6XG4gICAgICAgIGF4aXMuc2V0KDAsIDAsIDAsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29sbGlkZXJTaGFwZVVwQXhpcy5ZOlxuICAgICAgICBheGlzLnNldCgwLCAwLCBQaHlzWENvbGxpZGVyU2hhcGUuaGFsZlNxcnQsIFBoeXNYQ29sbGlkZXJTaGFwZS5oYWxmU3FydCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb2xsaWRlclNoYXBlVXBBeGlzLlo6XG4gICAgICAgIGF4aXMuc2V0KDAsIFBoeXNYQ29sbGlkZXJTaGFwZS5oYWxmU3FydCwgMCwgUGh5c1hDb2xsaWRlclNoYXBlLmhhbGZTcXJ0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChyb3RhdGlvbikge1xuICAgICAgUXVhdGVybmlvbi5yb3RhdGlvbllhd1BpdGNoUm9sbChyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56LCBwaHlzeFJvdGF0aW9uKTtcbiAgICAgIFF1YXRlcm5pb24ubXVsdGlwbHkocGh5c3hSb3RhdGlvbiwgYXhpcywgcGh5c3hSb3RhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBoeXN4Um90YXRpb24uY29weUZyb20oYXhpcyk7XG4gICAgfVxuICAgIHRoaXMuX3NldExvY2FsUG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRXb3JsZFNjYWxlIH1cbiAgICovXG4gIHNldFdvcmxkU2NhbGUoc2NhbGU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9zY2FsZS5jb3B5RnJvbShzY2FsZSk7XG4gICAgdGhpcy5fc2V0TG9jYWxQb3NlKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3VwQXhpcykge1xuICAgICAgY2FzZSBDb2xsaWRlclNoYXBlVXBBeGlzLlg6XG4gICAgICAgIHRoaXMuX3B4R2VvbWV0cnkucmFkaXVzID0gdGhpcy5fcmFkaXVzICogTWF0aC5tYXgoc2NhbGUueSwgc2NhbGUueik7XG4gICAgICAgIHRoaXMuX3B4R2VvbWV0cnkuaGFsZkhlaWdodCA9IHRoaXMuX2hhbGZIZWlnaHQgKiBzY2FsZS54O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29sbGlkZXJTaGFwZVVwQXhpcy5ZOlxuICAgICAgICB0aGlzLl9weEdlb21ldHJ5LnJhZGl1cyA9IHRoaXMuX3JhZGl1cyAqIE1hdGgubWF4KHNjYWxlLngsIHNjYWxlLnopO1xuICAgICAgICB0aGlzLl9weEdlb21ldHJ5LmhhbGZIZWlnaHQgPSB0aGlzLl9oYWxmSGVpZ2h0ICogc2NhbGUueTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbGxpZGVyU2hhcGVVcEF4aXMuWjpcbiAgICAgICAgdGhpcy5fcHhHZW9tZXRyeS5yYWRpdXMgPSB0aGlzLl9yYWRpdXMgKiBNYXRoLm1heChzY2FsZS54LCBzY2FsZS55KTtcbiAgICAgICAgdGhpcy5fcHhHZW9tZXRyeS5oYWxmSGVpZ2h0ID0gdGhpcy5faGFsZkhlaWdodCAqIHNjYWxlLno7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl9weFNoYXBlLnNldEdlb21ldHJ5KHRoaXMuX3B4R2VvbWV0cnkpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHVwIGF4aXMgb2YgdGhlIGNvbGxpZGVyIHNoYXBlLlxuICovXG5lbnVtIENvbGxpZGVyU2hhcGVVcEF4aXMge1xuICAvKiogVXAgYXhpcyBpcyBYLiAqL1xuICBYLFxuICAvKiogVXAgYXhpcyBpcyBZLiAqL1xuICBZLFxuICAvKiogVXAgYXhpcyBpcyBaLiAqL1xuICBaXG59XG4iLCJpbXBvcnQgeyBJQ2hhcmFjdGVyQ29udHJvbGxlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3MgfSBmcm9tIFwiLi9QaHlzWFBoeXNpY3NcIjtcbmltcG9ydCB7IFBoeXNYUGh5c2ljc01hbmFnZXIgfSBmcm9tIFwiLi9QaHlzWFBoeXNpY3NNYW5hZ2VyXCI7XG5pbXBvcnQgeyBQaHlzWEJveENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9QaHlzWEJveENvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IFBoeXNYQ2Fwc3VsZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9QaHlzWENhcHN1bGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBQaHlzWENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9QaHlzWENvbGxpZGVyU2hhcGVcIjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjaGFyYWN0ZXIgY29udHJvbGxlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzWENoYXJhY3RlckNvbnRyb2xsZXIgaW1wbGVtZW50cyBJQ2hhcmFjdGVyQ29udHJvbGxlciB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX2lkOiBudW1iZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3B4Q29udHJvbGxlcjogYW55O1xuICAvKiogQGludGVybmFsICovXG4gIF9weE1hbmFnZXI6IFBoeXNYUGh5c2ljc01hbmFnZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3NoYXBlOiBQaHlzWENvbGxpZGVyU2hhcGU7XG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNoYXJhY3RlckNvbnRyb2xsZXIubW92ZSB9XG4gICAqL1xuICBtb3ZlKGRpc3A6IFZlY3RvcjMsIG1pbkRpc3Q6IG51bWJlciwgZWxhcHNlZFRpbWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3B4Q29udHJvbGxlci5tb3ZlKGRpc3AsIG1pbkRpc3QsIGVsYXBzZWRUaW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNoYXJhY3RlckNvbnRyb2xsZXIuc2V0V29ybGRQb3NpdGlvbiB9XG4gICAqL1xuICBzZXRXb3JsZFBvc2l0aW9uKHBvc2l0aW9uOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5fcHhDb250cm9sbGVyICYmIHRoaXMuX3B4Q29udHJvbGxlci5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDaGFyYWN0ZXJDb250cm9sbGVyLmdldFdvcmxkUG9zaXRpb24gfVxuICAgKi9cbiAgZ2V0V29ybGRQb3NpdGlvbihwb3NpdGlvbjogVmVjdG9yMyk6IHZvaWQge1xuICAgIHBvc2l0aW9uLmNvcHlGcm9tKHRoaXMuX3B4Q29udHJvbGxlci5nZXRQb3NpdGlvbigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNoYXJhY3RlckNvbnRyb2xsZXIuc2V0U3RlcE9mZnNldCB9XG4gICAqL1xuICBzZXRTdGVwT2Zmc2V0KG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhDb250cm9sbGVyLnNldFN0ZXBPZmZzZXQob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNoYXJhY3RlckNvbnRyb2xsZXIuc2V0Tm9uV2Fsa2FibGVNb2RlIH1cbiAgICovXG4gIHNldE5vbldhbGthYmxlTW9kZShmbGFnOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weENvbnRyb2xsZXIuc2V0Tm9uV2Fsa2FibGVNb2RlKGZsYWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ2hhcmFjdGVyQ29udHJvbGxlci5zZXRVcERpcmVjdGlvbiB9XG4gICAqL1xuICBzZXRVcERpcmVjdGlvbih1cDogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX3B4Q29udHJvbGxlci5zZXRVcERpcmVjdGlvbih1cCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDaGFyYWN0ZXJDb250cm9sbGVyLnNldFNsb3BlTGltaXQgfVxuICAgKi9cbiAgc2V0U2xvcGVMaW1pdChzbG9wZUxpbWl0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weENvbnRyb2xsZXIuc2V0U2xvcGVMaW1pdChzbG9wZUxpbWl0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNoYXJhY3RlckNvbnRyb2xsZXIuYWRkU2hhcGUgfVxuICAgKi9cbiAgYWRkU2hhcGUoc2hhcGU6IFBoeXNYQ29sbGlkZXJTaGFwZSk6IHZvaWQge1xuICAgIHRoaXMuX3B4TWFuYWdlciAmJiB0aGlzLl9jcmVhdGVQWENvbnRyb2xsZXIodGhpcy5fcHhNYW5hZ2VyLCBzaGFwZSk7XG4gICAgdGhpcy5fc2hhcGUgPSBzaGFwZTtcbiAgICBzaGFwZS5fY29udHJvbGxlcnMuYWRkKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ2hhcmFjdGVyQ29udHJvbGxlci5yZW1vdmVTaGFwZSB9XG4gICAqL1xuICByZW1vdmVTaGFwZShzaGFwZTogUGh5c1hDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveVBYQ29udHJvbGxlcigpO1xuICAgIHRoaXMuX3NoYXBlID0gbnVsbDtcbiAgICBzaGFwZS5fY29udHJvbGxlcnMuZGVsZXRlKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ2hhcmFjdGVyQ29udHJvbGxlci5kZXN0cm95IH1cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveVBYQ29udHJvbGxlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX2NyZWF0ZVBYQ29udHJvbGxlcihweE1hbmFnZXI6IFBoeXNYUGh5c2ljc01hbmFnZXIsIHNoYXBlOiBQaHlzWENvbGxpZGVyU2hhcGUpOiB2b2lkIHtcbiAgICBsZXQgZGVzYzogYW55O1xuICAgIGlmIChzaGFwZSBpbnN0YW5jZW9mIFBoeXNYQm94Q29sbGlkZXJTaGFwZSkge1xuICAgICAgZGVzYyA9IG5ldyBQaHlzWFBoeXNpY3MuX3BoeXNYLlB4Qm94Q29udHJvbGxlckRlc2MoKTtcbiAgICAgIGRlc2MuaGFsZkhlaWdodCA9IHNoYXBlLl9oYWxmU2l6ZS54O1xuICAgICAgZGVzYy5oYWxmU2lkZUV4dGVudCA9IHNoYXBlLl9oYWxmU2l6ZS55O1xuICAgICAgZGVzYy5oYWxmRm9yd2FyZEV4dGVudCA9IHNoYXBlLl9oYWxmU2l6ZS56O1xuICAgIH0gZWxzZSBpZiAoc2hhcGUgaW5zdGFuY2VvZiBQaHlzWENhcHN1bGVDb2xsaWRlclNoYXBlKSB7XG4gICAgICBkZXNjID0gbmV3IFBoeXNYUGh5c2ljcy5fcGh5c1guUHhDYXBzdWxlQ29udHJvbGxlckRlc2MoKTtcbiAgICAgIGRlc2MucmFkaXVzID0gc2hhcGUuX3JhZGl1cztcbiAgICAgIGRlc2MuaGVpZ2h0ID0gc2hhcGUuX2hhbGZIZWlnaHQgKiAyO1xuICAgICAgZGVzYy5jbGltYmluZ01vZGUgPSAxOyAvLyBjb25zdHJhaW50IG1vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgXCJ1bnN1cHBvcnRlZCBzaGFwZSB0eXBlXCI7XG4gICAgfVxuXG4gICAgZGVzYy5zZXRNYXRlcmlhbChzaGFwZS5fcHhNYXRlcmlhbHNbMF0pO1xuXG4gICAgdGhpcy5fcHhDb250cm9sbGVyID0gcHhNYW5hZ2VyLl9nZXRDb250cm9sbGVyTWFuYWdlcigpLmNyZWF0ZUNvbnRyb2xsZXIoZGVzYyk7XG4gICAgdGhpcy5fcHhDb250cm9sbGVyLnNldFF1ZXJ5RmlsdGVyRGF0YShuZXcgUGh5c1hQaHlzaWNzLl9waHlzWC5QeEZpbHRlckRhdGEoc2hhcGUuX2lkLCAwLCAwLCAwKSk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfZGVzdHJveVBYQ29udHJvbGxlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcHhDb250cm9sbGVyKSB7XG4gICAgICB0aGlzLl9weENvbnRyb2xsZXIucmVsZWFzZSgpO1xuICAgICAgdGhpcy5fcHhDb250cm9sbGVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IElDb2xsaWRlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBQaHlzWENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9QaHlzWENvbGxpZGVyU2hhcGVcIjtcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBvZiBwaHlzaWNhbCBjb2xsaWRlci5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBoeXNYQ29sbGlkZXIgaW1wbGVtZW50cyBJQ29sbGlkZXIge1xuICBwcml2YXRlIHN0YXRpYyBfdGVtcFRyYW5zZm9ybToge1xuICAgIHRyYW5zbGF0aW9uOiBWZWN0b3IzO1xuICAgIHJvdGF0aW9uOiBRdWF0ZXJuaW9uO1xuICB9ID0geyB0cmFuc2xhdGlvbjogbnVsbCwgcm90YXRpb246IG51bGwgfTtcblxuICAvKiogQGludGVybmFsICovXG4gIF9weEFjdG9yOiBhbnk7XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuYWRkU2hhcGUgfVxuICAgKi9cbiAgYWRkU2hhcGUoc2hhcGU6IFBoeXNYQ29sbGlkZXJTaGFwZSk6IHZvaWQge1xuICAgIHRoaXMuX3B4QWN0b3IuYXR0YWNoU2hhcGUoc2hhcGUuX3B4U2hhcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIucmVtb3ZlU2hhcGUgfVxuICAgKi9cbiAgcmVtb3ZlU2hhcGUoc2hhcGU6IFBoeXNYQ29sbGlkZXJTaGFwZSk6IHZvaWQge1xuICAgIHRoaXMuX3B4QWN0b3IuZGV0YWNoU2hhcGUoc2hhcGUuX3B4U2hhcGUsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0gfVxuICAgKi9cbiAgc2V0V29ybGRUcmFuc2Zvcm0ocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcHhBY3Rvci5zZXRHbG9iYWxQb3NlKHRoaXMuX3RyYW5zZm9ybShwb3NpdGlvbiwgcm90YXRpb24pLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtIH1cbiAgICovXG4gIGdldFdvcmxkVHJhbnNmb3JtKG91dFBvc2l0aW9uOiBWZWN0b3IzLCBvdXRSb3RhdGlvbjogUXVhdGVybmlvbik6IHZvaWQge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMuX3B4QWN0b3IuZ2V0R2xvYmFsUG9zZSgpO1xuICAgIG91dFBvc2l0aW9uLnNldCh0cmFuc2Zvcm0udHJhbnNsYXRpb24ueCwgdHJhbnNmb3JtLnRyYW5zbGF0aW9uLnksIHRyYW5zZm9ybS50cmFuc2xhdGlvbi56KTtcbiAgICBvdXRSb3RhdGlvbi5zZXQodHJhbnNmb3JtLnJvdGF0aW9uLngsIHRyYW5zZm9ybS5yb3RhdGlvbi55LCB0cmFuc2Zvcm0ucm90YXRpb24ueiwgdHJhbnNmb3JtLnJvdGF0aW9uLncpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuZGVzdHJveSB9XG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3B4QWN0b3IucmVsZWFzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3RyYW5zZm9ybShwb3M6IFZlY3RvcjMsIHJvdDogUXVhdGVybmlvbik6IHsgdHJhbnNsYXRpb246IFZlY3RvcjM7IHJvdGF0aW9uOiBRdWF0ZXJuaW9uIH0ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFBoeXNYQ29sbGlkZXIuX3RlbXBUcmFuc2Zvcm07XG4gICAgdHJhbnNmb3JtLnRyYW5zbGF0aW9uID0gcG9zO1xuICAgIHRyYW5zZm9ybS5yb3RhdGlvbiA9IHJvdC5ub3JtYWxpemUoKTtcbiAgICByZXR1cm4gdHJhbnNmb3JtO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJRHluYW1pY0NvbGxpZGVyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IFBoeXNYQ29sbGlkZXIgfSBmcm9tIFwiLi9QaHlzWENvbGxpZGVyXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3MgfSBmcm9tIFwiLi9QaHlzWFBoeXNpY3NcIjtcblxuLyoqXG4gKiBUaGUgY29sbGlzaW9uIGRldGVjdGlvbiBtb2RlIGNvbnN0YW50cyB1c2VkIGZvciBQaHlzWER5bmFtaWNDb2xsaWRlci5jb2xsaXNpb25EZXRlY3Rpb25Nb2RlLlxuICogKi9cbmV4cG9ydCBlbnVtIENvbGxpc2lvbkRldGVjdGlvbk1vZGUge1xuICAvKiogQ29udGludW91cyBjb2xsaXNpb24gZGV0ZWN0aW9uIGlzIG9mZiBmb3IgdGhpcyBkeW5hbWljIGNvbGxpZGVyLiAqL1xuICBEaXNjcmV0ZSxcbiAgLyoqIENvbnRpbnVvdXMgY29sbGlzaW9uIGRldGVjdGlvbiBpcyBvbiBmb3IgY29sbGlkaW5nIHdpdGggc3RhdGljIG1lc2ggZ2VvbWV0cnkuICovXG4gIENvbnRpbnVvdXMsXG4gIC8qKiBDb250aW51b3VzIGNvbGxpc2lvbiBkZXRlY3Rpb24gaXMgb24gZm9yIGNvbGxpZGluZyB3aXRoIHN0YXRpYyBhbmQgZHluYW1pYyBnZW9tZXRyeS4gKi9cbiAgQ29udGludW91c0R5bmFtaWMsXG4gIC8qKiBTcGVjdWxhdGl2ZSBjb250aW51b3VzIGNvbGxpc2lvbiBkZXRlY3Rpb24gaXMgb24gZm9yIHN0YXRpYyBhbmQgZHluYW1pYyBnZW9tZXRyaWVzICovXG4gIENvbnRpbnVvdXNTcGVjdWxhdGl2ZVxufVxuXG4vKipcbiAqIEEgZHluYW1pYyBjb2xsaWRlciBjYW4gYWN0IHdpdGggc2VsZi1kZWZpbmVkIG1vdmVtZW50IG9yIHBoeXNpY2FsIGZvcmNlXG4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzWER5bmFtaWNDb2xsaWRlciBleHRlbmRzIFBoeXNYQ29sbGlkZXIgaW1wbGVtZW50cyBJRHluYW1pY0NvbGxpZGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBUcmFuc2xhdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wUm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbikge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gdGhpcy5fdHJhbnNmb3JtKHBvc2l0aW9uLCByb3RhdGlvbik7XG4gICAgdGhpcy5fcHhBY3RvciA9IFBoeXNYUGh5c2ljcy5fcHhQaHlzaWNzLmNyZWF0ZVJpZ2lkRHluYW1pYyh0cmFuc2Zvcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldExpbmVhckRhbXBpbmcgfVxuICAgKi9cbiAgc2V0TGluZWFyRGFtcGluZyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhBY3Rvci5zZXRMaW5lYXJEYW1waW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRBbmd1bGFyRGFtcGluZyB9XG4gICAqL1xuICBzZXRBbmd1bGFyRGFtcGluZyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhBY3Rvci5zZXRBbmd1bGFyRGFtcGluZyh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0TGluZWFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TGluZWFyVmVsb2NpdHkodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9weEFjdG9yLnNldExpbmVhclZlbG9jaXR5KHZhbHVlLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRBbmd1bGFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0QW5ndWxhclZlbG9jaXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5fcHhBY3Rvci5zZXRBbmd1bGFyVmVsb2NpdHkodmFsdWUsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldE1hc3MgfVxuICAgKi9cbiAgc2V0TWFzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhBY3Rvci5zZXRNYXNzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRDZW50ZXJPZk1hc3MgfVxuICAgKi9cbiAgc2V0Q2VudGVyT2ZNYXNzKHBvc2l0aW9uOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5fcHhBY3Rvci5zZXRDTWFzc0xvY2FsUG9zZShwb3NpdGlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0SW5lcnRpYVRlbnNvciB9XG4gICAqL1xuICBzZXRJbmVydGlhVGVuc29yKHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhpcy5fcHhBY3Rvci5zZXRNYXNzU3BhY2VJbmVydGlhVGVuc29yKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRNYXhBbmd1bGFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TWF4QW5ndWxhclZlbG9jaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weEFjdG9yLnNldE1heEFuZ3VsYXJWZWxvY2l0eSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0TWF4RGVwZW5ldHJhdGlvblZlbG9jaXR5IH1cbiAgICovXG4gIHNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcHhBY3Rvci5zZXRNYXhEZXBlbmV0cmF0aW9uVmVsb2NpdHkodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldFNsZWVwVGhyZXNob2xkIH1cbiAgICogQGRlZmF1bHQgMWUtNWYgKiBQeFRvbGVyYW5jZXNTY2FsZTo6c3BlZWQgKiBQeFRvbGVyYW5jZXNTY2FsZTo6c3BlZWRcbiAgICovXG4gIHNldFNsZWVwVGhyZXNob2xkKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weEFjdG9yLnNldFNsZWVwVGhyZXNob2xkKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRTb2x2ZXJJdGVyYXRpb25zIH1cbiAgICovXG4gIHNldFNvbHZlckl0ZXJhdGlvbnModmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3B4QWN0b3Iuc2V0U29sdmVySXRlcmF0aW9uQ291bnRzKHZhbHVlLCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRDb2xsaXNpb25EZXRlY3Rpb25Nb2RlIH1cbiAgICovXG4gIHNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgQ29sbGlzaW9uRGV0ZWN0aW9uTW9kZS5Db250aW51b3VzOlxuICAgICAgICB0aGlzLl9weEFjdG9yLnNldFJpZ2lkQm9keUZsYWcoUGh5c1hQaHlzaWNzLl9waHlzWC5QeFJpZ2lkQm9keUZsYWcuZUVOQUJMRV9DQ0QsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29sbGlzaW9uRGV0ZWN0aW9uTW9kZS5Db250aW51b3VzRHluYW1pYzpcbiAgICAgICAgdGhpcy5fcHhBY3Rvci5zZXRSaWdpZEJvZHlGbGFnKFBoeXNYUGh5c2ljcy5fcGh5c1guUHhSaWdpZEJvZHlGbGFnLmVFTkFCTEVfQ0NEX0ZSSUNUSU9OLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbGxpc2lvbkRldGVjdGlvbk1vZGUuQ29udGludW91c1NwZWN1bGF0aXZlOlxuICAgICAgICB0aGlzLl9weEFjdG9yLnNldFJpZ2lkQm9keUZsYWcoUGh5c1hQaHlzaWNzLl9waHlzWC5QeFJpZ2lkQm9keUZsYWcuZUVOQUJMRV9TUEVDVUxBVElWRV9DQ0QsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29sbGlzaW9uRGV0ZWN0aW9uTW9kZS5EaXNjcmV0ZTpcbiAgICAgICAgdGhpcy5fcHhBY3Rvci5zZXRSaWdpZEJvZHlGbGFnKFBoeXNYUGh5c2ljcy5fcGh5c1guUHhSaWdpZEJvZHlGbGFnLmVFTkFCTEVfQ0NELCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX3B4QWN0b3Iuc2V0UmlnaWRCb2R5RmxhZyhQaHlzWFBoeXNpY3MuX3BoeXNYLlB4UmlnaWRCb2R5RmxhZy5lRU5BQkxFX0NDRF9GUklDVElPTiwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9weEFjdG9yLnNldFJpZ2lkQm9keUZsYWcoUGh5c1hQaHlzaWNzLl9waHlzWC5QeFJpZ2lkQm9keUZsYWcuZUVOQUJMRV9TUEVDVUxBVElWRV9DQ0QsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldElzS2luZW1hdGljIH1cbiAgICovXG4gIHNldElzS2luZW1hdGljKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9weEFjdG9yLnNldFJpZ2lkQm9keUZsYWcoUGh5c1hQaHlzaWNzLl9waHlzWC5QeFJpZ2lkQm9keUZsYWcuZUtJTkVNQVRJQywgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3B4QWN0b3Iuc2V0UmlnaWRCb2R5RmxhZyhQaHlzWFBoeXNpY3MuX3BoeXNYLlB4UmlnaWRCb2R5RmxhZy5lS0lORU1BVElDLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldENvbnN0cmFpbnRzIH1cbiAgICovXG4gIHNldENvbnN0cmFpbnRzKGZsYWdzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weEFjdG9yLnNldFJpZ2lkRHluYW1pY0xvY2tGbGFncyhmbGFncyk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuYWRkRm9yY2UgfVxuICAgKi9cbiAgYWRkRm9yY2UoZm9yY2U6IFZlY3RvcjMpIHtcbiAgICB0aGlzLl9weEFjdG9yLmFkZEZvcmNlKHsgeDogZm9yY2UueCwgeTogZm9yY2UueSwgejogZm9yY2UueiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5hZGRUb3JxdWUgfVxuICAgKi9cbiAgYWRkVG9ycXVlKHRvcnF1ZTogVmVjdG9yMykge1xuICAgIHRoaXMuX3B4QWN0b3IuYWRkVG9ycXVlKHsgeDogdG9ycXVlLngsIHk6IHRvcnF1ZS55LCB6OiB0b3JxdWUueiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5tb3ZlIH1cbiAgICovXG4gIG1vdmUocG9zaXRpb25PclJvdGF0aW9uOiBWZWN0b3IzIHwgUXVhdGVybmlvbiwgcm90YXRpb24/OiBRdWF0ZXJuaW9uKTogdm9pZCB7XG4gICAgaWYgKHJvdGF0aW9uKSB7XG4gICAgICB0aGlzLl9weEFjdG9yLnNldEtpbmVtYXRpY1RhcmdldChwb3NpdGlvbk9yUm90YXRpb24sIHJvdGF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wVHJhbnNsYXRpb24gPSBQaHlzWER5bmFtaWNDb2xsaWRlci5fdGVtcFRyYW5zbGF0aW9uO1xuICAgIGNvbnN0IHRlbXBSb3RhdGlvbiA9IFBoeXNYRHluYW1pY0NvbGxpZGVyLl90ZW1wUm90YXRpb247XG4gICAgdGhpcy5nZXRXb3JsZFRyYW5zZm9ybSh0ZW1wVHJhbnNsYXRpb24sIHRlbXBSb3RhdGlvbik7XG4gICAgaWYgKHBvc2l0aW9uT3JSb3RhdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcbiAgICAgIHRoaXMuX3B4QWN0b3Iuc2V0S2luZW1hdGljVGFyZ2V0KHBvc2l0aW9uT3JSb3RhdGlvbiwgdGVtcFJvdGF0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcHhBY3Rvci5zZXRLaW5lbWF0aWNUYXJnZXQodGVtcFRyYW5zbGF0aW9uLCBwb3NpdGlvbk9yUm90YXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zbGVlcCB9XG4gICAqL1xuICBzbGVlcCgpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fcHhBY3Rvci5wdXRUb1NsZWVwKCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIud2FrZVVwIH1cbiAgICovXG4gIHdha2VVcCgpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fcHhBY3Rvci53YWtlVXAoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVBoeXNpY3NNYW5hZ2VyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBSYXksIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgRGlzb3JkZXJlZEFycmF5IH0gZnJvbSBcIi4vRGlzb3JkZXJlZEFycmF5XCI7XG5pbXBvcnQgeyBQaHlzWENoYXJhY3RlckNvbnRyb2xsZXIgfSBmcm9tIFwiLi9QaHlzWENoYXJhY3RlckNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IFBoeXNYQ29sbGlkZXIgfSBmcm9tIFwiLi9QaHlzWENvbGxpZGVyXCI7XG5pbXBvcnQgeyBQaHlzWFBoeXNpY3MgfSBmcm9tIFwiLi9QaHlzWFBoeXNpY3NcIjtcbmltcG9ydCB7IFBoeXNYQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL1BoeXNYQ29sbGlkZXJTaGFwZVwiO1xuXG4vKipcbiAqIEEgbWFuYWdlciBpcyBhIGNvbGxlY3Rpb24gb2YgY29sbGlkZXJzIGFuZCBjb25zdHJhaW50cyB3aGljaCBjYW4gaW50ZXJhY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzWFBoeXNpY3NNYW5hZ2VyIGltcGxlbWVudHMgSVBoeXNpY3NNYW5hZ2VyIHtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfcHhDb250cm9sbGVyTWFuYWdlcjogYW55ID0gbnVsbDtcblxuICBwcml2YXRlIHN0YXRpYyBfdGVtcFBvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBOb3JtYWw6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuICBwcml2YXRlIHN0YXRpYyBfcHhSYXljYXN0SGl0OiBhbnk7XG4gIHByaXZhdGUgc3RhdGljIF9weEZpbHRlckRhdGE6IGFueTtcblxuICBzdGF0aWMgX2luaXQoKSB7XG4gICAgUGh5c1hQaHlzaWNzTWFuYWdlci5fcHhSYXljYXN0SGl0ID0gbmV3IFBoeXNYUGh5c2ljcy5fcGh5c1guUHhSYXljYXN0SGl0KCk7XG4gICAgUGh5c1hQaHlzaWNzTWFuYWdlci5fcHhGaWx0ZXJEYXRhID0gbmV3IFBoeXNYUGh5c2ljcy5fcGh5c1guUHhRdWVyeUZpbHRlckRhdGEoKTtcbiAgICBQaHlzWFBoeXNpY3NNYW5hZ2VyLl9weEZpbHRlckRhdGEuZmxhZ3MgPSBuZXcgUGh5c1hQaHlzaWNzLl9waHlzWC5QeFF1ZXJ5RmxhZ3MoXG4gICAgICBRdWVyeUZsYWcuU1RBVElDIHwgUXVlcnlGbGFnLkRZTkFNSUMgfCBRdWVyeUZsYWcuUFJFX0ZJTFRFUlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9weFNjZW5lOiBhbnk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25Db250YWN0RW50ZXI/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQ29udGFjdEV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQ29udGFjdFN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uVHJpZ2dlckVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vblRyaWdnZXJFeGl0PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vblRyaWdnZXJTdGF5PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRFdmVudHM6IERpc29yZGVyZWRBcnJheTxUcmlnZ2VyRXZlbnQ+ID0gbmV3IERpc29yZGVyZWRBcnJheTxUcmlnZ2VyRXZlbnQ+KCk7XG4gIHByaXZhdGUgX2V2ZW50TWFwOiBSZWNvcmQ8bnVtYmVyLCBSZWNvcmQ8bnVtYmVyLCBUcmlnZ2VyRXZlbnQ+PiA9IHt9O1xuICBwcml2YXRlIF9ldmVudFBvb2w6IFRyaWdnZXJFdmVudFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb25Db250YWN0RW50ZXI/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0RXhpdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvbkNvbnRhY3RTdGF5PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlckVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlckV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyU3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZFxuICApIHtcbiAgICB0aGlzLl9vbkNvbnRhY3RFbnRlciA9IG9uQ29udGFjdEVudGVyO1xuICAgIHRoaXMuX29uQ29udGFjdEV4aXQgPSBvbkNvbnRhY3RFeGl0O1xuICAgIHRoaXMuX29uQ29udGFjdFN0YXkgPSBvbkNvbnRhY3RTdGF5O1xuICAgIHRoaXMuX29uVHJpZ2dlckVudGVyID0gb25UcmlnZ2VyRW50ZXI7XG4gICAgdGhpcy5fb25UcmlnZ2VyRXhpdCA9IG9uVHJpZ2dlckV4aXQ7XG4gICAgdGhpcy5fb25UcmlnZ2VyU3RheSA9IG9uVHJpZ2dlclN0YXk7XG5cbiAgICBjb25zdCB0cmlnZ2VyQ2FsbGJhY2sgPSB7XG4gICAgICBvbkNvbnRhY3RCZWdpbjogKG9iajEsIG9iajIpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXgxID0gb2JqMS5nZXRRdWVyeUZpbHRlckRhdGEoKS53b3JkMDtcbiAgICAgICAgY29uc3QgaW5kZXgyID0gb2JqMi5nZXRRdWVyeUZpbHRlckRhdGEoKS53b3JkMDtcbiAgICAgICAgdGhpcy5fb25Db250YWN0RW50ZXIoaW5kZXgxLCBpbmRleDIpO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGFjdEVuZDogKG9iajEsIG9iajIpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXgxID0gb2JqMS5nZXRRdWVyeUZpbHRlckRhdGEoKS53b3JkMDtcbiAgICAgICAgY29uc3QgaW5kZXgyID0gb2JqMi5nZXRRdWVyeUZpbHRlckRhdGEoKS53b3JkMDtcbiAgICAgICAgdGhpcy5fb25Db250YWN0RXhpdChpbmRleDEsIGluZGV4Mik7XG4gICAgICB9LFxuICAgICAgb25Db250YWN0UGVyc2lzdDogKG9iajEsIG9iajIpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXgxID0gb2JqMS5nZXRRdWVyeUZpbHRlckRhdGEoKS53b3JkMDtcbiAgICAgICAgY29uc3QgaW5kZXgyID0gb2JqMi5nZXRRdWVyeUZpbHRlckRhdGEoKS53b3JkMDtcbiAgICAgICAgdGhpcy5fb25Db250YWN0U3RheShpbmRleDEsIGluZGV4Mik7XG4gICAgICB9LFxuICAgICAgb25UcmlnZ2VyQmVnaW46IChvYmoxLCBvYmoyKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4MSA9IG9iajEuZ2V0UXVlcnlGaWx0ZXJEYXRhKCkud29yZDA7XG4gICAgICAgIGNvbnN0IGluZGV4MiA9IG9iajIuZ2V0UXVlcnlGaWx0ZXJEYXRhKCkud29yZDA7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gaW5kZXgxIDwgaW5kZXgyID8gdGhpcy5fZ2V0VHJpZ2dlcihpbmRleDEsIGluZGV4MikgOiB0aGlzLl9nZXRUcmlnZ2VyKGluZGV4MiwgaW5kZXgxKTtcbiAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcjtcbiAgICAgICAgdGhpcy5fY3VycmVudEV2ZW50cy5hZGQoZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIG9uVHJpZ2dlckVuZDogKG9iajEsIG9iajIpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXgxID0gb2JqMS5nZXRRdWVyeUZpbHRlckRhdGEoKS53b3JkMDtcbiAgICAgICAgY29uc3QgaW5kZXgyID0gb2JqMi5nZXRRdWVyeUZpbHRlckRhdGEoKS53b3JkMDtcbiAgICAgICAgbGV0IGV2ZW50OiBUcmlnZ2VyRXZlbnQ7XG4gICAgICAgIGlmIChpbmRleDEgPCBpbmRleDIpIHtcbiAgICAgICAgICBjb25zdCBzdWJNYXAgPSB0aGlzLl9ldmVudE1hcFtpbmRleDFdO1xuICAgICAgICAgIGV2ZW50ID0gc3ViTWFwW2luZGV4Ml07XG4gICAgICAgICAgc3ViTWFwW2luZGV4Ml0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3ViTWFwID0gdGhpcy5fZXZlbnRNYXBbaW5kZXgyXTtcbiAgICAgICAgICBldmVudCA9IHN1Yk1hcFtpbmRleDFdO1xuICAgICAgICAgIHN1Yk1hcFtpbmRleDFdID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuRXhpdDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgUEhZU1hTaW11bGF0aW9uQ2FsbGJhY2tJbnN0YW5jZSA9IFBoeXNYUGh5c2ljcy5fcGh5c1guUHhTaW11bGF0aW9uRXZlbnRDYWxsYmFjay5pbXBsZW1lbnQodHJpZ2dlckNhbGxiYWNrKTtcbiAgICBjb25zdCBzY2VuZURlc2MgPSBQaHlzWFBoeXNpY3MuX3BoeXNYLmdldERlZmF1bHRTY2VuZURlc2MoXG4gICAgICBQaHlzWFBoeXNpY3MuX3B4UGh5c2ljcy5nZXRUb2xlcmFuY2VzU2NhbGUoKSxcbiAgICAgIDAsXG4gICAgICBQSFlTWFNpbXVsYXRpb25DYWxsYmFja0luc3RhbmNlXG4gICAgKTtcbiAgICB0aGlzLl9weFNjZW5lID0gUGh5c1hQaHlzaWNzLl9weFBoeXNpY3MuY3JlYXRlU2NlbmUoc2NlbmVEZXNjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLnNldEdyYXZpdHkgfVxuICAgKi9cbiAgc2V0R3Jhdml0eSh2YWx1ZTogVmVjdG9yMykge1xuICAgIHRoaXMuX3B4U2NlbmUuc2V0R3Jhdml0eSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5hZGRDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIGFkZENvbGxpZGVyU2hhcGUoY29sbGlkZXJTaGFwZTogUGh5c1hDb2xsaWRlclNoYXBlKSB7XG4gICAgdGhpcy5fZXZlbnRNYXBbY29sbGlkZXJTaGFwZS5faWRdID0ge307XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yZW1vdmVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHJlbW92ZUNvbGxpZGVyU2hhcGUoY29sbGlkZXJTaGFwZTogUGh5c1hDb2xsaWRlclNoYXBlKSB7XG4gICAgY29uc3QgeyBfZXZlbnRQb29sOiBldmVudFBvb2wsIF9jdXJyZW50RXZlbnRzOiBjdXJyZW50RXZlbnRzIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgX2lkOiBzaGFwZUlEIH0gPSBjb2xsaWRlclNoYXBlO1xuICAgIGZvciAobGV0IGkgPSBjdXJyZW50RXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBldmVudCA9IGN1cnJlbnRFdmVudHMuZ2V0KGkpO1xuICAgICAgaWYgKGV2ZW50LmluZGV4MSA9PSBzaGFwZUlEIHx8IGV2ZW50LmluZGV4MiA9PSBzaGFwZUlEKSB7XG4gICAgICAgIGN1cnJlbnRFdmVudHMuZGVsZXRlQnlJbmRleChpKTtcbiAgICAgICAgZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUgdGhpcy5fZXZlbnRNYXBbc2hhcGVJRF07XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5hZGRDb2xsaWRlciB9XG4gICAqL1xuICBhZGRDb2xsaWRlcihjb2xsaWRlcjogUGh5c1hDb2xsaWRlcik6IHZvaWQge1xuICAgIHRoaXMuX3B4U2NlbmUuYWRkQWN0b3IoY29sbGlkZXIuX3B4QWN0b3IsIG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ29sbGlkZXIgfVxuICAgKi9cbiAgcmVtb3ZlQ29sbGlkZXIoY29sbGlkZXI6IFBoeXNYQ29sbGlkZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9weFNjZW5lLnJlbW92ZUFjdG9yKGNvbGxpZGVyLl9weEFjdG9yLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLmFkZENoYXJhY3RlckNvbnRyb2xsZXIgfVxuICAgKi9cbiAgYWRkQ2hhcmFjdGVyQ29udHJvbGxlcihjaGFyYWN0ZXJDb250cm9sbGVyOiBQaHlzWENoYXJhY3RlckNvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICBjb25zdCBsYXN0UFhNYW5hZ2VyID0gY2hhcmFjdGVyQ29udHJvbGxlci5fcHhNYW5hZ2VyO1xuICAgIGNvbnN0IHNoYXBlID0gY2hhcmFjdGVyQ29udHJvbGxlci5fc2hhcGU7XG4gICAgaWYgKHNoYXBlKSB7XG4gICAgICBpZiAobGFzdFBYTWFuYWdlciAhPT0gdGhpcykge1xuICAgICAgICBsYXN0UFhNYW5hZ2VyICYmIGNoYXJhY3RlckNvbnRyb2xsZXIuX2Rlc3Ryb3lQWENvbnRyb2xsZXIoKTtcbiAgICAgICAgY2hhcmFjdGVyQ29udHJvbGxlci5fY3JlYXRlUFhDb250cm9sbGVyKHRoaXMsIHNoYXBlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3B4U2NlbmUuYWRkQ29udHJvbGxlcihjaGFyYWN0ZXJDb250cm9sbGVyLl9weENvbnRyb2xsZXIpO1xuICAgIH1cbiAgICBjaGFyYWN0ZXJDb250cm9sbGVyLl9weE1hbmFnZXIgPSB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIucmVtb3ZlQ2hhcmFjdGVyQ29udHJvbGxlciB9XG4gICAqL1xuICByZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyKGNoYXJhY3RlckNvbnRyb2xsZXI6IFBoeXNYQ2hhcmFjdGVyQ29udHJvbGxlcik6IHZvaWQge1xuICAgIGlmIChjaGFyYWN0ZXJDb250cm9sbGVyLl9zaGFwZSkge1xuICAgICAgdGhpcy5fcHhTY2VuZS5yZW1vdmVDb250cm9sbGVyKGNoYXJhY3RlckNvbnRyb2xsZXIuX3B4Q29udHJvbGxlcik7XG4gICAgfVxuICAgIGNoYXJhY3RlckNvbnRyb2xsZXIuX3B4TWFuYWdlciA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci51cGRhdGUgfVxuICAgKi9cbiAgdXBkYXRlKGVsYXBzZWRUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaW11bGF0ZShlbGFwc2VkVGltZSk7XG4gICAgdGhpcy5fZmV0Y2hSZXN1bHRzKCk7XG4gICAgdGhpcy5fZmlyZUV2ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yYXljYXN0IH1cbiAgICovXG4gIHJheWNhc3QoXG4gICAgcmF5OiBSYXksXG4gICAgZGlzdGFuY2U6IG51bWJlcixcbiAgICBvblJheWNhc3Q6IChvYmo6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICBoaXQ/OiAoc2hhcGVVbmlxdWVJRDogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBwb3NpdGlvbjogVmVjdG9yMywgbm9ybWFsOiBWZWN0b3IzKSA9PiB2b2lkXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgX3B4UmF5Y2FzdEhpdDogcHhIaXRSZXN1bHQgfSA9IFBoeXNYUGh5c2ljc01hbmFnZXI7XG4gICAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgMy40ZTM4KTsgLy8gZmxvYXQzMiBtYXggdmFsdWUgbGltaXQgaW4gcGh5c3ggcmF5Y2FzdC5cblxuICAgIGNvbnN0IHJheWNhc3RDYWxsYmFjayA9IHtcbiAgICAgIHByZUZpbHRlcjogKGZpbHRlckRhdGEsIHNoYXBlLCBhY3RvcikgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHNoYXBlLmdldFF1ZXJ5RmlsdGVyRGF0YSgpLndvcmQwO1xuICAgICAgICBpZiAob25SYXljYXN0KGluZGV4KSkge1xuICAgICAgICAgIHJldHVybiAyOyAvLyBlQkxPQ0tcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gZU5PTkVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHBvc3RGaWx0ZXI6IChmaWx0ZXJEYXRhLCBoaXQpID0+IHt9XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3B4U2NlbmUucmF5Y2FzdFNpbmdsZShcbiAgICAgIHJheS5vcmlnaW4sXG4gICAgICByYXkuZGlyZWN0aW9uLFxuICAgICAgZGlzdGFuY2UsXG4gICAgICBweEhpdFJlc3VsdCxcbiAgICAgIFBoeXNYUGh5c2ljc01hbmFnZXIuX3B4RmlsdGVyRGF0YSxcbiAgICAgIFBoeXNYUGh5c2ljcy5fcGh5c1guUHhRdWVyeUZpbHRlckNhbGxiYWNrLmltcGxlbWVudChyYXljYXN0Q2FsbGJhY2spXG4gICAgKTtcblxuICAgIGlmIChyZXN1bHQgJiYgaGl0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgeyBfdGVtcFBvc2l0aW9uOiBwb3NpdGlvbiwgX3RlbXBOb3JtYWw6IG5vcm1hbCB9ID0gUGh5c1hQaHlzaWNzTWFuYWdlcjtcbiAgICAgIGNvbnN0IHsgcG9zaXRpb246IHB4UG9zaXRpb24sIG5vcm1hbDogcHhOb3JtYWwgfSA9IHB4SGl0UmVzdWx0O1xuICAgICAgcG9zaXRpb24uc2V0KHB4UG9zaXRpb24ueCwgcHhQb3NpdGlvbi55LCBweFBvc2l0aW9uLnopO1xuICAgICAgbm9ybWFsLnNldChweE5vcm1hbC54LCBweE5vcm1hbC55LCBweE5vcm1hbC56KTtcblxuICAgICAgaGl0KHB4SGl0UmVzdWx0LmdldFNoYXBlKCkuZ2V0UXVlcnlGaWx0ZXJEYXRhKCkud29yZDAsIHB4SGl0UmVzdWx0LmRpc3RhbmNlLCBwb3NpdGlvbiwgbm9ybWFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF9nZXRDb250cm9sbGVyTWFuYWdlcigpOiBhbnkge1xuICAgIGxldCBweENvbnRyb2xsZXJNYW5hZ2VyID0gdGhpcy5fcHhDb250cm9sbGVyTWFuYWdlcjtcbiAgICBpZiAocHhDb250cm9sbGVyTWFuYWdlciA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fcHhDb250cm9sbGVyTWFuYWdlciA9IHB4Q29udHJvbGxlck1hbmFnZXIgPSB0aGlzLl9weFNjZW5lLmNyZWF0ZUNvbnRyb2xsZXJNYW5hZ2VyKCk7XG4gICAgfVxuICAgIHJldHVybiBweENvbnRyb2xsZXJNYW5hZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2ltdWxhdGUoZWxhcHNlZFRpbWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3B4U2NlbmUuc2ltdWxhdGUoZWxhcHNlZFRpbWUsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmV0Y2hSZXN1bHRzKGJsb2NrOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuX3B4U2NlbmUuZmV0Y2hSZXN1bHRzKGJsb2NrKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRyaWdnZXIoaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKTogVHJpZ2dlckV2ZW50IHtcbiAgICBsZXQgZXZlbnQ6IFRyaWdnZXJFdmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRQb29sLmxlbmd0aCkge1xuICAgICAgZXZlbnQgPSB0aGlzLl9ldmVudFBvb2wucG9wKCk7XG4gICAgICBldmVudC5pbmRleDEgPSBpbmRleDE7XG4gICAgICBldmVudC5pbmRleDIgPSBpbmRleDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50ID0gbmV3IFRyaWdnZXJFdmVudChpbmRleDEsIGluZGV4Mik7XG4gICAgfVxuICAgIHRoaXMuX2V2ZW50TWFwW2luZGV4MV1baW5kZXgyXSA9IGV2ZW50O1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpcmVFdmVudCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IF9ldmVudFBvb2w6IGV2ZW50UG9vbCwgX2N1cnJlbnRFdmVudHM6IGN1cnJlbnRFdmVudHMgfSA9IHRoaXM7XG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRFdmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gY3VycmVudEV2ZW50cy5nZXQoaSk7XG4gICAgICBpZiAoZXZlbnQuc3RhdGUgPT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgdGhpcy5fb25UcmlnZ2VyRW50ZXIoZXZlbnQuaW5kZXgxLCBldmVudC5pbmRleDIpO1xuICAgICAgICBldmVudC5zdGF0ZSA9IFRyaWdnZXJFdmVudFN0YXRlLlN0YXk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09IFRyaWdnZXJFdmVudFN0YXRlLlN0YXkpIHtcbiAgICAgICAgdGhpcy5fb25UcmlnZ2VyU3RheShldmVudC5pbmRleDEsIGV2ZW50LmluZGV4Mik7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09IFRyaWdnZXJFdmVudFN0YXRlLkV4aXQpIHtcbiAgICAgICAgdGhpcy5fb25UcmlnZ2VyRXhpdChldmVudC5pbmRleDEsIGV2ZW50LmluZGV4Mik7XG4gICAgICAgIGN1cnJlbnRFdmVudHMuZGVsZXRlQnlJbmRleChpKTtcbiAgICAgICAgZXZlbnRQb29sLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcmluZyBmbGFncyBmb3Igc2NlbmUgcXVlcmllcy5cbiAqL1xuZW51bSBRdWVyeUZsYWcge1xuICBTVEFUSUMgPSAxIDw8IDAsXG4gIERZTkFNSUMgPSAxIDw8IDEsXG4gIFBSRV9GSUxURVIgPSAxIDw8IDIsXG4gIFBPU1RfRklMVEVSID0gMSA8PCAzLFxuICBBTllfSElUID0gMSA8PCA0LFxuICBOT19CTE9DSyA9IDEgPDwgNVxufVxuXG4vKipcbiAqIFBoeXNpY3Mgc3RhdGVcbiAqL1xuZW51bSBUcmlnZ2VyRXZlbnRTdGF0ZSB7XG4gIEVudGVyLFxuICBTdGF5LFxuICBFeGl0XG59XG5cbi8qKlxuICogVHJpZ2dlciBldmVudCB0byBzdG9yZSBpbnRlcmFjdGl2ZSBvYmplY3QgaWRzIGFuZCBzdGF0ZS5cbiAqL1xuY2xhc3MgVHJpZ2dlckV2ZW50IHtcbiAgc3RhdGU6IFRyaWdnZXJFdmVudFN0YXRlO1xuICBpbmRleDE6IG51bWJlcjtcbiAgaW5kZXgyOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKSB7XG4gICAgdGhpcy5pbmRleDEgPSBpbmRleDE7XG4gICAgdGhpcy5pbmRleDIgPSBpbmRleDI7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBoeXNYUGh5c2ljcyB9IGZyb20gXCIuL1BoeXNYUGh5c2ljc1wiO1xuaW1wb3J0IHsgSVBoeXNpY3NNYXRlcmlhbCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuXG4vKipcbiAqIFBoeXNpY3MgbWF0ZXJpYWwgZGVzY3JpYmVzIGhvdyB0byBoYW5kbGUgY29sbGlkaW5nIG9iamVjdHMgKGZyaWN0aW9uLCBib3VuY2luZXNzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNYUGh5c2ljc01hdGVyaWFsIGltcGxlbWVudHMgSVBoeXNpY3NNYXRlcmlhbCB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3B4TWF0ZXJpYWw6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdGF0aWNGcmljdGlvbjogbnVtYmVyLFxuICAgIGR5bmFtaWNGcmljdGlvbjogbnVtYmVyLFxuICAgIGJvdW5jaW5lc3M6IG51bWJlcixcbiAgICBmcmljdGlvbkNvbWJpbmU6IENvbWJpbmVNb2RlLFxuICAgIGJvdW5jZUNvbWJpbmU6IENvbWJpbmVNb2RlXG4gICkge1xuICAgIGNvbnN0IHB4TWF0ZXJpYWwgPSBQaHlzWFBoeXNpY3MuX3B4UGh5c2ljcy5jcmVhdGVNYXRlcmlhbChzdGF0aWNGcmljdGlvbiwgZHluYW1pY0ZyaWN0aW9uLCBib3VuY2luZXNzKTtcbiAgICBweE1hdGVyaWFsLnNldEZyaWN0aW9uQ29tYmluZU1vZGUoZnJpY3Rpb25Db21iaW5lKTtcbiAgICBweE1hdGVyaWFsLnNldFJlc3RpdHV0aW9uQ29tYmluZU1vZGUoYm91bmNlQ29tYmluZSk7XG4gICAgdGhpcy5fcHhNYXRlcmlhbCA9IHB4TWF0ZXJpYWw7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0Qm91bmNpbmVzcyB9XG4gICAqL1xuICBzZXRCb3VuY2luZXNzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9weE1hdGVyaWFsLnNldFJlc3RpdHV0aW9uKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYXRlcmlhbC5zZXREeW5hbWljRnJpY3Rpb24gfVxuICAgKi9cbiAgc2V0RHluYW1pY0ZyaWN0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9weE1hdGVyaWFsLnNldER5bmFtaWNGcmljdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0U3RhdGljRnJpY3Rpb24gfVxuICAgKi9cbiAgc2V0U3RhdGljRnJpY3Rpb24odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3B4TWF0ZXJpYWwuc2V0U3RhdGljRnJpY3Rpb24odmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEJvdW5jZUNvbWJpbmUgfVxuICAgKi9cbiAgc2V0Qm91bmNlQ29tYmluZSh2YWx1ZTogQ29tYmluZU1vZGUpIHtcbiAgICB0aGlzLl9weE1hdGVyaWFsLnNldFJlc3RpdHV0aW9uQ29tYmluZU1vZGUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldEZyaWN0aW9uQ29tYmluZSB9XG4gICAqL1xuICBzZXRGcmljdGlvbkNvbWJpbmUodmFsdWU6IENvbWJpbmVNb2RlKSB7XG4gICAgdGhpcy5fcHhNYXRlcmlhbC5zZXRGcmljdGlvbkNvbWJpbmVNb2RlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYXRlcmlhbC5kZXN0cm95IH1cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcHhNYXRlcmlhbC5yZWxlYXNlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgaG93IHBoeXNpY3MgbWF0ZXJpYWxzIG9mIHRoZSBjb2xsaWRpbmcgb2JqZWN0cyBhcmUgY29tYmluZWQuXG4gKi9cbmVudW0gQ29tYmluZU1vZGUge1xuICAvKiogQXZlcmFnZXMgdGhlIGZyaWN0aW9uL2JvdW5jZSBvZiB0aGUgdHdvIGNvbGxpZGluZyBtYXRlcmlhbHMuICovXG4gIEF2ZXJhZ2UsXG4gIC8qKiBVc2VzIHRoZSBzbWFsbGVyIGZyaWN0aW9uL2JvdW5jZSBvZiB0aGUgdHdvIGNvbGxpZGluZyBtYXRlcmlhbHMuICovXG4gIE1pbmltdW0sXG4gIC8qKiBNdWx0aXBsaWVzIHRoZSBmcmljdGlvbi9ib3VuY2Ugb2YgdGhlIHR3byBjb2xsaWRpbmcgbWF0ZXJpYWxzLiAqL1xuICBNdWx0aXBseSxcbiAgLyoqIFVzZXMgdGhlIGxhcmdlciBmcmljdGlvbi9ib3VuY2Ugb2YgdGhlIHR3byBjb2xsaWRpbmcgbWF0ZXJpYWxzLiAqL1xuICBNYXhpbXVtXG59XG4iLCJpbXBvcnQgeyBQaHlzWFBoeXNpY3MgfSBmcm9tIFwiLi9QaHlzWFBoeXNpY3NcIjtcbmltcG9ydCB7IElTdGF0aWNDb2xsaWRlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUGh5c1hDb2xsaWRlciB9IGZyb20gXCIuL1BoeXNYQ29sbGlkZXJcIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIEEgc3RhdGljIGNvbGxpZGVyIGNvbXBvbmVudCB0aGF0IHdpbGwgbm90IG1vdmUuXG4gKiBAcmVtYXJrcyBNb3N0bHkgdXNlZCBmb3Igb2JqZWN0IHdoaWNoIGFsd2F5cyBzdGF5cyBhdCB0aGUgc2FtZSBwbGFjZSBhbmQgbmV2ZXIgbW92ZXMgYXJvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgUGh5c1hTdGF0aWNDb2xsaWRlciBleHRlbmRzIFBoeXNYQ29sbGlkZXIgaW1wbGVtZW50cyBJU3RhdGljQ29sbGlkZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBQaHlzWCBzdGF0aWMgYWN0b3IuXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIFRoZSBnbG9iYWwgcG9zaXRpb25cbiAgICogQHBhcmFtIHJvdGF0aW9uIC0gVGhlIGdsb2JhbCByb3RhdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9weEFjdG9yID0gUGh5c1hQaHlzaWNzLl9weFBoeXNpY3MuY3JlYXRlUmlnaWRTdGF0aWModGhpcy5fdHJhbnNmb3JtKHBvc2l0aW9uLCByb3RhdGlvbikpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJUGxhbmVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IFBoeXNYUGh5c2ljcyB9IGZyb20gXCIuLi9QaHlzWFBoeXNpY3NcIjtcbmltcG9ydCB7IFBoeXNYUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL1BoeXNYUGh5c2ljc01hdGVyaWFsXCI7XG5pbXBvcnQgeyBQaHlzWENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9QaHlzWENvbGxpZGVyU2hhcGVcIjtcblxuLyoqXG4gKiBQbGFuZSBjb2xsaWRlciBzaGFwZSBpbiBQaHlzWC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBoeXNYUGxhbmVDb2xsaWRlclNoYXBlIGV4dGVuZHMgUGh5c1hDb2xsaWRlclNoYXBlIGltcGxlbWVudHMgSVBsYW5lQ29sbGlkZXJTaGFwZSB7XG4gIC8qKlxuICAgKiBJbml0IFBoeXNYQ29sbGlkZXIgYW5kIGFsbG9jIFBoeXNYIG9iamVjdHMuXG4gICAqIEBwYXJhbSB1bmlxdWVJRCAtIFVuaXF1ZUlEIG1hcmsgY29sbGlkZXJcbiAgICogQHBhcmFtIG1hdGVyaWFsIC0gTWF0ZXJpYWwgb2YgUGh5c1hDb2xsaWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IodW5pcXVlSUQ6IG51bWJlciwgbWF0ZXJpYWw6IFBoeXNYUGh5c2ljc01hdGVyaWFsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9heGlzID0gbmV3IFF1YXRlcm5pb24oMCwgMCwgUGh5c1hDb2xsaWRlclNoYXBlLmhhbGZTcXJ0LCBQaHlzWENvbGxpZGVyU2hhcGUuaGFsZlNxcnQpO1xuICAgIHRoaXMuX3BoeXN4Um90YXRpb24uY29weUZyb20odGhpcy5fYXhpcyk7XG5cbiAgICB0aGlzLl9weEdlb21ldHJ5ID0gbmV3IFBoeXNYUGh5c2ljcy5fcGh5c1guUHhQbGFuZUdlb21ldHJ5KCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZShtYXRlcmlhbCwgdW5pcXVlSUQpO1xuICAgIHRoaXMuX3NldExvY2FsUG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRXb3JsZFNjYWxlIH1cbiAgICovXG4gIHNldFdvcmxkU2NhbGUoc2NhbGU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9zY2FsZS5jb3B5RnJvbShzY2FsZSk7XG4gICAgdGhpcy5fc2V0TG9jYWxQb3NlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBoeXNYUGh5c2ljcyB9IGZyb20gXCIuLi9QaHlzWFBoeXNpY3NcIjtcbmltcG9ydCB7IElTcGhlcmVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBQaHlzWENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9QaHlzWENvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IFBoeXNYUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4uL1BoeXNYUGh5c2ljc01hdGVyaWFsXCI7XG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcblxuLyoqXG4gKiBTcGhlcmUgY29sbGlkZXIgc2hhcGUgaW4gUGh5c1guXG4gKi9cbmV4cG9ydCBjbGFzcyBQaHlzWFNwaGVyZUNvbGxpZGVyU2hhcGUgZXh0ZW5kcyBQaHlzWENvbGxpZGVyU2hhcGUgaW1wbGVtZW50cyBJU3BoZXJlQ29sbGlkZXJTaGFwZSB7XG4gIHByaXZhdGUgX3JhZGl1czogbnVtYmVyO1xuICBwcml2YXRlIF9tYXhTY2FsZTogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogSW5pdCBQaHlzWENvbGxpZGVyIGFuZCBhbGxvYyBQaHlzWCBvYmplY3RzLlxuICAgKiBAcGFyYW0gdW5pcXVlSUQgLSBVbmlxdWVJRCBtYXJrIGNvbGxpZGVyXG4gICAqIEBwYXJhbSByYWRpdXMgLSBTaXplIG9mIFNwaGVyZUNvbGxpZGVyXG4gICAqIEBwYXJhbSBtYXRlcmlhbCAtIE1hdGVyaWFsIG9mIFBoeXNYQ29sbGlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHVuaXF1ZUlEOiBudW1iZXIsIHJhZGl1czogbnVtYmVyLCBtYXRlcmlhbDogUGh5c1hQaHlzaWNzTWF0ZXJpYWwpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fcmFkaXVzID0gcmFkaXVzO1xuXG4gICAgdGhpcy5fcHhHZW9tZXRyeSA9IG5ldyBQaHlzWFBoeXNpY3MuX3BoeXNYLlB4U3BoZXJlR2VvbWV0cnkodGhpcy5fcmFkaXVzICogdGhpcy5fbWF4U2NhbGUpO1xuICAgIHRoaXMuX2luaXRpYWxpemUobWF0ZXJpYWwsIHVuaXF1ZUlEKTtcbiAgICB0aGlzLl9zZXRMb2NhbFBvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVNwaGVyZUNvbGxpZGVyU2hhcGUuc2V0UmFkaXVzIH1cbiAgICovXG4gIHNldFJhZGl1cyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcmFkaXVzID0gdmFsdWU7XG4gICAgdGhpcy5fcHhHZW9tZXRyeS5yYWRpdXMgPSB2YWx1ZSAqIHRoaXMuX21heFNjYWxlO1xuICAgIHRoaXMuX3B4U2hhcGUuc2V0R2VvbWV0cnkodGhpcy5fcHhHZW9tZXRyeSk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX3NjYWxlLmNvcHlGcm9tKHNjYWxlKTtcbiAgICB0aGlzLl9zZXRMb2NhbFBvc2UoKTtcblxuICAgIHRoaXMuX21heFNjYWxlID0gTWF0aC5tYXgoc2NhbGUueCwgTWF0aC5tYXgoc2NhbGUueCwgc2NhbGUueSkpO1xuICAgIHRoaXMuX3B4R2VvbWV0cnkucmFkaXVzID0gdGhpcy5fcmFkaXVzICogdGhpcy5fbWF4U2NhbGU7XG4gICAgdGhpcy5fcHhTaGFwZS5zZXRHZW9tZXRyeSh0aGlzLl9weEdlb21ldHJ5KTtcbiAgfVxufVxuIiwiLyoqXG4gKiAgU3RhdGljIGludGVyZmFjZSBpbXBsZW1lbnQgZGVjb3JhdG9yLlxuICogIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzOTU1MTU3L2hvdy10by1kZWZpbmUtc3RhdGljLXByb3BlcnR5LWluLXR5cGVzY3JpcHQtaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQ8VD4oKSB7XG4gIHJldHVybiA8VSBleHRlbmRzIFQ+KGNvbnN0cnVjdG9yOiBVKSA9PiB7XG4gICAgY29uc3RydWN0b3I7XG4gIH07XG59XG4iLCJpbXBvcnQge1xuICBJQm94Q29sbGlkZXJTaGFwZSxcbiAgSUNhcHN1bGVDb2xsaWRlclNoYXBlLFxuICBJQ2hhcmFjdGVyQ29udHJvbGxlcixcbiAgSUR5bmFtaWNDb2xsaWRlcixcbiAgSUZpeGVkSm9pbnQsXG4gIElIaW5nZUpvaW50LFxuICBJUGh5c2ljcyxcbiAgSVBoeXNpY3NNYW5hZ2VyLFxuICBJUGh5c2ljc01hdGVyaWFsLFxuICBJUGxhbmVDb2xsaWRlclNoYXBlLFxuICBJU3BoZXJlQ29sbGlkZXJTaGFwZSxcbiAgSVNwcmluZ0pvaW50LFxuICBJU3RhdGljQ29sbGlkZXJcbn0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IFBoeXNYUnVudGltZU1vZGUgfSBmcm9tIFwiLi9lbnVtL1BoeXNYUnVudGltZU1vZGVcIjtcbmltcG9ydCB7IFBoeXNYRml4ZWRKb2ludCB9IGZyb20gXCIuL2pvaW50L1BoeXNYRml4ZWRKb2ludFwiO1xuaW1wb3J0IHsgUGh5c1hIaW5nZUpvaW50IH0gZnJvbSBcIi4vam9pbnQvUGh5c1hIaW5nZUpvaW50XCI7XG5pbXBvcnQgeyBQaHlzWFNwcmluZ0pvaW50IH0gZnJvbSBcIi4vam9pbnQvUGh5c1hTcHJpbmdKb2ludFwiO1xuaW1wb3J0IHsgUGh5c1hDaGFyYWN0ZXJDb250cm9sbGVyIH0gZnJvbSBcIi4vUGh5c1hDaGFyYWN0ZXJDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBQaHlzWENvbGxpZGVyIH0gZnJvbSBcIi4vUGh5c1hDb2xsaWRlclwiO1xuaW1wb3J0IHsgUGh5c1hEeW5hbWljQ29sbGlkZXIgfSBmcm9tIFwiLi9QaHlzWER5bmFtaWNDb2xsaWRlclwiO1xuaW1wb3J0IHsgUGh5c1hQaHlzaWNzTWFuYWdlciB9IGZyb20gXCIuL1BoeXNYUGh5c2ljc01hbmFnZXJcIjtcbmltcG9ydCB7IFBoeXNYUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4vUGh5c1hQaHlzaWNzTWF0ZXJpYWxcIjtcbmltcG9ydCB7IFBoeXNYU3RhdGljQ29sbGlkZXIgfSBmcm9tIFwiLi9QaHlzWFN0YXRpY0NvbGxpZGVyXCI7XG5pbXBvcnQgeyBQaHlzWEJveENvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9QaHlzWEJveENvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IFBoeXNYQ2Fwc3VsZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9QaHlzWENhcHN1bGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBQaHlzWFBsYW5lQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL1BoeXNYUGxhbmVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBQaHlzWFNwaGVyZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9zaGFwZS9QaHlzWFNwaGVyZUNvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IFN0YXRpY0ludGVyZmFjZUltcGxlbWVudCB9IGZyb20gXCIuL1N0YXRpY0ludGVyZmFjZUltcGxlbWVudFwiO1xuXG4vKipcbiAqIFBoeXNYIG9iamVjdCBjcmVhdGlvbi5cbiAqL1xuQFN0YXRpY0ludGVyZmFjZUltcGxlbWVudDxJUGh5c2ljcz4oKVxuZXhwb3J0IGNsYXNzIFBoeXNYUGh5c2ljcyB7XG4gIC8qKiBAaW50ZXJuYWwgUGh5c1ggd2FzbSBvYmplY3QgKi9cbiAgc3RhdGljIF9waHlzWDogYW55O1xuICAvKiogQGludGVybmFsIFBoeXNYIEZvdW5kYXRpb24gU0RLIHNpbmdsZXRvbiBjbGFzcyAqL1xuICBzdGF0aWMgX3B4Rm91bmRhdGlvbjogYW55O1xuICAvKiogQGludGVybmFsIFBoeXN4IHBoeXNpY3Mgb2JqZWN0ICovXG4gIHN0YXRpYyBfcHhQaHlzaWNzOiBhbnk7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgUGh5c1hQaHlzaWNzLlxuICAgKiBAcGFyYW0gcnVudGltZU1vZGUgLSBSdW50aW1lIG1vZGVcbiAgICogQHJldHVybnMgUHJvbWlzZSBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW5pdGlhbGl6ZShydW50aW1lTW9kZTogUGh5c1hSdW50aW1lTW9kZSA9IFBoeXNYUnVudGltZU1vZGUuQXV0byk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNjcmlwdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICBpZiAocnVudGltZU1vZGUgPT0gUGh5c1hSdW50aW1lTW9kZS5BdXRvKSB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZCA9ICgoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgV2ViQXNzZW1ibHkgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShVaW50OEFycmF5Lm9mKDB4MCwgMHg2MSwgMHg3MywgMHg2ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCkpO1xuICAgICAgICAgICAgICBpZiAobW9kdWxlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuTW9kdWxlKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlKSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lkluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KSgpO1xuICAgICAgICBpZiAoc3VwcG9ydGVkKSB7XG4gICAgICAgICAgcnVudGltZU1vZGUgPSBQaHlzWFJ1bnRpbWVNb2RlLldlYkFzc2VtYmx5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bnRpbWVNb2RlID0gUGh5c1hSdW50aW1lTW9kZS5KYXZhU2NyaXB0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChydW50aW1lTW9kZSA9PSBQaHlzWFJ1bnRpbWVNb2RlLkphdmFTY3JpcHQpIHtcbiAgICAgICAgc2NyaXB0LnNyYyA9XG4gICAgICAgICAgXCJodHRwczovL2d3LmFsaXBheW9iamVjdHMuY29tL29zL2xpYi9vYXNpcy1lbmdpbmUvcGh5c2ljcy1waHlzeC8wLjkuMC1iZXRhLjU2L2xpYnMvcGh5c3gucmVsZWFzZS5qcy5qc1wiO1xuICAgICAgfSBlbHNlIGlmIChydW50aW1lTW9kZSA9PSBQaHlzWFJ1bnRpbWVNb2RlLldlYkFzc2VtYmx5KSB7XG4gICAgICAgIHNjcmlwdC5zcmMgPVxuICAgICAgICAgIFwiaHR0cHM6Ly9ndy5hbGlwYXlvYmplY3RzLmNvbS9vcy9saWIvb2FzaXMtZW5naW5lL3BoeXNpY3MtcGh5c3gvMC45LjAtYmV0YS41Ni9saWJzL3BoeXN4LnJlbGVhc2UuanNcIjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzY3JpcHRQcm9taXNlXG4gICAgICAgIC50aGVuKFxuICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAoPGFueT53aW5kb3cpLlBIWVNYKCkudGhlbigoUEhZU1gpID0+IHtcbiAgICAgICAgICAgICAgUGh5c1hQaHlzaWNzLl9pbml0KFBIWVNYKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJQaHlzWCBsb2FkZWQuXCIpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpLFxuICAgICAgICAgIHJlamVjdFxuICAgICAgICApXG4gICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgUGh5c1hQaHlzaWNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3B4Rm91bmRhdGlvbi5yZWxlYXNlKCk7XG4gICAgdGhpcy5fcHhQaHlzaWNzLnJlbGVhc2UoKTtcbiAgICB0aGlzLl9waHlzWCA9IG51bGw7XG4gICAgdGhpcy5fcHhGb3VuZGF0aW9uID0gbnVsbDtcbiAgICB0aGlzLl9weFBoeXNpY3MgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVQaHlzaWNzTWFuYWdlciB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGh5c2ljc01hbmFnZXIoXG4gICAgb25Db250YWN0QmVnaW4/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0RW5kPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uQ29udGFjdFN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyQmVnaW4/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyRW5kPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlclN0YXk/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWRcbiAgKTogSVBoeXNpY3NNYW5hZ2VyIHtcbiAgICByZXR1cm4gbmV3IFBoeXNYUGh5c2ljc01hbmFnZXIoXG4gICAgICBvbkNvbnRhY3RCZWdpbixcbiAgICAgIG9uQ29udGFjdEVuZCxcbiAgICAgIG9uQ29udGFjdFN0YXksXG4gICAgICBvblRyaWdnZXJCZWdpbixcbiAgICAgIG9uVHJpZ2dlckVuZCxcbiAgICAgIG9uVHJpZ2dlclN0YXlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVTdGF0aWNDb2xsaWRlciB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU3RhdGljQ29sbGlkZXIocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogSVN0YXRpY0NvbGxpZGVyIHtcbiAgICByZXR1cm4gbmV3IFBoeXNYU3RhdGljQ29sbGlkZXIocG9zaXRpb24sIHJvdGF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlRHluYW1pY0NvbGxpZGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVEeW5hbWljQ29sbGlkZXIocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogSUR5bmFtaWNDb2xsaWRlciB7XG4gICAgcmV0dXJuIG5ldyBQaHlzWER5bmFtaWNDb2xsaWRlcihwb3NpdGlvbiwgcm90YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDaGFyYWN0ZXJDb250cm9sbGVyKCk6IElDaGFyYWN0ZXJDb250cm9sbGVyIHtcbiAgICByZXR1cm4gbmV3IFBoeXNYQ2hhcmFjdGVyQ29udHJvbGxlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVQaHlzaWNzTWF0ZXJpYWwgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVBoeXNpY3NNYXRlcmlhbChcbiAgICBzdGF0aWNGcmljdGlvbjogbnVtYmVyLFxuICAgIGR5bmFtaWNGcmljdGlvbjogbnVtYmVyLFxuICAgIGJvdW5jaW5lc3M6IG51bWJlcixcbiAgICBmcmljdGlvbkNvbWJpbmU6IG51bWJlcixcbiAgICBib3VuY2VDb21iaW5lOiBudW1iZXJcbiAgKTogSVBoeXNpY3NNYXRlcmlhbCB7XG4gICAgcmV0dXJuIG5ldyBQaHlzWFBoeXNpY3NNYXRlcmlhbChzdGF0aWNGcmljdGlvbiwgZHluYW1pY0ZyaWN0aW9uLCBib3VuY2luZXNzLCBmcmljdGlvbkNvbWJpbmUsIGJvdW5jZUNvbWJpbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVCb3hDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVCb3hDb2xsaWRlclNoYXBlKHVuaXF1ZUlEOiBudW1iZXIsIHNpemU6IFZlY3RvcjMsIG1hdGVyaWFsOiBQaHlzWFBoeXNpY3NNYXRlcmlhbCk6IElCb3hDb2xsaWRlclNoYXBlIHtcbiAgICByZXR1cm4gbmV3IFBoeXNYQm94Q29sbGlkZXJTaGFwZSh1bmlxdWVJRCwgc2l6ZSwgbWF0ZXJpYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVTcGhlcmVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTcGhlcmVDb2xsaWRlclNoYXBlKFxuICAgIHVuaXF1ZUlEOiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXIsXG4gICAgbWF0ZXJpYWw6IFBoeXNYUGh5c2ljc01hdGVyaWFsXG4gICk6IElTcGhlcmVDb2xsaWRlclNoYXBlIHtcbiAgICByZXR1cm4gbmV3IFBoeXNYU3BoZXJlQ29sbGlkZXJTaGFwZSh1bmlxdWVJRCwgcmFkaXVzLCBtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBsYW5lQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUGxhbmVDb2xsaWRlclNoYXBlKHVuaXF1ZUlEOiBudW1iZXIsIG1hdGVyaWFsOiBQaHlzWFBoeXNpY3NNYXRlcmlhbCk6IElQbGFuZUNvbGxpZGVyU2hhcGUge1xuICAgIHJldHVybiBuZXcgUGh5c1hQbGFuZUNvbGxpZGVyU2hhcGUodW5pcXVlSUQsIG1hdGVyaWFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlQ2Fwc3VsZUNvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUNhcHN1bGVDb2xsaWRlclNoYXBlKFxuICAgIHVuaXF1ZUlEOiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgbWF0ZXJpYWw6IFBoeXNYUGh5c2ljc01hdGVyaWFsXG4gICk6IElDYXBzdWxlQ29sbGlkZXJTaGFwZSB7XG4gICAgcmV0dXJuIG5ldyBQaHlzWENhcHN1bGVDb2xsaWRlclNoYXBlKHVuaXF1ZUlELCByYWRpdXMsIGhlaWdodCwgbWF0ZXJpYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVGaXhlZEpvaW50IH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVGaXhlZEpvaW50KGNvbGxpZGVyOiBQaHlzWENvbGxpZGVyKTogSUZpeGVkSm9pbnQge1xuICAgIHJldHVybiBuZXcgUGh5c1hGaXhlZEpvaW50KGNvbGxpZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlSGluZ2VKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlSGluZ2VKb2ludChjb2xsaWRlcjogUGh5c1hDb2xsaWRlcik6IElIaW5nZUpvaW50IHtcbiAgICByZXR1cm4gbmV3IFBoeXNYSGluZ2VKb2ludChjb2xsaWRlcik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVNwcmluZ0pvaW50IH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTcHJpbmdKb2ludChjb2xsaWRlcjogUGh5c1hDb2xsaWRlcik6IElTcHJpbmdKb2ludCB7XG4gICAgcmV0dXJuIG5ldyBQaHlzWFNwcmluZ0pvaW50KGNvbGxpZGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9pbml0KHBoeXNYOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gcGh5c1guUFhfUEhZU0lDU19WRVJTSU9OO1xuICAgIGNvbnN0IGRlZmF1bHRFcnJvckNhbGxiYWNrID0gbmV3IHBoeXNYLlB4RGVmYXVsdEVycm9yQ2FsbGJhY2soKTtcbiAgICBjb25zdCBhbGxvY2F0b3IgPSBuZXcgcGh5c1guUHhEZWZhdWx0QWxsb2NhdG9yKCk7XG4gICAgY29uc3QgcHhGb3VuZGF0aW9uID0gcGh5c1guUHhDcmVhdGVGb3VuZGF0aW9uKHZlcnNpb24sIGFsbG9jYXRvciwgZGVmYXVsdEVycm9yQ2FsbGJhY2spO1xuICAgIGNvbnN0IHB4UGh5c2ljcyA9IHBoeXNYLlB4Q3JlYXRlUGh5c2ljcyh2ZXJzaW9uLCBweEZvdW5kYXRpb24sIG5ldyBwaHlzWC5QeFRvbGVyYW5jZXNTY2FsZSgpLCBmYWxzZSwgbnVsbCk7XG5cbiAgICBwaHlzWC5QeEluaXRFeHRlbnNpb25zKHB4UGh5c2ljcywgbnVsbCk7XG4gICAgUGh5c1hQaHlzaWNzLl9waHlzWCA9IHBoeXNYO1xuICAgIFBoeXNYUGh5c2ljcy5fcHhGb3VuZGF0aW9uID0gcHhGb3VuZGF0aW9uO1xuICAgIFBoeXNYUGh5c2ljcy5fcHhQaHlzaWNzID0gcHhQaHlzaWNzO1xuICAgIFBoeXNYUGh5c2ljc01hbmFnZXIuX2luaXQoKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlBoeXNYUnVudGltZU1vZGUiLCJBdXRvIiwiV2ViQXNzZW1ibHkiLCJKYXZhU2NyaXB0IiwiUGh5c1hKb2ludCIsIl9jb25uZWN0ZWRBbmNob3IiLCJWZWN0b3IzIiwiX2JyZWFrRm9yY2UiLCJOdW1iZXIiLCJNQVhfVkFMVUUiLCJfYnJlYWtUb3JxdWUiLCJzZXRDb25uZWN0ZWRDb2xsaWRlciIsInZhbHVlIiwiX3B4Sm9pbnQiLCJzZXRBY3RvcnMiLCJfcHhBY3RvciIsIl9jb2xsaWRlciIsInNldENvbm5lY3RlZEFuY2hvciIsImNvcHlGcm9tIiwiX3NldExvY2FsUG9zZSIsIl9kZWZhdWx0UXVhdCIsInNldENvbm5lY3RlZE1hc3NTY2FsZSIsInNldEludk1hc3NTY2FsZTAiLCJzZXRDb25uZWN0ZWRJbmVydGlhU2NhbGUiLCJzZXRJbnZJbmVydGlhU2NhbGUwIiwic2V0TWFzc1NjYWxlIiwic2V0SW52TWFzc1NjYWxlMSIsInNldEluZXJ0aWFTY2FsZSIsInNldEludkluZXJ0aWFTY2FsZTEiLCJzZXRCcmVha0ZvcmNlIiwic2V0QnJlYWtUb3JxdWUiLCJhY3RvciIsInBvc2l0aW9uIiwicm90YXRpb24iLCJzZXRMb2NhbFBvc2UiLCJfeEF4aXMiLCJfZGVmYXVsdFZlYyIsIlF1YXRlcm5pb24iLCJQaHlzWEZpeGVkSm9pbnQiLCJjb2xsaWRlciIsIlBoeXNYUGh5c2ljcyIsIl9weFBoeXNpY3MiLCJjcmVhdGVGaXhlZEpvaW50IiwiUGh5c1hIaW5nZUpvaW50IiwiX2F4aXNSb3RhdGlvblF1YXRlcm5pb24iLCJfc3dpbmdPZmZzZXQiLCJfdmVsb2NpdHkiLCJjcmVhdGVSZXZvbHV0ZUpvaW50Iiwic2V0QXhpcyIsInhBeGlzIiwiYXhpc1JvdGF0aW9uUXVhdGVybmlvbiIsInNldCIsIm5vcm1hbGl6ZSIsImFuZ2xlIiwiTWF0aCIsImFjb3MiLCJkb3QiLCJjcm9zcyIsInJvdGF0aW9uQXhpc0FuZ2xlIiwic2V0U3dpbmdPZmZzZXQiLCJnZXRBbmdsZSIsImdldFZlbG9jaXR5IiwidmVsb2NpdHkiLCJzZXRIYXJkTGltaXQiLCJsb3dlckxpbWl0IiwidXBwZXJMaW1pdCIsImNvbnRhY3REaXN0Iiwic2V0U29mdExpbWl0Iiwic3RpZmZuZXNzIiwiZGFtcGluZyIsInNldERyaXZlVmVsb2NpdHkiLCJzZXREcml2ZUZvcmNlTGltaXQiLCJsaW1pdCIsInNldERyaXZlR2VhclJhdGlvIiwicmF0aW8iLCJzZXRIaW5nZUpvaW50RmxhZyIsImZsYWciLCJzZXRSZXZvbHV0ZUpvaW50RmxhZyIsIlBoeXNYU3ByaW5nSm9pbnQiLCJjcmVhdGVEaXN0YW5jZUpvaW50Iiwic2V0RGlzdGFuY2VKb2ludEZsYWciLCJzZXRNaW5EaXN0YW5jZSIsImRpc3RhbmNlIiwic2V0TWF4RGlzdGFuY2UiLCJzZXRUb2xlcmFuY2UiLCJ0b2xlcmFuY2UiLCJzZXRTdGlmZm5lc3MiLCJzZXREYW1waW5nIiwiRGlzb3JkZXJlZEFycmF5IiwiY291bnQiLCJsZW5ndGgiLCJfZWxlbWVudHMiLCJBcnJheSIsImFkZCIsImVsZW1lbnQiLCJwdXNoIiwiZGVsZXRlIiwiaW5kZXgiLCJpbmRleE9mIiwiZGVsZXRlQnlJbmRleCIsImdldCIsImVsZW1lbnRzIiwiZW5kIiwibGFzdEluZGV4IiwiZ2FyYmFnZUNvbGxlY3Rpb24iLCJTaGFwZUZsYWciLCJTSU1VTEFUSU9OX1NIQVBFIiwiU0NFTkVfUVVFUllfU0hBUEUiLCJUUklHR0VSX1NIQVBFIiwiUGh5c1hDb2xsaWRlclNoYXBlIiwiX2NvbnRyb2xsZXJzIiwiX3NjYWxlIiwiX3Bvc2l0aW9uIiwiX3JvdGF0aW9uIiwiX2F4aXMiLCJfcGh5c3hSb3RhdGlvbiIsIl9zaGFwZUZsYWdzIiwiX3B4TWF0ZXJpYWxzIiwic2V0Um90YXRpb24iLCJyb3RhdGlvbllhd1BpdGNoUm9sbCIsIngiLCJ5IiwieiIsIm11bHRpcGx5Iiwic2V0UG9zaXRpb24iLCJzZXRDb250YWN0T2Zmc2V0Iiwib2Zmc2V0IiwiX3B4U2hhcGUiLCJjb250cm9sbGVycyIsImkiLCJuIiwiX3B4Q29udHJvbGxlciIsInNldE1hdGVyaWFsIiwiX3B4TWF0ZXJpYWwiLCJzZXRNYXRlcmlhbHMiLCJzZXRJc1RyaWdnZXIiLCJfbW9kaWZ5RmxhZyIsIl9zZXRTaGFwZUZsYWdzIiwiZGVzdHJveSIsInJlbGVhc2UiLCJmbGFncyIsInNldEZsYWdzIiwiX3BoeXNYIiwiUHhTaGFwZUZsYWdzIiwidHJhbnNmb3JtIiwidHJhbnNsYXRpb24iLCJfaW5pdGlhbGl6ZSIsIm1hdGVyaWFsIiwiaWQiLCJfaWQiLCJjcmVhdGVTaGFwZSIsIl9weEdlb21ldHJ5Iiwic2V0UXVlcnlGaWx0ZXJEYXRhIiwiUHhGaWx0ZXJEYXRhIiwiaGFsZlNxcnQiLCJQaHlzWEJveENvbGxpZGVyU2hhcGUiLCJ1bmlxdWVJRCIsInNpemUiLCJfaGFsZlNpemUiLCJQeEJveEdlb21ldHJ5Iiwic2V0U2l6ZSIsIl90ZW1wSGFsZkV4dGVudHMiLCJoYWxmRXh0ZW50cyIsInNldEdlb21ldHJ5IiwicHhDb250cm9sbGVyIiwic2V0SGFsZkhlaWdodCIsInNldEhhbGZTaWRlRXh0ZW50Iiwic2V0SGFsZkZvcndhcmRFeHRlbnQiLCJzZXRXb3JsZFNjYWxlIiwic2NhbGUiLCJQaHlzWENhcHN1bGVDb2xsaWRlclNoYXBlIiwicmFkaXVzIiwiaGVpZ2h0IiwiX3VwQXhpcyIsIlkiLCJfcmFkaXVzIiwiX2hhbGZIZWlnaHQiLCJQeENhcHN1bGVHZW9tZXRyeSIsInNldFJhZGl1cyIsIlgiLCJtYXgiLCJaIiwic2V0SGVpZ2h0IiwiaGFsZkhlaWdodCIsInNldFVwQXhpcyIsInVwQXhpcyIsImF4aXMiLCJwaHlzeFJvdGF0aW9uIiwiQ29sbGlkZXJTaGFwZVVwQXhpcyIsIlBoeXNYQ2hhcmFjdGVyQ29udHJvbGxlciIsIm1vdmUiLCJkaXNwIiwibWluRGlzdCIsImVsYXBzZWRUaW1lIiwic2V0V29ybGRQb3NpdGlvbiIsImdldFdvcmxkUG9zaXRpb24iLCJnZXRQb3NpdGlvbiIsInNldFN0ZXBPZmZzZXQiLCJzZXROb25XYWxrYWJsZU1vZGUiLCJzZXRVcERpcmVjdGlvbiIsInVwIiwic2V0U2xvcGVMaW1pdCIsInNsb3BlTGltaXQiLCJhZGRTaGFwZSIsInNoYXBlIiwiX3B4TWFuYWdlciIsIl9jcmVhdGVQWENvbnRyb2xsZXIiLCJfc2hhcGUiLCJyZW1vdmVTaGFwZSIsIl9kZXN0cm95UFhDb250cm9sbGVyIiwicHhNYW5hZ2VyIiwiZGVzYyIsIlB4Qm94Q29udHJvbGxlckRlc2MiLCJoYWxmU2lkZUV4dGVudCIsImhhbGZGb3J3YXJkRXh0ZW50IiwiUHhDYXBzdWxlQ29udHJvbGxlckRlc2MiLCJjbGltYmluZ01vZGUiLCJfZ2V0Q29udHJvbGxlck1hbmFnZXIiLCJjcmVhdGVDb250cm9sbGVyIiwiUGh5c1hDb2xsaWRlciIsImF0dGFjaFNoYXBlIiwiZGV0YWNoU2hhcGUiLCJzZXRXb3JsZFRyYW5zZm9ybSIsInNldEdsb2JhbFBvc2UiLCJfdHJhbnNmb3JtIiwiZ2V0V29ybGRUcmFuc2Zvcm0iLCJvdXRQb3NpdGlvbiIsIm91dFJvdGF0aW9uIiwiZ2V0R2xvYmFsUG9zZSIsInciLCJwb3MiLCJyb3QiLCJfdGVtcFRyYW5zZm9ybSIsIkNvbGxpc2lvbkRldGVjdGlvbk1vZGUiLCJEaXNjcmV0ZSIsIkNvbnRpbnVvdXMiLCJDb250aW51b3VzRHluYW1pYyIsIkNvbnRpbnVvdXNTcGVjdWxhdGl2ZSIsIlBoeXNYRHluYW1pY0NvbGxpZGVyIiwiY3JlYXRlUmlnaWREeW5hbWljIiwic2V0TGluZWFyRGFtcGluZyIsInNldEFuZ3VsYXJEYW1waW5nIiwic2V0TGluZWFyVmVsb2NpdHkiLCJzZXRBbmd1bGFyVmVsb2NpdHkiLCJzZXRNYXNzIiwic2V0Q2VudGVyT2ZNYXNzIiwic2V0Q01hc3NMb2NhbFBvc2UiLCJzZXRJbmVydGlhVGVuc29yIiwic2V0TWFzc1NwYWNlSW5lcnRpYVRlbnNvciIsInNldE1heEFuZ3VsYXJWZWxvY2l0eSIsInNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eSIsInNldFNsZWVwVGhyZXNob2xkIiwic2V0U29sdmVySXRlcmF0aW9ucyIsInNldFNvbHZlckl0ZXJhdGlvbkNvdW50cyIsInNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUiLCJzZXRSaWdpZEJvZHlGbGFnIiwiUHhSaWdpZEJvZHlGbGFnIiwiZUVOQUJMRV9DQ0QiLCJlRU5BQkxFX0NDRF9GUklDVElPTiIsImVFTkFCTEVfU1BFQ1VMQVRJVkVfQ0NEIiwic2V0SXNLaW5lbWF0aWMiLCJlS0lORU1BVElDIiwic2V0Q29uc3RyYWludHMiLCJzZXRSaWdpZER5bmFtaWNMb2NrRmxhZ3MiLCJhZGRGb3JjZSIsImZvcmNlIiwiYWRkVG9ycXVlIiwidG9ycXVlIiwicG9zaXRpb25PclJvdGF0aW9uIiwic2V0S2luZW1hdGljVGFyZ2V0IiwidGVtcFRyYW5zbGF0aW9uIiwiX3RlbXBUcmFuc2xhdGlvbiIsInRlbXBSb3RhdGlvbiIsIl90ZW1wUm90YXRpb24iLCJzbGVlcCIsInB1dFRvU2xlZXAiLCJ3YWtlVXAiLCJQaHlzWFBoeXNpY3NNYW5hZ2VyIiwib25Db250YWN0RW50ZXIiLCJvbkNvbnRhY3RFeGl0Iiwib25Db250YWN0U3RheSIsIm9uVHJpZ2dlckVudGVyIiwib25UcmlnZ2VyRXhpdCIsIm9uVHJpZ2dlclN0YXkiLCJfcHhDb250cm9sbGVyTWFuYWdlciIsIl9jdXJyZW50RXZlbnRzIiwiX2V2ZW50TWFwIiwiX2V2ZW50UG9vbCIsIl9vbkNvbnRhY3RFbnRlciIsIl9vbkNvbnRhY3RFeGl0IiwiX29uQ29udGFjdFN0YXkiLCJfb25UcmlnZ2VyRW50ZXIiLCJfb25UcmlnZ2VyRXhpdCIsIl9vblRyaWdnZXJTdGF5IiwidHJpZ2dlckNhbGxiYWNrIiwib25Db250YWN0QmVnaW4iLCJvYmoxIiwib2JqMiIsImluZGV4MSIsImdldFF1ZXJ5RmlsdGVyRGF0YSIsIndvcmQwIiwiaW5kZXgyIiwib25Db250YWN0RW5kIiwib25Db250YWN0UGVyc2lzdCIsIm9uVHJpZ2dlckJlZ2luIiwiZXZlbnQiLCJfZ2V0VHJpZ2dlciIsInN0YXRlIiwiRW50ZXIiLCJvblRyaWdnZXJFbmQiLCJzdWJNYXAiLCJ1bmRlZmluZWQiLCJFeGl0IiwiUEhZU1hTaW11bGF0aW9uQ2FsbGJhY2tJbnN0YW5jZSIsIlB4U2ltdWxhdGlvbkV2ZW50Q2FsbGJhY2siLCJpbXBsZW1lbnQiLCJzY2VuZURlc2MiLCJnZXREZWZhdWx0U2NlbmVEZXNjIiwiZ2V0VG9sZXJhbmNlc1NjYWxlIiwiX3B4U2NlbmUiLCJjcmVhdGVTY2VuZSIsInNldEdyYXZpdHkiLCJhZGRDb2xsaWRlclNoYXBlIiwiY29sbGlkZXJTaGFwZSIsInJlbW92ZUNvbGxpZGVyU2hhcGUiLCJldmVudFBvb2wiLCJjdXJyZW50RXZlbnRzIiwic2hhcGVJRCIsImFkZENvbGxpZGVyIiwiYWRkQWN0b3IiLCJyZW1vdmVDb2xsaWRlciIsInJlbW92ZUFjdG9yIiwiYWRkQ2hhcmFjdGVyQ29udHJvbGxlciIsImNoYXJhY3RlckNvbnRyb2xsZXIiLCJsYXN0UFhNYW5hZ2VyIiwiYWRkQ29udHJvbGxlciIsInJlbW92ZUNoYXJhY3RlckNvbnRyb2xsZXIiLCJyZW1vdmVDb250cm9sbGVyIiwidXBkYXRlIiwiX3NpbXVsYXRlIiwiX2ZldGNoUmVzdWx0cyIsIl9maXJlRXZlbnQiLCJyYXljYXN0IiwicmF5Iiwib25SYXljYXN0IiwiaGl0IiwicHhIaXRSZXN1bHQiLCJfcHhSYXljYXN0SGl0IiwibWluIiwicmF5Y2FzdENhbGxiYWNrIiwicHJlRmlsdGVyIiwiZmlsdGVyRGF0YSIsInBvc3RGaWx0ZXIiLCJyZXN1bHQiLCJyYXljYXN0U2luZ2xlIiwib3JpZ2luIiwiZGlyZWN0aW9uIiwiX3B4RmlsdGVyRGF0YSIsIlB4UXVlcnlGaWx0ZXJDYWxsYmFjayIsIl90ZW1wUG9zaXRpb24iLCJfdGVtcE5vcm1hbCIsIm5vcm1hbCIsInB4Tm9ybWFsIiwicHhQb3NpdGlvbiIsImdldFNoYXBlIiwicHhDb250cm9sbGVyTWFuYWdlciIsImNyZWF0ZUNvbnRyb2xsZXJNYW5hZ2VyIiwic2ltdWxhdGUiLCJibG9jayIsImZldGNoUmVzdWx0cyIsInBvcCIsIlRyaWdnZXJFdmVudCIsIlN0YXkiLCJfaW5pdCIsIlB4UmF5Y2FzdEhpdCIsIlB4UXVlcnlGaWx0ZXJEYXRhIiwiUHhRdWVyeUZsYWdzIiwiUXVlcnlGbGFnIiwiU1RBVElDIiwiRFlOQU1JQyIsIlBSRV9GSUxURVIiLCJQT1NUX0ZJTFRFUiIsIkFOWV9ISVQiLCJOT19CTE9DSyIsIlRyaWdnZXJFdmVudFN0YXRlIiwiUGh5c1hQaHlzaWNzTWF0ZXJpYWwiLCJzdGF0aWNGcmljdGlvbiIsImR5bmFtaWNGcmljdGlvbiIsImJvdW5jaW5lc3MiLCJmcmljdGlvbkNvbWJpbmUiLCJib3VuY2VDb21iaW5lIiwicHhNYXRlcmlhbCIsImNyZWF0ZU1hdGVyaWFsIiwic2V0RnJpY3Rpb25Db21iaW5lTW9kZSIsInNldFJlc3RpdHV0aW9uQ29tYmluZU1vZGUiLCJzZXRCb3VuY2luZXNzIiwic2V0UmVzdGl0dXRpb24iLCJzZXREeW5hbWljRnJpY3Rpb24iLCJzZXRTdGF0aWNGcmljdGlvbiIsInNldEJvdW5jZUNvbWJpbmUiLCJzZXRGcmljdGlvbkNvbWJpbmUiLCJDb21iaW5lTW9kZSIsIkF2ZXJhZ2UiLCJNaW5pbXVtIiwiTXVsdGlwbHkiLCJNYXhpbXVtIiwiUGh5c1hTdGF0aWNDb2xsaWRlciIsImNyZWF0ZVJpZ2lkU3RhdGljIiwiUGh5c1hQbGFuZUNvbGxpZGVyU2hhcGUiLCJQeFBsYW5lR2VvbWV0cnkiLCJQaHlzWFNwaGVyZUNvbGxpZGVyU2hhcGUiLCJfbWF4U2NhbGUiLCJQeFNwaGVyZUdlb21ldHJ5IiwiU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50IiwiY29uc3RydWN0b3IiLCJpbml0aWFsaXplIiwicnVudGltZU1vZGUiLCJzY3JpcHRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzY3JpcHQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJhc3luYyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdXBwb3J0ZWQiLCJpbnN0YW50aWF0ZSIsIm1vZHVsZSIsIk1vZHVsZSIsIlVpbnQ4QXJyYXkiLCJvZiIsIkluc3RhbmNlIiwiZSIsInNyYyIsInRoZW4iLCJ3aW5kb3ciLCJQSFlTWCIsImNvbnNvbGUiLCJsb2ciLCJjYXRjaCIsIl9weEZvdW5kYXRpb24iLCJjcmVhdGVQaHlzaWNzTWFuYWdlciIsImNyZWF0ZVN0YXRpY0NvbGxpZGVyIiwiY3JlYXRlRHluYW1pY0NvbGxpZGVyIiwiY3JlYXRlQ2hhcmFjdGVyQ29udHJvbGxlciIsImNyZWF0ZVBoeXNpY3NNYXRlcmlhbCIsImNyZWF0ZUJveENvbGxpZGVyU2hhcGUiLCJjcmVhdGVTcGhlcmVDb2xsaWRlclNoYXBlIiwiY3JlYXRlUGxhbmVDb2xsaWRlclNoYXBlIiwiY3JlYXRlQ2Fwc3VsZUNvbGxpZGVyU2hhcGUiLCJjcmVhdGVIaW5nZUpvaW50IiwiY3JlYXRlU3ByaW5nSm9pbnQiLCJwaHlzWCIsInZlcnNpb24iLCJQWF9QSFlTSUNTX1ZFUlNJT04iLCJkZWZhdWx0RXJyb3JDYWxsYmFjayIsIlB4RGVmYXVsdEVycm9yQ2FsbGJhY2siLCJhbGxvY2F0b3IiLCJQeERlZmF1bHRBbGxvY2F0b3IiLCJweEZvdW5kYXRpb24iLCJQeENyZWF0ZUZvdW5kYXRpb24iLCJweFBoeXNpY3MiLCJQeENyZWF0ZVBoeXNpY3MiLCJQeFRvbGVyYW5jZXNTY2FsZSIsIlB4SW5pdEV4dGVuc2lvbnMiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFPLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDekMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDckYsUUFBUSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELEtBQUssTUFBTSxPQUFPLElBQUksWUFBWSxLQUFLLENBQUM7QUFDeEM7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXdDQTtBQUNPLFNBQVMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUMxRCxJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FB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
1381
+ //# sourceMappingURL=main.js.map